Skip to content

Commit 0c7c0e0

Browse files
Merge pull request #616 from Podo-Store/develop
[REFACTOR] 결제 정상화
2 parents 111f0dd + fe447e2 commit 0c7c0e0

5 files changed

Lines changed: 27 additions & 27 deletions

File tree

src/main/java/PodoeMarket/podoemarket/common/repository/OrderItemRepository.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import java.util.UUID;
1515

1616
public interface OrderItemRepository extends JpaRepository<OrderItemEntity, Long> {
17-
List<OrderItemEntity> findByProductIdAndUserId(UUID productId, UUID userId);
18-
1917
List<OrderItemEntity> findByOrderId(Long id);
2018

2119
@Query("""
@@ -25,7 +23,7 @@ public interface OrderItemRepository extends JpaRepository<OrderItemEntity, Long
2523
WHERE oi.user.id = :userId
2624
AND oi.script = true
2725
AND o.orderStatus = :status
28-
""")
26+
""")
2927
List<OrderItemEntity> findPaidScriptOrderItems(
3028
@Param("userId") UUID userId,
3129
@Param("status") OrderStatus status,
@@ -39,7 +37,7 @@ List<OrderItemEntity> findPaidScriptOrderItems(
3937
WHERE oi.user.id = :userId
4038
AND oi.performanceAmount > 0
4139
AND o.orderStatus = :status
42-
""")
40+
""")
4341
List<OrderItemEntity> findPaidPerformanceOrderItems(
4442
@Param("userId") UUID userId,
4543
@Param("status") OrderStatus status,
@@ -51,16 +49,13 @@ List<OrderItemEntity> findPaidPerformanceOrderItems(
5149
@Query("SELECT COUNT(o) FROM OrderItemEntity o WHERE o.product.id = :productId AND o.script = true")
5250
int sumScriptByProductId(@Param("productId") UUID productId);
5351

54-
@Query("SELECT COALESCE(SUM(o.performanceAmount), 0) FROM OrderItemEntity o WHERE o.product.id = :productId")
55-
int sumPerformanceAmountByProductId(@Param("productId") UUID productId);
56-
5752
@Query("""
5853
SELECT COALESCE(SUM(oi.performanceAmount), 0)
5954
FROM OrderItemEntity oi
6055
JOIN oi.order o
6156
WHERE oi.product.id = :productId
6257
AND o.orderStatus = :status
63-
""")
58+
""")
6459
long sumPaidPerformanceAmountByProductId(@Param("productId") UUID productId, @Param("status") OrderStatus status);
6560

6661
List<OrderItemEntity> findAllByProductId(UUID productId);
@@ -75,7 +70,15 @@ SELECT COALESCE(SUM(oi.performanceAmount), 0)
7570
""")
7671
Page<OrderItemEntity> findOrderItemsByKeyword(@Param("keyword") String keyword, Pageable pageable);
7772

78-
Boolean existsByProductIdAndUserId(UUID productId, UUID userId);
79-
8073
Boolean existsByProduct_IdAndUser_IdAndScriptTrueAndOrder_OrderStatusAndCreatedAtAfter(UUID productId, UUID userId, OrderStatus status, LocalDateTime oneYearAgo);
74+
75+
@Query("""
76+
SELECT MAX(o.createdAt)
77+
FROM OrderItemEntity o
78+
WHERE o.product.id = :productId
79+
AND o.user.id = :userId
80+
AND o.script = true
81+
AND o.order.orderStatus = :status
82+
""")
83+
LocalDateTime findLastScriptPurchaseDate(@Param("productId") UUID productId, @Param("userId") UUID userId, @Param("status") OrderStatus status);
8184
}

src/main/java/PodoeMarket/podoemarket/common/repository/PdfDownloadLogRepository.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package PodoeMarket.podoemarket.common.repository;
22

33
import PodoeMarket.podoemarket.common.entity.PdfDownloadLogEntity;
4-
import io.lettuce.core.dynamic.annotation.Param;
54
import org.springframework.data.jpa.repository.JpaRepository;
65
import org.springframework.data.jpa.repository.Query;
6+
import org.springframework.data.repository.query.Param;
77

88
import java.util.List;
99
import java.util.UUID;
@@ -15,7 +15,7 @@ public interface PdfDownloadLogRepository extends JpaRepository<PdfDownloadLogEn
1515
WHERE p.orderItemId IN :orderItemIds
1616
AND p.userId = :userId
1717
""")
18-
List<UUID> findDownloadedOrderItemIds(@Param("orderItemIds") List<UUID> orderItemIds, @Param("userId") UUID userId);
18+
List<UUID> findDownloadedOrderItemIds(@Param("orderItemIds") List<UUID> orderItemIds, @Param("userId") UUID userId);
1919

