public HolidaysWithSpecifications(HolidayParams holidayParams, bool isForCount) { if (!isForCount) { AddInclude(x => x.TravelAgency); AddInclude(x => x.MealPlan); AddInclude(x => x.Country); AddInclude(x => x.Photos); ApplyPaging(holidayParams.PageSize * (holidayParams.PageIndex - 1), holidayParams.PageSize); } //filtered by names of Countries/Agencies/Meals string[] countriesNames = null; string[] agenciesNames = null; string[] mealsNames = null; if (holidayParams.Countries != null) { countriesNames = holidayParams.Countries.Split(','); } if (holidayParams.Agencies != null) { agenciesNames = holidayParams.Agencies.Split(','); } if (holidayParams.Meals != null) { mealsNames = holidayParams.Meals.Split(','); } AddFilters(x => (countriesNames == null || countriesNames.Contains(x.Country.Name)) && (agenciesNames == null || agenciesNames.Contains(x.TravelAgency.Name)) && (mealsNames == null || mealsNames.Contains(x.MealPlan.Name))); // Min and Max Values filter if (holidayParams.MinPrice != null) { AddFilters(x => x.Price >= holidayParams.MinPrice); } if (holidayParams.MaxPrice != null) { AddFilters(x => x.Price <= holidayParams.MaxPrice); } if (holidayParams.MinDuration != null) { AddFilters(x => x.DurationOfStay >= holidayParams.MinDuration); } if (holidayParams.MaxDuration != null) { AddFilters(x => x.DurationOfStay <= holidayParams.MaxDuration); } if (holidayParams.MinStars != null) { AddFilters(x => x.Stars >= holidayParams.MinStars); } // Sort Type AddOrderBy(x => x.HotelName); if (!isForCount) { if (!string.IsNullOrEmpty(holidayParams.Sort)) { switch (holidayParams.Sort) { case "priceAsc": AddOrderBy(x => x.Price); break; case "priceDesc": AddOrderByDescending(x => x.Price); break; case "durationAsc": AddOrderBy(x => x.DurationOfStay); break; case "durationDesc": AddOrderByDescending(x => x.DurationOfStay); break; case "byIdAsc": AddOrderBy(x => x.Id); break; case "byIdDesc": AddOrderByDescending(x => x.Id); break; default: AddOrderBy(x => x.HotelName); break; } } } }
public async Task <ActionResult <IReadOnlyList <HolidayToReturnDto> > > GetAllOffers([FromQuery] HolidayParams holidayParams) { var spec = new HolidaysWithSpecifications(holidayParams, false); var countSpec = new HolidaysWithSpecifications(holidayParams, true); var filteredOffers = await _unitOfWork.Holiday.ListWithSpecAsync(spec); var filteredOffersCount = await _unitOfWork.Holiday.CountAsync(countSpec); var offersToReturn = _mapper.Map <IReadOnlyList <Holiday>, IReadOnlyList <HolidayToReturnDto> >(filteredOffers); return(Ok(new Pagination <HolidayToReturnDto>(holidayParams.PageIndex, holidayParams.PageSize, filteredOffersCount, offersToReturn))); }