示例#1
0
        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}"));
            }
        }
示例#2
0
        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}"));
            }
        }
示例#3
0
        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);
        }
示例#4
0
        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));
        }
示例#5
0
        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()
                      ));
        }
示例#6
0
        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);
        }