public async Task <PaginatedList <ConversationMessageDto> > Handle(ConversationMessagesQuery query,
                                                                               CancellationToken cancellationToken)
            {
                var key = query.Identify();

                try
                {
                    _logger.LogInformation("[WLODZIMIERZ.API / Users] Reading from the cache: {Name} {@Query}",
                                           nameof(ConversationMessagesQuery), query);

                    return(await ReadFromCache(key));
                }
                catch (NotFoundException)
                {
                    _logger.LogWarning("[WLODZIMIERZ.API / Users] No entry found for the passed key in the cache");

                    _logger.LogInformation("[WLODZIMIERZ.API / Users] Reading from the database: {Name} {@Query}",
                                           nameof(ConversationMessagesQuery), query);

                    return(await ReadFromDatabase(query, key));
                }
            }
            // Helpers.

            private async Task <PaginatedList <ConversationMessageDto> > ReadFromDatabase(ConversationMessagesQuery query,
                                                                                          object key)
            {
                return(await _context.ConversationMessages
                       .Where(e => e.OwnerUserId == query.OwnerUserId)
                       .ProjectTo <ConversationMessageDto>(_mapper.ConfigurationProvider)
                       .ProjectToPaginatedListAsync(query.PageNumber, query.PageSize)
                       .Cache(_cache, key));
            }