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); }
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); }
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); }