public JobsWithCategoryStateLocationsProductsSpecification(JobSpecParams specParams) : base(j => (string.IsNullOrWhiteSpace(specParams.Search) || j.Name.ToLower().Contains(specParams.Search)) && (!specParams.JobCategoryId.HasValue || j.JobCategoryId == specParams.JobCategoryId) && (!specParams.JobStateId.HasValue || j.JobStateId == specParams.JobStateId) && (!specParams.LocationId.HasValue || j.LocationId == specParams.LocationId) && (!specParams.ProductId.HasValue || j.ProductId == specParams.ProductId) ) { AddInclude(j => j.JobCategory); AddInclude(j => j.JobState); AddInclude(j => j.Location); AddInclude(j => j.Product); AddOrderBy(j => j.Name); ApplyPaging(specParams.Skip, specParams.Take); if (!string.IsNullOrEmpty(specParams.Sort)) { switch (specParams.Sort) { case "nameAsc": AddOrderBy(j => j.Name); break; case "nameDesc": AddOrderByDescending(j => j.Name); break; default: AddOrderBy(j => j.Name); break; } } }
public JobWithFiltersForCountSpecification(JobSpecParams specParams) : base(j => (string.IsNullOrWhiteSpace(specParams.Search) || j.Name.ToLower().Contains(specParams.Search)) && (!specParams.JobCategoryId.HasValue || j.JobCategoryId == specParams.JobCategoryId) && (!specParams.JobStateId.HasValue || j.JobStateId == specParams.JobStateId) && (!specParams.LocationId.HasValue || j.LocationId == specParams.LocationId) && (!specParams.ProductId.HasValue || j.ProductId == specParams.ProductId) ) { }
public async Task <ActionResult <Pagination <JobToReturnDto> > > GetJobs( [FromQuery] JobSpecParams jobParams) { var countSpec = new JobWithFiltersForCountSpecification(jobParams); var totalItems = await _jobsRepo.Count(countSpec); var spec = new JobsWithCategoryStateLocationsProductsSpecification(jobParams); var jobs = await _jobsRepo.ListAsync(spec); var dtos = _mapper.Map <IReadOnlyList <Job>, IReadOnlyList <JobToReturnDto> >(jobs); var pagination = new Pagination <JobToReturnDto>( jobParams.PageNumber, jobParams.PageSize, totalItems, dtos); return(Ok(pagination)); }