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