示例#1
0
        private async Task UpdateCityAndCityDistrictsAsync(FlatForRentAnnouncementPreference flatForRentAnnouncementPreference, Guid cityId, ICollection <Guid> cityDistricts)
        {
            if (flatForRentAnnouncementPreference.CityId != cityId)
            {
                var cityAndCityDistrictsVerificationResult = await _cityVerificationService.VerifyCityAndCityDistrictsAsync(cityId, cityDistricts);

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

                flatForRentAnnouncementPreference.ChangeCityId(cityId);
                flatForRentAnnouncementPreference.ChangeCityDistricts(cityDistricts);
            }
            else
            {
                var sameCityDistricts = flatForRentAnnouncementPreference.CityDistricts.All(cityDistricts.Contains) &&
                                        flatForRentAnnouncementPreference.CityDistricts.Count == cityDistricts.Count;
                if (!sameCityDistricts)
                {
                    var cityAndCityDistrictsVerificationResult = await _cityVerificationService.VerifyCityAndCityDistrictsAsync(cityId, cityDistricts);

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

                    flatForRentAnnouncementPreference.ChangeCityDistricts(cityDistricts);
                }
            }
        }
示例#2
0
        public async Task HandleAsync(CreateFlatForRentAnnouncementPreferenceCommand command, CancellationToken cancellationToken = default)
        {
            var getUserResult = await _userGetterService.GetByIdAsync(command.UserId);

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

            var cityAndCityDistrictsVerificationResult = await _cityVerificationService.VerifyCityAndCityDistrictsAsync(command.CityId, command.CityDistricts);

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

            var announcementPreferenceLimitIsNotExceededVerificationResult =
                _userVerificationService.VerifyAnnouncementPreferenceLimitIsNotExceeded(
                    getUserResult.Value.AnnouncementPreferenceLimit,
                    getUserResult.Value.FlatForRentAnnouncementPreferences.Count +
                    getUserResult.Value.RoomForRentAnnouncementPreferences.Count);

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

            var flatForRentAnnouncementPreference =
                _mapper.Map <CreateFlatForRentAnnouncementPreferenceCommand, FlatForRentAnnouncementPreference>(command);
            var flatForRentAnnouncementPreferences = getUserResult.Value.FlatForRentAnnouncementPreferences.ToList();

            flatForRentAnnouncementPreferences.Add(flatForRentAnnouncementPreference);
            var flatForRentAnnouncementPreferencesVerificationResult =
                _flatForRentAnnouncementPreferenceVerificationService.VerifyFlatForRentAnnouncementPreferences(flatForRentAnnouncementPreferences);

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

            getUserResult.Value.AddFlatForRentAnnouncementPreference(flatForRentAnnouncementPreference, command.CorrelationId);
            await _communicationBus.DispatchDomainEventsAsync(getUserResult.Value, cancellationToken);

            await _userRepository.UpdateAsync(getUserResult.Value);

            var userFlatForRentAnnouncementPreferenceCreatedIntegrationEvent =
                new UserFlatForRentAnnouncementPreferenceCreatedIntegrationEvent(command.CorrelationId,
                                                                                 getUserResult.Value.Id,
                                                                                 flatForRentAnnouncementPreference.Id,
                                                                                 getUserResult.Value.Email,
                                                                                 flatForRentAnnouncementPreference.CityId,
                                                                                 getUserResult.Value.ServiceActive,
                                                                                 getUserResult.Value.AnnouncementSendingFrequency.ConvertToEnum(),
                                                                                 flatForRentAnnouncementPreference.PriceMin,
                                                                                 flatForRentAnnouncementPreference.PriceMax,
                                                                                 flatForRentAnnouncementPreference.RoomNumbersMin,
                                                                                 flatForRentAnnouncementPreference.RoomNumbersMax,
                                                                                 flatForRentAnnouncementPreference.CityDistricts);
            await _integrationEventBus.PublishIntegrationEventAsync(userFlatForRentAnnouncementPreferenceCreatedIntegrationEvent);
        }
示例#3
0
        public async Task VerifyCityAndCityDistrictsAsync_Should_Return_VerificationResult_With_Success()
        {
            var cityId        = Guid.NewGuid();
            var cityDistricts = new List <Guid> {
                Guid.NewGuid()
            };
            var city          = new City(cityId, cityDistricts);
            var getCityResult = GetResult <City> .Ok(city);

            var expectedResult = VerificationResult.Ok();

            _cityGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>()))
            .ReturnsAsync(getCityResult);

            var result = await _service.VerifyCityAndCityDistrictsAsync(cityId, cityDistricts);

            result.Should().BeEquivalentTo(expectedResult);
        }