public async Task <MessageResponse> CreateMessageAsync(SaveMessageDTO messageDTO) { try { string sourceAddr = messageDTO.SourceAddr; string destAddr = messageDTO.DestinationAddr; Device sourceDevice = await _deviceRepository.GetByAddrAsync(sourceAddr); Device destDevice = await _deviceRepository.GetByAddrAsync(destAddr); if (sourceDevice == null || destDevice == null) { string messageStr; if (sourceDevice == null) { messageStr = DeviceNotFoundMessage(sourceAddr); } else { messageStr = DeviceNotFoundMessage(destAddr); } return(new MessageResponse(messageStr)); } Message message = new Message() { Content = messageDTO.Content, SourceAddr = sourceDevice, SourceAddrDeviceId = sourceDevice.DeviceId, DestinationAddr = destDevice, DestinationAddrDeviceId = destDevice.DeviceId }; //Save the message await _messageRepository.CreateMessageAsync(message); await _unitOfWork.CompleteAsync(); _inMemoryMessageService.AddMessage(destAddr, message); FromMessageDTO messageResource = _mapper.Map <Message, FromMessageDTO>(message); return(new MessageResponse(messageResource)); } catch (Exception ex) { // Do some logging stuff return(new MessageResponse($"An error occurred when saving the message: {ex.Message}")); } }
public async Task <MessageResponse> UpdateMessageAsync(long id, SaveMessageDTO messageDTO) { Message foundMessage = await _messageRepository.GetByIdAsync(id); if (foundMessage == null) { return(new MessageResponse($"Message with id: {id} does not exist")); } string sourceAddr = messageDTO.SourceAddr; string destAddr = messageDTO.DestinationAddr; Device sourceDevice = await _deviceRepository.GetByAddrAsync(sourceAddr); Device destDevice = await _deviceRepository.GetByAddrAsync(destAddr); if (sourceDevice == null || destDevice == null) { string messageStr; if (sourceDevice == null) { messageStr = DeviceNotFoundMessage(sourceAddr); } else { messageStr = DeviceNotFoundMessage(destAddr); } return(new MessageResponse(messageStr)); } try { //Update all the fields foundMessage.Content = messageDTO.Content; foundMessage.SourceAddr = sourceDevice; foundMessage.SourceAddrDeviceId = sourceDevice.DeviceId; foundMessage.DestinationAddr = destDevice; foundMessage.DestinationAddrDeviceId = destDevice.DeviceId; _messageRepository.UpdateMessageAsync(foundMessage); await _unitOfWork.CompleteAsync(); FromMessageDTO messageResource = _mapper.Map <Message, FromMessageDTO>(foundMessage); return(new MessageResponse(messageResource)); } catch (Exception ex) { return(new MessageResponse($"An error occurred when saving the message: {ex.Message}")); } }
public async Task <ActionResult <FromMessageDTO> > UpdateMessage(long id, SaveMessageDTO saveMessage) { if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrorMessages())); } MessageResponse result = await _messageService.UpdateMessageAsync(id, saveMessage); if (!result.Success) { return(BadRequest(result.Message)); } return(result.MessageDTO); }
public async Task <ActionResult <FromMessageDTO> > CreateMessage([FromBody] SaveMessageDTO saveMessageDTO) { if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrorMessages())); } MessageResponse result = await _messageService.CreateMessageAsync(saveMessageDTO); if (!result.Success) { return(BadRequest(result.Message)); } return(CreatedAtAction("test", result.MessageDTO)); }
public async Task <IActionResult> SaveMessage(SaveMessageDTO message) { var userFromRepo = await _userRepository.GetUserById(message.UserId); var conversation = await _chatRepository.GetConversation(message.ConversationId); if (conversation != null) { await _chatRepository.SaveMessage(conversation, message, userFromRepo); } else { conversation = await _chatRepository.CreateConversation(message.UserId, message.ReceiverId); await _chatRepository.SaveMessage(conversation, message, userFromRepo); } var messagesToSent = conversation.Messages.Select(p => { var msg = _mapper.Map <MessageDTO>(p); msg.Type = p.Sender.Id == message.UserId ? "sent" : "received"; return(msg); }); await NotifyPlayers($"CONV_{conversation.Id}", new { Id = conversation.Id, Messages = messagesToSent }); var users = (_userRepository.GetUsers()).Where(p => p.Id != message.UserId); return(Ok(users.Select(user => new UserForConversationDTO() { Id = user.Id, FirstName = user.FirstName, LastName = user.LastName, UserName = user.UserName, UserRole = user.UserRole, AvatarUrl = user.AvatarUrl ?? @"https://housecommunitystorage.blob.core.windows.net/avatarcontainer/user_avatar.png", IsBuildingSame = user.UserFlats.Any(p => { return userFromRepo.UserFlats.Select(p => p.Flat.BuildingId).Any(b => b == p.Flat?.BuildingId); }) }).ToList() )); }
public async Task <Message> SaveMessage(Conversation conversation, SaveMessageDTO message, User user) { if (conversation.Messages == null) { conversation.Messages = new List <Message>(); } var newMessage = new Message() { Date = DateTime.Now, Content = message.Message, Sender = user }; conversation.Messages.Add(newMessage); conversation.ModificationDate = DateTime.Now; await _dataContext.SaveChangesAsync(); return(newMessage); }