Пример #1
0
        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));
 }
Пример #3
0
        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());
        }
Пример #4
0
        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);
            }));
        }
Пример #6
0
        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);
        }
Пример #7
0
 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));
 }