Exemple #1
0
        /// <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);
                }
            }
        }
Exemple #2
0
        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);
        }