Esempio n. 1
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()
                      ));
        }