public PagedResponse <RatingResponse> CreateProductRatingsPaginatedResponse( int productId, PaginationFilter pagination, GetAllRatingsFilter filter, SortingFilter sorting, List <RatingResponse> response) { var nextPage = pagination.PageNumber >= 1 ? uriService.GetProductRatingUri(productId, new PaginationQuery(pagination.PageNumber + 1, pagination.PageSize), filter, sorting) .ToString() : null; var previousPage = pagination.PageNumber - 1 >= 1 ? uriService.GetProductRatingUri(productId, new PaginationQuery(pagination.PageNumber - 1, pagination.PageSize), filter, sorting) .ToString() : null; return(CreatePaginatedResponse(pagination, sorting, response, nextPage, previousPage)); }
private string GenerateKey( GetAllRatingsFilter filter, PaginationFilter pagination, SortingFilter sortingFilter) { return(MyModelCacheKey.GeneratePaginationQuery(pagination) .GenerateRatingFilterQuery(filter) .GenerateSortingQuery(sortingFilter)); }
public Task <List <Rating> > GetAllAsync( GetAllRatingsFilter filter, PaginationFilter pagination, SortingFilter sortingFilter) { IQueryable <Rating> queryable = Context.Ratings; queryable = FilterProducts(queryable, filter); queryable = ApplySort(queryable, sortingFilter); return(queryable.ApplyPagination(pagination).ToListAsync()); }
public Uri GetProductRatingUri( int productId, PaginationQuery pagination, GetAllRatingsFilter filter, SortingFilter sorting) { var uri = new Uri(baseUri + ApiRoutes.ProductRatings.GetAll.Replace("{productId}", productId.ToString())); var modifiedUri = uri.AbsoluteUri.GeneratePaginationQuery(pagination) .GenerateRatingFilterQuery(filter) .GenerateSortingQuery(sorting); return(new Uri(modifiedUri)); }
public Task <List <Rating> > GetAllAsync( GetAllRatingsFilter filter, PaginationFilter pagination, SortingFilter sortingFilter) { var key = GenerateKey(filter, pagination, sortingFilter); return(cache.GetOrCreate(key, entry => { entry.SetOptions(cacheOptions); return ratingRepository.GetAllAsync(filter, pagination, sortingFilter); })); }
private IQueryable <Rating> FilterProducts(IQueryable <Rating> queryable, GetAllRatingsFilter filter) { if (!string.IsNullOrWhiteSpace(filter.Comment)) { queryable = queryable.Where(x => x.Comment.ToLower().Contains(filter.Comment.ToLower())); } if (filter.RatingFrom.HasValue) { queryable = queryable.Where(x => x.Value >= filter.RatingFrom.Value); } if (filter.RatingTo.HasValue) { queryable = queryable.Where(x => x.Value <= filter.RatingTo.Value); } return(queryable); }
public static string GenerateRatingFilterQuery(this string uri, GetAllRatingsFilter filter) { return(uri.AddQuery(nameof(filter.Comment), filter.Comment) .AddQuery(nameof(filter.RatingFrom), filter.RatingFrom) .AddQuery(nameof(filter.RatingTo), filter.RatingTo)); }