예제 #1
0
        public static RoomType ConvertToRoomTypeEnum(RoomTypeEnumeration roomType)
        {
            return(roomType switch
            {
                { } roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Single) => RoomType.Single,
                {
                }

                roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Double) => RoomType.Double,
                {
                }

                roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Triple) => RoomType.Triple,
                {
                }

                roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Quadruple) => RoomType
                .Quadruple,
                {
                }

                roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.MultiPerson) => RoomType
                .MultiPerson,
                _ => throw new ArgumentException(
                    $"{nameof(roomType.DisplayName)} is not supported by {nameof(RoomType)}.")
            });
예제 #2
0
        public static RoomType?ConvertToEnum(this RoomTypeEnumeration roomType)
        {
            if (roomType is null)
            {
                return(null);
            }

            switch (roomType)
            {
            case { } roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Single):
                return(RoomType.Single);

            case { } roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Double):
                return(RoomType.Double);

            case { } roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Triple):
                return(RoomType.Triple);

            case { } roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.Quadruple):
                return(RoomType.Quadruple);

            case { } roomTypeEnumeration when Equals(roomTypeEnumeration, RoomTypeEnumeration.MultiPerson):
                return(RoomType.MultiPerson);

            default:
                throw new ArgumentException($"{nameof(roomType.DisplayName)} is not supported by {nameof(RoomType)}.");
            }
        }
예제 #3
0
        public void RemoveRoomType(RoomTypeEnumeration roomType)
        {
            roomType = new RoomForRentAnnouncementRoomType(roomType);
            var roomTypeToRemove = _roomTypes.SingleOrDefault(x => Equals(x, roomType));

            _roomTypes.Remove(roomTypeToRemove);
        }
예제 #4
0
        public async Task <List <RoomForRentAnnouncement> > FindAsync(int?pageNumber, int?pageSize, string sort, Guid?cityId,
                                                                      DateTimeOffset?createdFrom, DateTimeOffset?createdTo, decimal?priceFrom, decimal?priceTo, Guid?cityDistrict,
                                                                      RoomTypeEnumeration roomType)
        {
            var roomForRentAnnouncementEntities = await FindRoomForRentAnnouncementEntitiesAsync(pageNumber, pageSize,
                                                                                                 sort, cityId, createdFrom, createdTo, priceFrom, priceTo, cityDistrict, roomType);

            return(_mapper.Map <List <RoomForRentAnnouncementEntity>, List <RoomForRentAnnouncement> >(roomForRentAnnouncementEntities));
        }
예제 #5
0
 public RoomForRentAnnouncementPreferenceOutputQuery(Guid id, Guid cityId, decimal?priceMin, decimal?priceMax,
                                                     RoomTypeEnumeration roomType, IEnumerable <Guid> cityDistricts) : base(id)
 {
     PriceMin      = priceMin;
     PriceMax      = priceMax;
     CityId        = cityId;
     RoomType      = roomType;
     CityDistricts = cityDistricts.ToList().AsReadOnly();
 }
예제 #6
0
 private RoomForRentAnnouncementPreference(RoomForRentAnnouncementPreferenceBuilder builder)
 {
     Id             = builder.Id;
     CityId         = builder.CityId;
     PriceMin       = builder.PriceMin;
     PriceMax       = builder.PriceMax;
     RoomType       = builder.RoomType;
     _cityDistricts = builder.CityDistricts;
 }
예제 #7
0
        public Task <int> CountAsync(Guid?cityId, DateTimeOffset?createdFrom, DateTimeOffset?createdTo, decimal?priceFrom,
                                     decimal?priceTo, Guid?cityDistrict, RoomTypeEnumeration roomType)
        {
            var filterPredicate = CreateFilterPredicate(cityId, createdFrom, createdTo, priceFrom, priceTo,
                                                        cityDistrict, roomType);

            return(filterPredicate != null
                ? _cosmosStore.Query().CountAsync(filterPredicate)
                : _cosmosStore.Query().CountAsync());
        }
예제 #8
0
        public void AddRoomType(RoomTypeEnumeration roomType)
        {
            roomType = new RoomForRentAnnouncementRoomType(roomType);
            var anyDuplicates = _roomTypes.Contains(roomType);

            if (!anyDuplicates)
            {
                _roomTypes.Add(roomType);
            }
        }
