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; } }
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); }