20-
Boolean existsByOrderItemIdAndUserId(UUID orderItemId, UUID userId);
20+
boolean existsByOrderItemIdAndUserId(UUID orderItemId, UUID userId);
2121
}

src/main/java/PodoeMarket/podoemarket/order/service/OrderService.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.net.URLEncoder;
1818
import java.nio.charset.StandardCharsets;
19+
import java.time.LocalDateTime;
1920
import java.util.*;
2021

2122
@RequiredArgsConstructor
@@ -180,23 +181,22 @@ protected OrdersEntity orderCreate(final OrdersEntity ordersEntity, final OrderR
180181

181182
// 대본권 구매 확인
182183
if (!product.getScript() && orderItemDTO.getScript())
183-
throw new RuntimeException("대본권 구매 조건 위반");
184+
throw new RuntimeException("해당 상품은 대본권 제공하지 않음");
184185

185186
// 공연권 구매 확인
186187
if (!product.getPerformance() && (orderItemDTO.getPerformanceAmount() > 0))
187-
throw new RuntimeException("공연권 구매 조건 위반");
188+
throw new RuntimeException("해당 상품은 공연권 제공하지 않음");
188189

189-
if(orderItemRepo.existsByProductIdAndUserId(orderItemDTO.getProductId(), user.getId())) {
190-
final List<OrderItemEntity> items = orderItemRepo.findByProductIdAndUserId(orderItemDTO.getProductId(), user.getId());
190+
// 대본 중복 구매 방지
191+
if(orderItemDTO.getScript()) {
192+
LocalDateTime lastPurchase = orderItemRepo.findLastScriptPurchaseDate(product.getId(), user.getId(), OrderStatus.PAID);
191193

192-
for(OrderItemEntity item : items) {
193-
// 대본권 제한
194-
if(orderItemDTO.getScript() && item.getScript())
195-
throw new RuntimeException("<" + product.getTitle() + "> 대본은 이미 구매했음");
194+
if(lastPurchase != null) {
195+
LocalDateTime expireDate = lastPurchase.plusMonths(3);
196+
197+
if (expireDate.isAfter(LocalDateTime.now()))
198+
throw new RuntimeException("<" + product.getTitle() + "> 대본은 아직 권리기간 내입니다.");
196199
}
197-
} else {
198-
if(!orderItemDTO.getScript() && orderItemDTO.getPerformanceAmount() > 0)
199-
throw new RuntimeException("대본권을 구매해야 함");
200200
}
201201

202202
final long scriptPrice = orderItemDTO.getScript() ? product.getScriptPrice() : 0;

src/main/java/PodoeMarket/podoemarket/profile/controller/MypageController.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
import org.springframework.security.core.annotation.AuthenticationPrincipal;
1616
import org.springframework.web.bind.annotation.*;
1717

18-
import java.net.URLEncoder;
19-
import java.nio.charset.StandardCharsets;
2018
import java.util.List;
2119
import java.util.Objects;
2220
import java.util.UUID;

src/main/java/PodoeMarket/podoemarket/profile/controller/WorkController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import org.springframework.web.bind.annotation.*;
1515
import org.springframework.web.multipart.MultipartFile;
1616

17-
import java.io.IOException;
1817
import java.util.UUID;
1918

2019
@RequiredArgsConstructor

0 commit comments

Comments
 (0)