/// <inheritdoc/> public async Task UpdateVacancies() { VacancySearchResult vacanciesResult = await _headHunterClient.GetVacancies(); IEnumerable <Vacancy> vacancies = await _vacanciesRepository.GetVacancies(); foreach (Item vacancyResult in vacanciesResult.Items) { if (!vacancies.Any(v => v.ExternalId == vacancyResult.Id.ToString() && v.SavingDate == DateTime.Today)) { var vacancy = new Vacancy(); vacancy.ExternalId = vacancyResult.Id.ToString(); vacancy.SavingDate = DateTime.Today; vacancy.Title = vacancyResult.Name; vacancy.Company = await _vacanciesRepository.GetCompany(vacancyResult.Employer.Id.ToString()); vacancy.Company.Name = vacancyResult.Employer.Name; if (vacancyResult.Salary != null) { vacancy.Salary.From = vacancyResult.Salary.From; vacancy.Salary.To = vacancyResult.Salary.To; vacancy.Salary.Currency = GetCurrency(vacancyResult.Salary.Currency); } vacancy.PublicationDate = DateTime.Parse(vacancyResult.PublishedAt); await _vacanciesRepository.SaveVacancy(vacancy); } } }
public async Task <VacancySearchResult> GetByRoute(string routeId, string postcode, int distance) { var coordinates = await _geocodeService.GetFromPostCode(postcode); if (coordinates.ResponseCode == "OK") { var searchResults = new VacancySearchResult { searchLocation = new Location { Latitude = coordinates.Coordinates.Lat, Longitude = coordinates.Coordinates.Lon }, Country = _countryMapper.MapToCountry(coordinates.Country), Results = new List <VacancySearchResultItem>() }; if (searchResults.Country == Domain.Enums.Country.England) { var pageNumber = 1; var vacancyApiList = await GetVacancyListByRoute(routeId, distance, coordinates, pageNumber); while (vacancyApiList.Count == _apiMaxPageSize && vacancyApiList.Max(s => s.DistanceInMiles < distance)) { pageNumber++; var list = await GetVacancyListByRoute(routeId, distance, coordinates, pageNumber); vacancyApiList.AddRange(list); if (list.Count < _apiMaxPageSize) { break; } } searchResults.Results = vacancyApiList.Where(w => w.TrainingType == TrainingType.Standard) .Select(_vacanciesMapper.Map) .ToList(); Parallel.ForEach(searchResults.Results, vacancy => { vacancy.StaticMapUrl = _mappingService.GetStaticMapsUrl(vacancy.Location); }); } return(searchResults); } return(null); }