public async Task <ActionResult> Get([FromQuery] MessagesListFilters filters)
        {
            _logger.LogInformation($"Retriving last {filters.Amount} messages for room {filters.RoomId.ToString()}");

            List <MessageDto> messages = new List <MessageDto>();

            try
            {
                messages = await _roomService.GetMessagesForRoom(filters);
            }
            catch (Exception e)
            {
                _logger.LogInformation($"Error was thrown during retriving messeges. Exception message {e.Message}. Inner error message {e.InnerException?.Message}");
                throw e;
            }

            return(Ok(messages));
        }
예제 #2
0
        public Task <List <MessageDto> > GetMessagesForRoom(MessagesListFilters filters)
        {
            var messages = _context.Messages.Where(c => c.RoomId == filters.RoomId)
                           .Include(c => c.User)
                           .OrderByDescending(c => c.CreatedAt)
                           .Take(filters.Amount)
                           .Select(c => new MessageDto
            {
                UserId     = c.User.ExternalId,
                Login      = c.User.Login,
                ChatRoomId = c.RoomId,
                Content    = c.Content,
                CreatedAt  = c.CreatedAt
            })
                           .OrderBy(c => c.CreatedAt)
                           .ToListAsync();

            return(messages);
        }