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)); }
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)); }