Пример #1
0
        private static void ProcessFlatForRentAnnouncementPreference(FlatForRentAnnouncementPreference flatForRentAnnouncementPreference,
                                                                     FlatForRentAnnouncementsIntegrationEvent integrationEvent, HashSet <Guid> processedAnnouncementPreferenceIds)
        {
            lock (processedAnnouncementPreferenceIds)
            {
                if (!processedAnnouncementPreferenceIds.Add(flatForRentAnnouncementPreference.Id))
                {
                    return;
                }
            }

            foreach (var flatForRentAnnouncement in integrationEvent.FlatForRentAnnouncements)
            {
                var numberOfRooms = flatForRentAnnouncement.NumberOfRooms.ConvertToInt();

                if (flatForRentAnnouncementPreference.RoomNumbersMin.HasValue && numberOfRooms.HasValue)
                {
                    if (NumberOfRoomsMinMatches(numberOfRooms.Value, flatForRentAnnouncementPreference.RoomNumbersMin.Value))
                    {
                        ProcessFlatForRentAnnouncementPreferenceForNumberOfRoomsMax(flatForRentAnnouncement, flatForRentAnnouncementPreference, numberOfRooms);
                    }
                }
                else
                {
                    ProcessFlatForRentAnnouncementPreferenceForNumberOfRoomsMax(flatForRentAnnouncement, flatForRentAnnouncementPreference, numberOfRooms);
                }
            }
        }
Пример #2
0
        public async Task MatchAnnouncementsToPreferencesAsync(FlatForRentAnnouncementsIntegrationEvent integrationEvent)
        {
            var flatForRentAnnouncementPreferences =
                await _cosmosStore.Query().Where(x => x.CityId == integrationEvent.CityId && x.ServiceActive).ToListAsync();

            var processedAnnouncementPreferenceIds = new HashSet <Guid>();

            Parallel.ForEach(
                flatForRentAnnouncementPreferences,
                _parallelOptions,
                flatForRentAnnouncementPreference => ProcessFlatForRentAnnouncementPreference(flatForRentAnnouncementPreference, integrationEvent, processedAnnouncementPreferenceIds));

            var documents = flatForRentAnnouncementPreferences.Select(JsonConvert.SerializeObject);
            await _bulkExecutor.BulkImportAsync(documents, true, true, _maxDegreeOfParallelism);
        }