private async Task UpdateSubscriptionVacancies(SourceSubscription subscription) { _logger.LogInformation("Processing subscription with id {SubscriptionId}", subscription.Id); var sourceType = subscription.SourceType; var subscriptionParameters = GetSubscriptionParameters(subscription.Parameters); var snippets = _headHunterBroker.GetSnippets(subscriptionParameters); // for each subscription load vacancies var count = 0; await foreach (var snippet in snippets) { _logger.Log(LogLevel.Information, "Processing vacancy #{VacancyOderNumber}", count); var existedVacancy = await _storageBroker.SelectVacancyBySourceIdAsync(sourceType.Id, snippet.Id); if (existedVacancy == null) { _logger.Log(LogLevel.Information, "Adding vacancy #{VacancyOderNumber}", count); var headHunterVacancy = await _headHunterBroker.GetVacancy(snippet.Id); var vacancy = await CreateVacancyAsync(sourceType, snippet, headHunterVacancy); vacancy = await _storageBroker.InsertVacancyAsync(vacancy); var vacancySkills = await CreateVacancySkillsAsync(vacancy, headHunterVacancy.KeySkills); await SaveVacancySkillsAsync(vacancySkills); await SaveSubscriptionVacancy(vacancy, subscription); } else { if (existedVacancy.SourceUpdatedDate < snippet.UpdateDate || existedVacancy.IsArchived != snippet.Archived) { _logger.Log(LogLevel.Information, "Updating vacancy #{VacancyOderNumber}", count); var headHunterVacancy = await _headHunterBroker.GetVacancy(snippet.Id); var updatedVacancy = await CreateVacancyAsync(sourceType, snippet, headHunterVacancy); updatedVacancy.Id = existedVacancy.Id; if (!existedVacancy.HasContentChanges(updatedVacancy)) { updatedVacancy.ContentUpdatedDate = existedVacancy.ContentUpdatedDate; } await _storageBroker.UpdateVacancyAsync(updatedVacancy); } var subscriptionVacancy = await _storageBroker.SelectSubscriptionVacancyByVacancyAndSubscriptionIdAsync(subscription.Id, existedVacancy.Id); if (subscriptionVacancy == null) { await SaveSubscriptionVacancy(existedVacancy, subscription); } } count++; } _logger.LogInformation("Subscription with id {SubscriptionId} was updated", subscription.Id); }