Esempio n. 1
0
        public void GetByByUserAndId_Should_Return_GetResult_Ok_With_RoomForRentAnnouncementPreference()
        {
            var id = Guid.NewGuid();
            var roomForRentAnnouncementPreference = RoomForRentAnnouncementPreference.Builder()
                                                    .SetId(id)
                                                    .SetCityId(Guid.NewGuid())
                                                    .SetPriceMin(0)
                                                    .SetPriceMax(1500)
                                                    .SetRoomType(RoomTypeEnumeration.Single)
                                                    .SetCityDistricts(new List <Guid> {
                Guid.NewGuid()
            })
                                                    .Build();
            var roomForRentAnnouncementPreferences = new List <RoomForRentAnnouncementPreference> {
                roomForRentAnnouncementPreference
            };
            var user = User.Builder()
                       .SetId(Guid.NewGuid())
                       .SetEmail("*****@*****.**")
                       .SetServiceActive(DefaultUserSettings.ServiceActive)
                       .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit)
                       .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency)
                       .SetRoomForRentAnnouncementPreferences(roomForRentAnnouncementPreferences)
                       .Build();
            var expectedResult = GetResult <RoomForRentAnnouncementPreference> .Ok(roomForRentAnnouncementPreference);

            var result = _service.GetByByUserAndId(user, id);

            result.Should().BeEquivalentTo(expectedResult);
        }
Esempio n. 2
0
        public async Task HandleAsync(DeleteRoomForRentAnnouncementPreferenceCommand 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);
            }

            getUserResult.Value.DeleteRoomForRentAnnouncementPreference(getRoomForRentAnnouncementPreferenceResult.Value, command.CorrelationId);
            await _communicationBus.DispatchDomainEventsAsync(getUserResult.Value, cancellationToken);

            await _userRepository.UpdateAsync(getUserResult.Value);

            var userAnnouncementPreferenceDeletedIntegrationEvent =
                new UserAnnouncementPreferenceDeletedIntegrationEvent(command.CorrelationId, getUserResult.Value.Id,
                                                                      getRoomForRentAnnouncementPreferenceResult.Value.Id,
                                                                      AnnouncementPreferenceType.RoomForRentAnnouncementPreference);
            await _integrationEventBus.PublishIntegrationEventAsync(userAnnouncementPreferenceDeletedIntegrationEvent);
        }
Esempio n. 3
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);
        }
Esempio n. 4
0
        public async Task <RoomForRentAnnouncementPreferenceOutputQuery> HandleAsync(GetRoomForRentAnnouncementPreferenceInputQuery inputQuery, CancellationToken cancellationToken = default)
        {
            var getUserResult = await _userGetterService.GetByIdAsync(inputQuery.UserId);

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

            var getRoomForRentAnnouncementPreferenceResult =
                _roomForRentAnnouncementPreferenceGetterService.GetByByUserAndId(
                    getUserResult.Value, inputQuery.RoomForRentAnnouncementPreferenceId);

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

            return(_mapper.Map <RoomForRentAnnouncementPreference, RoomForRentAnnouncementPreferenceOutputQuery>(getRoomForRentAnnouncementPreferenceResult.Value));
        }