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)
            )
 {
 }
Ejemplo n.º 3
0
        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));
        }