Esempio n. 1
0
        public async Task <IActionResult> GetDebtById(ChatMessagesGetDTO model)
        {
            try
            {
                var data = await _chatService.GetAllChatMessagesAsync(model);

                return(Ok(data));
            }
            catch (UnauthorizedAccessException)
            {
                return(Unauthorized());
            }
            catch (Exception e)
            {
                return(BadRequest(new { e.Message }));
            }
        }
Esempio n. 2
0
        public async Task <IList <ChatMessageReturnDTO> > GetAllChatMessagesAsync(ChatMessagesGetDTO model)
        {
            var idClaim = _httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;

            if (!long.TryParse(idClaim, out var ownerId))
            {
                throw new UnauthorizedAccessException();
            }

            if (!string.IsNullOrWhiteSpace(model.ChatWithUsername))
            {
                var chatWithUser =
                    await _userRepository.GetFirstAsync(user => user.Username == model.ChatWithUsername);

                if (chatWithUser == null)
                {
                    throw new ArgumentException("User with such username does not exists");
                }


                var chatMessages = (await _chatMessageRepository.GetAllAsync(message =>
                                                                             message.Author.Id == ownerId && message.SentTo.Id == chatWithUser.Id ||
                                                                             message.Author.Id == chatWithUser.Id && message.SentTo.Id == ownerId,
                                                                             message => message.Author, message => message.SentTo))
                                   .OrderByDescending(message => message.Created)
                                   .Skip(model.SkipMessages)
                                   .Take(model.TakeMessages)
                                   .OrderBy(message => message.Created);

                return(await chatMessages.Select(message => message.ToChatReturnDTO(ownerId)).ToListAsync());
            }

            return(await(await _chatMessageRepository.GetAllAsync(message => message.SentTo == null,
                                                                  message => message.Author))
                   .OrderByDescending(message => message.Created)
                   .Skip(model.SkipMessages)
                   .Take(model.TakeMessages)
                   .OrderBy(message => message.Created)
                   .Select(message => message.ToChatReturnDTO(ownerId))
                   .ToListAsync());
        }