예제 #9
0
 public CreateRoomForRentAnnouncementPreferenceCommand(Guid userId, Guid cityId, decimal?priceMin, decimal?priceMax, RoomTypeEnumeration roomType, IEnumerable <Guid> cityDistricts)
 {
     RoomForRentAnnouncementPreferenceId = Guid.NewGuid();
     UserId        = userId;
     CityId        = cityId;
     PriceMin      = priceMin;
     PriceMax      = priceMax;
     RoomType      = roomType;
     CityDistricts = cityDistricts.ToList().AsReadOnly();
     CorrelationId = Guid.NewGuid();
 }
예제 #10
0
 public GetRoomForRentAnnouncementsInputQuery(int?page, int?pageSize, string sort, DateTimeOffset?createdFrom,
                                              DateTimeOffset?createdTo, Guid?cityId, decimal?priceFrom, decimal?priceTo, RoomTypeEnumeration roomType,
                                              Guid?cityDistrict) : base(page, pageSize, sort)
 {
     CreatedFrom  = createdFrom;
     CreatedTo    = createdTo;
     CityId       = cityId;
     PriceFrom    = priceFrom;
     PriceTo      = priceTo;
     RoomType     = roomType;
     CityDistrict = cityDistrict;
 }
예제 #11
0
        private async Task <List <RoomForRentAnnouncementEntity> > FindRoomForRentAnnouncementEntitiesAsync(int?pageNumber, int?pageSize,
                                                                                                            string sort, Guid?cityId, DateTimeOffset?createdFrom, DateTimeOffset?createdTo, decimal?priceFrom, decimal?priceTo,
                                                                                                            Guid?cityDistrict, RoomTypeEnumeration roomType)
        {
            var query = _cosmosStore.Query();

            if (!string.IsNullOrWhiteSpace(sort))
            {
                var orderByQuery = _orderByExpressionCreator.CreateExpression(sort);
                query = orderByQuery(query);
            }

            var filterPredicate = CreateFilterPredicate(cityId, createdFrom, createdTo, priceFrom, priceTo,
                                                        cityDistrict, roomType);

            query = filterPredicate != null?query.Where(filterPredicate) : query;

            if (pageNumber.HasValue && pageSize.HasValue)
            {
                query = query.WithPagination(pageNumber.Value, pageSize.Value);
            }

            return(await query.ToListAsync());
        }
예제 #12
0
        private static Expression <Func <RoomForRentAnnouncementEntity, bool> > CreateFilterPredicate(Guid?cityId, DateTimeOffset?createdFrom,
                                                                                                      DateTimeOffset?createdTo, decimal?priceFrom, decimal?priceTo, Guid?cityDistrict, RoomTypeEnumeration roomType)
        {
            Expression <Func <RoomForRentAnnouncementEntity, bool> > filterPredicate = null;

            if (cityId.HasValue)
            {
                filterPredicate = x => x.CityId == cityId.Value;
            }
            if (createdFrom.HasValue)
            {
                filterPredicate = filterPredicate.AndAlso(x => x.Created >= createdFrom.Value);
            }
            if (createdTo.HasValue)
            {
                filterPredicate = filterPredicate.AndAlso(x => x.Created <= createdTo.Value);
            }
            if (priceFrom.HasValue)
            {
                filterPredicate = filterPredicate.AndAlso(x => x.Price >= priceFrom.Value);
            }
            if (priceTo.HasValue)
            {
                filterPredicate = filterPredicate.AndAlso(x => x.Price <= priceTo.Value);
            }
            if (cityDistrict.HasValue)
            {
                filterPredicate = filterPredicate.AndAlso(x => x.CityDistricts.Contains(cityDistrict.Value));
            }
            if (roomType != null)
            {
                filterPredicate = filterPredicate.AndAlso(x => x.RoomTypes.Select(r => r.ToString()).Contains(roomType.DisplayName));
            }

            return(filterPredicate);
        }
예제 #13
0
 public RoomForRentAnnouncementRoomType(RoomTypeEnumeration roomType)
 {
     _roomType = roomType ?? throw new RoomForRentAnnouncementRoomTypeNullException();
 }
예제 #14
0
 public void ChangeRoomType(RoomTypeEnumeration roomType)
 {
     RoomType = roomType;
 }
예제 #15
0
 public IRoomForRentAnnouncementPreferenceBuilder SetRoomType(RoomTypeEnumeration roomType)
 {
     RoomType = roomType;
     return(this);
 }