public async Task <PagedItemResultDto <GetGroupChatMessageDto> > GetMessagesAsync(GetPagedMessagesQueryDto queryDto, CancellationToken ct = default)
        {
            _logger.LogInformation("Get group chat messages {ChatId}", queryDto.ChatId);

            GetPagedMessagesQuery query = _mapper.Map <GetPagedMessagesQuery>(queryDto);

            PagedItemResultModel <GroupChatMessage> result =
                await _unitOfWork.GroupChatMessageRepository.GetMessagesAsync(query, ct);

            return(_mapper.Map <PagedItemResultDto <GetGroupChatMessageDto> >(result));
        }
        public async Task <PagedItemResultDto <GetPrivateChatMessageDto> > GetMessagesAsync(GetPagedMessagesQueryDto queryDto, CancellationToken ct = default)
        {
            _logger.LogInformation("Get private chat messages {ChatId}", queryDto.ChatId);

            GetPagedMessagesQuery query = _mapper.Map <GetPagedMessagesQuery>(queryDto);

            PagedItemResultModel <PrivateChatMessage> result =
                await _unitOfWork.PrivateChatMessageRepository.GetMessagesAsync(query, ct);

            IImmutableList <GetPrivateChatMessageDto> list =
                _mapper.Map <ICollection <GetPrivateChatMessageDto> >(result.Items).ToImmutableList();

            return(new PagedItemResultDto <GetPrivateChatMessageDto>(list, result.TotalCount));
        }
        public async Task <PagedItemResultModel <PrivateChatMessage> > GetMessagesAsync(GetPagedMessagesQuery query, CancellationToken ct)
        {
            IQueryable <PrivateChatMessage> messagesQuery = DbContext.PrivateChatMessages
                                                            .Include(t => t.CreatedByUser)
                                                            .Where(t => t.ChatId == query.ChatId);

            PagedItemResultModel <PrivateChatMessage> result = new PagedItemResultModel <PrivateChatMessage>
            {
                TotalCount = messagesQuery.Count(),
                Items      = await messagesQuery.Skip(query.Skip).Take(query.Take).ToListAsync(ct)
            };

            return(result);
        }