public async Task <IActionResult> GetTechJobOpenings([FromQuery] TechJobOpeningsResourceParameters techJobOpeningsResourceParameters, [FromHeader(Name = "Accept")] string mediaType)
        {
            if (!MediaTypeHeaderValue.TryParse(mediaType, out MediaTypeHeaderValue parsedMediaType))
            {
                _logger.LogInformation($"Media type header value [{mediaType}] not parsable");
                return(BadRequest());
            }

            if (!_propertyCheckerService.TypeHasProperties <TechJobOpeningDto>(techJobOpeningsResourceParameters.Fields))
            {
                _logger.LogInformation($"Property checker did not find on of the TechJobOpening resource parameters fields");
                return(BadRequest());
            }

            if (!_propertyMappingService.ValidMappingExistsFor <TechJobOpeningDto, TechJobOpening>
                    (techJobOpeningsResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            var techJobOpeningsFromRepo = await _repository.GetTechJobOpeningsAsync(techJobOpeningsResourceParameters);

            return(Ok(techJobOpeningsFromRepo));
        }
Esempio n. 2
0
        public async Task <IPagedList <TechJobOpening> > GetTechJobOpeningsAsync(TechJobOpeningsResourceParameters techJobOpeningsResourceParameters)
        {
            if (techJobOpeningsResourceParameters == null)
            {
                throw new ArgumentNullException(nameof(techJobOpeningsResourceParameters));
            }

            var collection = GetTechJobOpenings();

            var companyCategory = techJobOpeningsResourceParameters.CompanyCategory.ToCompanyCategory();

            if (companyCategory != CompanyCategory.Undefined)
            {
                collection = collection.Where(a => a.Company.Category == companyCategory);
            }

            var jobTechLanguage = techJobOpeningsResourceParameters.JobTechLanguage.ToJobTechLanguage();

            if (jobTechLanguage != JobTechLanguage.Undefined)
            {
                collection = collection.Where(a => a.JobTechLanguage == jobTechLanguage);
            }

            var city = techJobOpeningsResourceParameters.City;

            if (city != null)
            {
                collection = collection.Where(a => a.City == city);
            }

            var postCode = techJobOpeningsResourceParameters.PostCode;

            if (Math.Floor(Math.Log10(postCode) + 1) == 5)
            {
                collection = collection.Where(a => a.PostCode == postCode);
            }

            if (techJobOpeningsResourceParameters.RemoteWorkAccepted == true)
            {
                collection = collection.Where(a => a.RemoteWorkAccepted == true);
            }

            var contractType = techJobOpeningsResourceParameters.ContractType.ToContractType();

            if (contractType != ContractType.Undefined)
            {
                collection = collection.Where(a => a.ContractType == contractType);
            }

            var jobPosition = techJobOpeningsResourceParameters.JobPosition.ToPosition();

            if (jobPosition != Position.Undefined)
            {
                collection = collection.Where(a => a.JobPosition == jobPosition);
            }

            var seniority = techJobOpeningsResourceParameters.Seniority.ToSeniority();

            if (seniority != Seniority.Undefined)
            {
                collection = collection.Where(a => a.Seniority == seniority);
            }

            if (!string.IsNullOrWhiteSpace(techJobOpeningsResourceParameters.SearchQuery))
            {
                var searchQuery = techJobOpeningsResourceParameters.SearchQuery.Trim();
                collection = collection.Where(a => a.Company.Name.ToLower().Contains(searchQuery.ToLower()));
            }

            if (!string.IsNullOrWhiteSpace(techJobOpeningsResourceParameters.OrderBy))
            {
                // get property mapping dictionary
                var techJobOpeningMappingDictionary = _propertyMappingService.GetPropertyMapping <TechJobOpeningDto, TechJobOpening>();

                collection = collection.ApplySort(techJobOpeningsResourceParameters.OrderBy, techJobOpeningMappingDictionary);
            }

            return(await Utils.PagedList <TechJobOpening> .Create(collection, techJobOpeningsResourceParameters.PageNumber, techJobOpeningsResourceParameters.PageSize));
        }