Ejemplo n.º 1
0
        public async Task UpdateAsync(UserFlatForRentAnnouncementPreferenceUpdatedIntegrationEvent integrationEvent)
        {
            var flatForRentAnnouncementPreference = await _cosmosStore.FindAsync(integrationEvent.FlatForRentAnnouncementPreferenceId.ToString());

            var sameCityDistricts = flatForRentAnnouncementPreference.CityDistricts.All(integrationEvent.CityDistricts.Contains) &&
                                    flatForRentAnnouncementPreference.CityDistricts.Count == integrationEvent.CityDistricts.Count;

            if (flatForRentAnnouncementPreference.CityId != integrationEvent.CityId ||
                flatForRentAnnouncementPreference.PriceMin != integrationEvent.PriceMin ||
                flatForRentAnnouncementPreference.PriceMax != integrationEvent.PriceMax ||
                flatForRentAnnouncementPreference.RoomNumbersMin != integrationEvent.RoomNumbersMin ||
                flatForRentAnnouncementPreference.RoomNumbersMax != integrationEvent.RoomNumbersMax ||
                !sameCityDistricts)
            {
                flatForRentAnnouncementPreference.AnnouncementUrlsToSend = new List <string>();
            }

            flatForRentAnnouncementPreference.CityId         = integrationEvent.CityId;
            flatForRentAnnouncementPreference.PriceMin       = integrationEvent.PriceMin;
            flatForRentAnnouncementPreference.PriceMax       = integrationEvent.PriceMax;
            flatForRentAnnouncementPreference.RoomNumbersMin = integrationEvent.RoomNumbersMin;
            flatForRentAnnouncementPreference.RoomNumbersMax = integrationEvent.RoomNumbersMax;
            flatForRentAnnouncementPreference.CityDistricts  = integrationEvent.CityDistricts.ToList();

            var updateResult = await _cosmosStore.UpdateAsync(flatForRentAnnouncementPreference);

            if (!updateResult.IsSuccess)
            {
                throw updateResult.Exception;
            }
        }
Ejemplo n.º 2
0
        public async Task HandleAsync(UpdateFlatForRentAnnouncementPreferenceCommand command, CancellationToken cancellationToken = default)
        {
            var getUserResult = await _userGetterService.GetByIdAsync(command.UserId);

            if (!getUserResult.Success)
            {
                throw new ResourceNotFoundException(getUserResult.Errors);
            }

            var getFlatForRentAnnouncementPreferenceResult =
                _flatForRentAnnouncementPreferenceGetterService.GetByByUserAndId(
                    getUserResult.Value, command.FlatForRentAnnouncementPreferenceId);

            if (!getFlatForRentAnnouncementPreferenceResult.Success)
            {
                throw new ResourceNotFoundException(getFlatForRentAnnouncementPreferenceResult.Errors);
            }

            await UpdateCityAndCityDistrictsAsync(getFlatForRentAnnouncementPreferenceResult.Value, command.CityId, command.CityDistricts.ToList());

            getFlatForRentAnnouncementPreferenceResult.Value.ChangePriceMin(command.PriceMin);
            getFlatForRentAnnouncementPreferenceResult.Value.ChangePriceMax(command.PriceMax);
            getFlatForRentAnnouncementPreferenceResult.Value.ChangeRoomNumbersMin(command.RoomNumbersMin);
            getFlatForRentAnnouncementPreferenceResult.Value.ChangeRoomNumbersMax(command.RoomNumbersMax);

            var flatForRentAnnouncementPreferencesVerificationResult =
                _flatForRentAnnouncementPreferenceVerificationService.VerifyFlatForRentAnnouncementPreferences(getUserResult.Value.FlatForRentAnnouncementPreferences);

            if (!flatForRentAnnouncementPreferencesVerificationResult.Success)
            {
                throw new ValidationException(flatForRentAnnouncementPreferencesVerificationResult.Errors);
            }

            getUserResult.Value.AddFlatForRentAnnouncementPreferenceChangedEvent(getFlatForRentAnnouncementPreferenceResult.Value, command.CorrelationId);
            await _communicationBus.DispatchDomainEventsAsync(getUserResult.Value, cancellationToken);

            await _userRepository.UpdateAsync(getUserResult.Value);

            var userFlatForRentAnnouncementPreferenceUpdatedIntegrationEvent =
                new UserFlatForRentAnnouncementPreferenceUpdatedIntegrationEvent(command.CorrelationId,
                                                                                 getUserResult.Value.Id,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.Id,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.CityId,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.PriceMin,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.PriceMax,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.RoomNumbersMin,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.RoomNumbersMax,
                                                                                 getFlatForRentAnnouncementPreferenceResult.Value.CityDistricts);
            await _integrationEventBus.PublishIntegrationEventAsync(userFlatForRentAnnouncementPreferenceUpdatedIntegrationEvent);
        }