Пример #1
0
        private IQueryable <SubscriptionVacancy> AddFiltersOnQuery(GetAllSubscriptionVacanciesFilter filter,
                                                                   IQueryable <SubscriptionVacancy> queryable)
        {
            if (filter == null)
            {
                return(queryable);
            }

            if (!string.IsNullOrEmpty(filter.SearchText))
            {
                queryable = queryable.Where(sv =>
                                            EF.Functions.Like(sv.Vacancy.Descriptions.ToLower(), '%' + filter.SearchText.ToLower() + "%"));
            }

            if (filter.AreaIds != null && filter.AreaIds.Length > 0)
            {
                var predicate = PredicateBuilder.New <SubscriptionVacancy>();
                foreach (var areaId in filter.AreaIds)
                {
                    predicate = predicate.Or(p => p.Vacancy.AreaId == areaId);
                }

                queryable = queryable.Where(predicate);
            }

            if (filter.EmploymentIds != null && filter.EmploymentIds.Length > 0)
            {
                var predicate = PredicateBuilder.New <SubscriptionVacancy>();
                foreach (var employmentId in filter.EmploymentIds)
                {
                    predicate = predicate.Or(p => p.Vacancy.EmploymentId == employmentId);
                }

                queryable = queryable.Where(predicate);
            }

            if (filter.EmployerIds != null && filter.EmployerIds.Length > 0)
            {
                var predicate = PredicateBuilder.New <SubscriptionVacancy>();
                foreach (var employerId in filter.EmployerIds)
                {
                    predicate = predicate.Or(p => p.Vacancy.EmployerId == employerId);
                }

                queryable = queryable.Where(predicate);
            }

            if (filter.ScheduleIds != null && filter.ScheduleIds.Length > 0)
            {
                var predicate = PredicateBuilder.New <SubscriptionVacancy>();
                foreach (var scheduleId in filter.ScheduleIds)
                {
                    predicate = predicate.Or(p => p.Vacancy.ScheduleId == scheduleId);
                }

                queryable = queryable.Where(predicate);
            }

            if (filter.Ratings != null && filter.Ratings.Length > 0)
            {
                var predicate = PredicateBuilder.New <SubscriptionVacancy>();
                foreach (var rating in filter.Ratings)
                {
                    predicate = predicate.Or(p => p.Rating == rating);
                }

                queryable = queryable.Where(predicate);
            }

            if (filter.SkillIds != null && filter.SkillIds.Length > 0)
            {
                var predicate = PredicateBuilder.New <SubscriptionVacancy>();
                foreach (var skillId in filter.SkillIds)
                {
                    predicate = predicate.Or(p => p.Vacancy.VacancySkills.Any(s => s.SkillId == skillId));
                }

                queryable = queryable.Where(predicate);
            }

            if (filter.IsHidden != null)
            {
                queryable = queryable.Where(sv => sv.IsHidden == filter.IsHidden);
            }

            if (filter.IsArchived != null)
            {
                queryable = queryable.Where(sv => sv.Vacancy.IsArchived == filter.IsArchived);
            }

            return(queryable);
        }
Пример #2
0
        public Task <PagedItems <SubscriptionVacancy> > GetSubscriptionVacanciesAsync(int subscriptionId,
                                                                                      GetAllSubscriptionVacanciesFilter filter = null,
                                                                                      PaginationFilter paginationFilter        = null, SortByOptions sortByOptions = null)
        {
            return(TryCatch(async() =>
            {
                var subscription = await _storageBroker.SelectSourceSubscriptionByIdAsync(subscriptionId);
                ValidateSubscription(subscription, subscriptionId);
                var queryable = _storageBroker.SelectAllSubscriptionVacancies();

                queryable = ApplySorting(sortByOptions, queryable).IncludeAllProperties()
                            .Where(sv => sv.SourceSubscriptionId == subscriptionId);
                queryable = AddFiltersOnQuery(filter, queryable);

                if (paginationFilter == null)
                {
                    return await queryable.ToPagedItemsAsync();
                }

                return await queryable.ToPagedItemsAsync(paginationFilter.PageNumber, paginationFilter.PageSize);
            }));
        }
Пример #3
0
        public Task <PagedItems <SubscriptionVacancy> > GetSubscriptionVacanciesGroupByCompanyAsync(int subscriptionId,
                                                                                                    GetAllSubscriptionVacanciesFilter filter = null,
                                                                                                    PaginationFilter paginationFilter        = null)
        {
            return(TryCatch(async() =>
            {
                var subscription = await _storageBroker.SelectSourceSubscriptionByIdAsync(subscriptionId);
                ValidateSubscription(subscription, subscriptionId);
                var queryable = _storageBroker.SelectAllSubscriptionVacancies()
                                .Where(sv => sv.SourceSubscriptionId == subscriptionId);
                queryable = AddFiltersOnQuery(filter, queryable);
                var employers = queryable.Select(sv => sv.Vacancy.Employer)
                                .Distinct()
                                .OrderBy(employer => employer.Name)
                                .Select(employer => employer.Id);
                var pagedEmployers = await employers.ToPagedItemsAsync(paginationFilter);
                var vacancies = _storageBroker.SelectAllSubscriptionVacancies()
                                .IncludeAllProperties()
                                .Where(sv => sv.SourceSubscriptionId == subscriptionId)
                                .Where(sv => pagedEmployers.Data.Contains(sv.Vacancy.Employer.Id));
                vacancies = AddFiltersOnQuery(filter, vacancies);

                var vacanciesList = await vacancies.ToListAsync();
                return new PagedItems <SubscriptionVacancy>(vacanciesList, pagedEmployers.TotalCount,
                                                            pagedEmployers.PageNumber, pagedEmployers.PageSize);
            }));
        }