From b7bcac1c48b0be9dce661f894e397caddcba2f64 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Tue, 23 Jan 2024 15:36:49 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=EA=B0=9D=EC=8B=A4=20=EC=B7=A8?= =?UTF-8?q?=EC=86=8C=20=EC=A0=95=EC=B1=85=EC=97=90=20=EC=88=98=EC=88=98?= =?UTF-8?q?=EB=A3=8C=20=EB=B0=9C=EC=83=9D=20=EA=B8=B0=EA=B0=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 객실 취소 정책에 수수료 발생 기간 추가 --- .../entity/enums/RoomCancelPolicy.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java b/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java index 4e3ca108..88ee0fab 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/accommodation/entity/enums/RoomCancelPolicy.java @@ -1,5 +1,16 @@ package kr.co.fastcampus.yanabada.domain.accommodation.entity.enums; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor(access = AccessLevel.PRIVATE) +@Getter public enum RoomCancelPolicy { - YNBD_1, YNBD_2, YNBD_3 + YNBD_1(7L), + YNBD_2(6L), + YNBD_3(Long.MAX_VALUE), + ; + + private final long feeOccurrenceDuration; } From b863f78038e4139631c1c98caf69fd3e3025c139 Mon Sep 17 00:00:00 2001 From: KyuCheol Hwang Date: Tue, 23 Jan 2024 15:38:04 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=ED=8C=90=EB=A7=A4=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=9C=20=EC=98=88=EC=95=BD=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 수수료가 발생하는 예약만 조회되도록 수정 --- .../repository/OrderRepositoryCustomImpl.java | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/main/java/kr/co/fastcampus/yanabada/domain/order/repository/OrderRepositoryCustomImpl.java b/src/main/java/kr/co/fastcampus/yanabada/domain/order/repository/OrderRepositoryCustomImpl.java index eb8bca43..9a6e734a 100644 --- a/src/main/java/kr/co/fastcampus/yanabada/domain/order/repository/OrderRepositoryCustomImpl.java +++ b/src/main/java/kr/co/fastcampus/yanabada/domain/order/repository/OrderRepositoryCustomImpl.java @@ -2,6 +2,8 @@ import static kr.co.fastcampus.yanabada.domain.accommodation.entity.QAccommodation.accommodation; import static kr.co.fastcampus.yanabada.domain.accommodation.entity.QRoom.room; +import static kr.co.fastcampus.yanabada.domain.accommodation.entity.enums.RoomCancelPolicy.YNBD_1; +import static kr.co.fastcampus.yanabada.domain.accommodation.entity.enums.RoomCancelPolicy.YNBD_2; import static kr.co.fastcampus.yanabada.domain.order.entity.QOrder.order; import static kr.co.fastcampus.yanabada.domain.order.entity.enums.OrderStatus.RESERVED; import static kr.co.fastcampus.yanabada.domain.product.entity.QProduct.product; @@ -10,6 +12,8 @@ import com.querydsl.core.BooleanBuilder; import com.querydsl.core.types.dsl.BooleanExpression; +import com.querydsl.core.types.dsl.CaseBuilder; +import com.querydsl.core.types.dsl.ComparableExpression; import com.querydsl.core.types.dsl.NumberExpression; import com.querydsl.jpa.impl.JPAQueryFactory; import java.time.LocalDate; @@ -34,12 +38,13 @@ public List getSellableByMember(Member member) { return queryFactory .selectFrom(order) - .leftJoin(product).on(product.order.eq(order).and(containStatuses(ON_SALE, BOOKING))) + .leftJoin(product).on(product.order.eq(order), containStatuses(ON_SALE, BOOKING)) .join(order.room, room).fetchJoin() .join(room.accommodation, accommodation).fetchJoin() .where( equalMember(member), - equalStatus(RESERVED) + equalStatus(RESERVED), + hasRoomCancelFee() ) .groupBy(order) .having(count.eq(ZERO_COUNT)) @@ -99,4 +104,30 @@ private BooleanExpression lessCheckInDate(LocalDate date) { return order.checkInDate.lt(date); } + + private BooleanExpression hasRoomCancelFee() { + return new CaseBuilder() + .when(room.cancelPolicy.eq(YNBD_1)).then(hasRoomCancelFeeInYNBD_1()) + .when(room.cancelPolicy.eq(YNBD_2)).then(hasRoomCancelFeeInYNBD_2()) + .otherwise(true) + .eq(true); + } + + private ComparableExpression hasRoomCancelFeeInYNBD_1() { + return new CaseBuilder() + .when( + order.checkInDate.loe(LocalDate.now().plusDays(YNBD_1.getFeeOccurrenceDuration())) + ) + .then(true) + .otherwise(false); + } + + private ComparableExpression hasRoomCancelFeeInYNBD_2() { + return new CaseBuilder() + .when( + order.checkInDate.loe(LocalDate.now().plusDays(YNBD_2.getFeeOccurrenceDuration())) + ) + .then(true) + .otherwise(false); + } }