Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
        }