public async Task UpdateAsync(UserRoomForRentAnnouncementPreferenceUpdatedIntegrationEvent integrationEvent) { var roomForRentAnnouncementPreference = await _cosmosStore.FindAsync(integrationEvent.RoomForRentAnnouncementPreferenceId.ToString()); var sameCityDistricts = roomForRentAnnouncementPreference.CityDistricts.All(integrationEvent.CityDistricts.Contains) && roomForRentAnnouncementPreference.CityDistricts.Count == integrationEvent.CityDistricts.Count; if (roomForRentAnnouncementPreference.CityId != integrationEvent.CityId || roomForRentAnnouncementPreference.PriceMin != integrationEvent.PriceMin || roomForRentAnnouncementPreference.PriceMax != integrationEvent.PriceMax || roomForRentAnnouncementPreference.RoomType != integrationEvent.RoomType || !sameCityDistricts) { roomForRentAnnouncementPreference.AnnouncementUrlsToSend = new List <string>(); } roomForRentAnnouncementPreference.CityId = integrationEvent.CityId; roomForRentAnnouncementPreference.PriceMin = integrationEvent.PriceMin; roomForRentAnnouncementPreference.PriceMax = integrationEvent.PriceMax; roomForRentAnnouncementPreference.RoomType = integrationEvent.RoomType; roomForRentAnnouncementPreference.CityDistricts = integrationEvent.CityDistricts.ToList(); var updateResult = await _cosmosStore.UpdateAsync(roomForRentAnnouncementPreference); if (!updateResult.IsSuccess) { throw updateResult.Exception; } }
public async Task HandleAsync(UpdateRoomForRentAnnouncementPreferenceCommand command, CancellationToken cancellationToken = default) { var getUserResult = await _userGetterService.GetByIdAsync(command.UserId); if (!getUserResult.Success) { throw new ResourceNotFoundException(getUserResult.Errors); } var getRoomForRentAnnouncementPreferenceResult = _roomForRentAnnouncementPreferenceGetterService.GetByByUserAndId( getUserResult.Value, command.RoomForRentAnnouncementPreferenceId); if (!getRoomForRentAnnouncementPreferenceResult.Success) { throw new ResourceNotFoundException(getRoomForRentAnnouncementPreferenceResult.Errors); } await UpdateCityAndCityDistrictsAsync(getRoomForRentAnnouncementPreferenceResult.Value, command.CityId, command.CityDistricts.ToList()); getRoomForRentAnnouncementPreferenceResult.Value.ChangePriceMin(command.PriceMin); getRoomForRentAnnouncementPreferenceResult.Value.ChangePriceMax(command.PriceMax); getRoomForRentAnnouncementPreferenceResult.Value.ChangeRoomType(command.RoomType); var roomForRentAnnouncementPreferencesVerificationResult = _roomForRentAnnouncementPreferenceVerificationService.VerifyRoomForRentAnnouncementPreferences(getUserResult.Value.RoomForRentAnnouncementPreferences); if (!roomForRentAnnouncementPreferencesVerificationResult.Success) { throw new ValidationException(roomForRentAnnouncementPreferencesVerificationResult.Errors); } getUserResult.Value.AddRoomForRentAnnouncementPreferenceChangedEvent(getRoomForRentAnnouncementPreferenceResult.Value, command.CorrelationId); await _communicationBus.DispatchDomainEventsAsync(getUserResult.Value, cancellationToken); await _userRepository.UpdateAsync(getUserResult.Value); var userRoomForRentAnnouncementPreferenceUpdatedIntegrationEvent = new UserRoomForRentAnnouncementPreferenceUpdatedIntegrationEvent(command.CorrelationId, getUserResult.Value.Id, getRoomForRentAnnouncementPreferenceResult.Value.Id, getRoomForRentAnnouncementPreferenceResult.Value.CityId, getRoomForRentAnnouncementPreferenceResult.Value.PriceMin, getRoomForRentAnnouncementPreferenceResult.Value.PriceMax, getRoomForRentAnnouncementPreferenceResult.Value.RoomType.ConvertToEnum(), getRoomForRentAnnouncementPreferenceResult.Value.CityDistricts); await _integrationEventBus.PublishIntegrationEventAsync(userRoomForRentAnnouncementPreferenceUpdatedIntegrationEvent); }