Example #1
0
        public async Task <ChatMessageResponse> CreateChatMessageAsync(CreateChatMessage chatMessage)
        {
            // User should already be authorized
            ChatMessageResponse chatMessageResponse = new ChatMessageResponse();

            try
            {
                User      user          = chatMessage.User;
                Guid      chatGroupUuid = chatMessage.ChatGroupUuid;
                ChatGroup chatGroup     = await _chatGroupRepository.GetByUuidAsync(chatGroupUuid);

                if (chatGroup == null)
                {
                    string messageStr = ResourceNotFoundMessage("ChatGroup", chatGroupUuid);
                    return(new ChatMessageResponse {
                        ErrorMessage = messageStr
                    });
                }

                ChatMessage saveChatMessage = new ChatMessage()
                {
                    UserId      = user.Id,
                    User        = user,
                    ChatGroupId = chatGroup.ChatGroupId,
                    ChatGroup   = chatGroup,
                    Message     = chatMessage.Message,
                };
                //Save the message
                await _chatMessageRepository.AddMessageAsync(saveChatMessage);

                await _unitOfWork.CompleteAsync();

                ChatMessageDTO chatMessageDTO = new ChatMessageDTO
                {
                    Uuid          = saveChatMessage.Uuid,
                    Message       = saveChatMessage.Message,
                    CreatedOn     = saveChatMessage.CreatedOn,
                    ChatGroupName = saveChatMessage.ChatGroup.ChatGroupName,
                    ChatGroupUuid = saveChatMessage.ChatGroup.Uuid,
                    UserName      = saveChatMessage.User.UserName,
                    UserUuid      = saveChatMessage.User.Id
                };

                //ChatMessageDTO messageResource = _mapper.Map<Message, FromMessageDTO>(message);

                chatMessageResponse.Success        = true;
                chatMessageResponse.ChatMessageDTO = chatMessageDTO;
            }
            catch (Exception ex)
            {
                // Do some logging stuff
                chatMessageResponse.ErrorMessage = "An error occurred when saving the message";
            }
            return(chatMessageResponse);
        }
Example #2
0
        public async Task CreateMessage(CreateChatMessageDTO chatMessageDTO)
        {
            string userEmail = Context.UserIdentifier;
            User   user      = await _userManager.FindByEmailAsync(userEmail);

            CreateChatMessage chatMessage = new CreateChatMessage
            {
                User          = user,
                Message       = chatMessageDTO.Message,
                ChatGroupUuid = chatMessageDTO.ChatGroupUuid
            };

            ChatMessageResponse chatMessageResponse = await _chatMessageService.CreateChatMessageAsync(chatMessage);

            await SendMessage(chatMessageResponse);
        }
Example #3
0
        public async Task <ActionResult <ChatMessageResponse> > CreateChatMessage([FromBody] CreateChatMessageDTO chatMessageDTO)
        {
            string userEmail = User.FindFirstValue(ClaimTypes.Email);
            User   user      = await _userManager.FindByEmailAsync(userEmail);

            if (user == null)
            {
                return(NotFound(new ChatMessageResponse {
                    Success = false, ErrorMessage = "User does not exist"
                }));
            }

            ChatGroupUser chatGroupUser = await _chatGroupUserService.GetByUserAndChatGroupAsync(
                user.Id, chatMessageDTO.ChatGroupUuid);

            // Check if user is authorized to create chat messages for the chat group
            AuthorizationResult isAuthorized = await _authorizationService.AuthorizeAsync(
                User,
                chatGroupUser,
                Operations.Create);

            if (!isAuthorized.Succeeded)
            {
                return(Forbid());
            }

            CreateChatMessage chatMessage = new CreateChatMessage
            {
                User          = user,
                Message       = chatMessageDTO.Message,
                ChatGroupUuid = chatMessageDTO.ChatGroupUuid
            };
            ChatMessageResponse createRes = await _chatMessageService.CreateChatMessageAsync(chatMessage);

            // Broadcast message to only clients who are members of the chat group
            await _chatHubContext.Clients.Group(chatMessageDTO.ChatGroupUuid.ToString()).SendAsync("ReceiveMessage", createRes);

            return(createRes);
        }