public async Task <PaginatedList <UserDto> > Handle(FilterQuery query, CancellationToken cancellationToken) { var model = new UserDto { UserId = query.UserId ?? string.Empty, UserName = query.UserName, Email = query.Email ?? string.Empty, FirstName = query.FirstName ?? string.Empty, LastName = query.LastName ?? string.Empty }; var key = query.Identify(); try { _logger.LogInformation("[WLODZIMIERZ.API / Users] Reading from the cache: {Name} {@Query}", nameof(FilterQuery), 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(FilterQuery), query); return(await ReadFromDatabase(query, model, key)); } }
// Helpers. private async Task <PaginatedList <UserDto> > ReadFromDatabase(FilterQuery query, UserDto model, object key) { return(await _identityService.GetAll() .ProjectTo <UserDto>(_mapper.ConfigurationProvider) .Where(await model.FilterAsync()) .ProjectToPaginatedListAsync(query.PageNumber, query.PageSize) .Cache(_cache, key)); }