public async Task <ActionResult> GetMessages(string withId, [FromQuery] PagingParameters parameters)
        {
            User user = await AuthenticateUser();

            int toId = await Get <GetAdminOrUserIdQuery>().Execute(withId);

            GetMessagesDto request = new GetMessagesDto()
            {
                From       = user.Id,
                To         = toId,
                Parameters = parameters
            };

            PagedResponse <MessageDto> messages = await Get <GetMessagesQuery>().Execute(request);

            return(Json(messages));
        }
        protected async override Task <PagedResponse <MessageDto> > DoExecute(GetMessagesDto request)
        {
            if (request.Parameters.Page < 1)
            {
                request.Parameters.Page = 1;
            }

            var queriedMessages = _dbContext.Messages.Where(m =>
                                                            m.FromId == request.From && m.ToId == request.To ||
                                                            m.ToId == request.From && m.FromId == request.To);

            var messagesTask = queriedMessages.OrderByDescending(m => m.Timestamp)
                               .Skip((request.Parameters.Page - 1) * request.Parameters.PageSize)
                               .Take(request.Parameters.PageSize)
                               .ToListAsync();
            var countTask = queriedMessages.CountAsync();

            await Task.WhenAll(messagesTask, countTask);

            List <Message> messages = messagesTask.Result;
            int            count    = countTask.Result;

            // Set received messages as read
            await _setQueriedMessagesAsReadCommand.Execute(messages.Where(m => request.From == m.ToId && !m.IsRead));

            PagedResponse <MessageDto> response = new PagedResponse <MessageDto>()
            {
                Page       = request.Parameters.Page,
                TotalCount = count,
                Data       = messages.Select(m => new MessageDto()
                {
                    IsMine    = m.FromId == request.From,
                    Message   = m.Text,
                    Timestamp = m.Timestamp
                })
            };

            return(response);
        }