@@ -286,15 +286,15 @@ public OrderPerformanceResponseDTO getUserOrderPerformances(UserEntity userInfo)
286286
287287 final Map <UUID , Integer > performanceDateCountMap = getPerformanceDateCountMap (allOrderItems );
288288
289- final Map <Long , Integer > refundCountMap = getRefundCountMap (allOrderItems );
289+ final Map <Long , Integer > refundQuantityMap = getRefundQuantityMap (allOrderItems );
290290
291291 // 날짜별로 주문 항목을 그룹화하기 위한 맵 선언
292292 final Map <LocalDate , List <OrderPerformanceResponseDTO .DatePerformanceOrderDTO .OrderPerformanceDTO >> OrderItems = new HashMap <>();
293293
294294 for (OrderItemEntity orderItem : allOrderItems ) {
295295 int dateCount = performanceDateCountMap .getOrDefault (orderItem .getId (), 0 );
296296
297- int refundCount = refundCountMap .getOrDefault (orderItem .getOrder ().getId (), 0 );
297+ int refundCount = refundQuantityMap .getOrDefault (orderItem .getOrder ().getId (), 0 );
298298
299299 // 각 주문 항목에 대한 제품 정보 가져옴
300300 final OrderPerformanceResponseDTO .DatePerformanceOrderDTO .OrderPerformanceDTO orderItemDTO = new OrderPerformanceResponseDTO .DatePerformanceOrderDTO .OrderPerformanceDTO ();
@@ -386,7 +386,7 @@ public ApplyResponseDTO getApplyInfo(final UUID orderItemId) {
386386 applyResponseDTO .setImagePath (orderItem .getProduct ().getImagePath () != null ? bucketURL + URLEncoder .encode (orderItem .getProduct ().getImagePath (), StandardCharsets .UTF_8 ): "" );
387387 applyResponseDTO .setTitle (orderItem .getProduct ().getTitle ());
388388 applyResponseDTO .setWriter (orderItem .getProduct ().getWriter ());
389- applyResponseDTO .setPerformanceAmount (orderItem .getPerformanceAmount () - refundRepo .countByOrderId (orderItem .getOrder ().getId ()));
389+ applyResponseDTO .setPerformanceAmount (orderItem .getPerformanceAmount () - refundRepo .sumRefundQuantityByOrderId (orderItem .getOrder ().getId ()));
390390
391391 ApplyResponseDTO .ApplicantDTO applicantDTO = ApplyResponseDTO .ApplicantDTO .builder ()
392392 .name (applicant .getName ())
@@ -415,7 +415,7 @@ public void processPerformanceApplication(final ApplyRequestDTO dto) {
415415 final OrderItemEntity orderItem = getOrderItem (dto .getOrderItemId ());
416416 expire (orderItem .getCreatedAt ());
417417
418- int availableAmount = orderItem .getPerformanceAmount () - performanceDateRepo .countByOrderItemId (dto .getOrderItemId ()) - refundRepo .countByOrderId (orderItem .getOrder ().getId ());
418+ int availableAmount = orderItem .getPerformanceAmount () - performanceDateRepo .countByOrderItemId (dto .getOrderItemId ()) - refundRepo .sumRefundQuantityByOrderId (orderItem .getOrder ().getId ());
419419 if (dto .getPerformanceDate ().size () > availableAmount )
420420 throw new RuntimeException ("공연권 구매량 초과" );
421421
@@ -490,7 +490,8 @@ public RefundResponseDTO getRefundInfo(final UUID orderItemId) {
490490 try {
491491 final OrderItemEntity orderItem = getOrderItem (orderItemId );
492492
493- final int possibleAmount = orderItem .getPerformanceAmount () - performanceDateRepo .countByOrderItemId (orderItemId ) - refundRepo .countByOrderId (orderItem .getOrder ().getId ());
493+ final int refundAmount = refundRepo .sumRefundQuantityByOrderId (orderItem .getOrder ().getId ());
494+ final int possibleAmount = orderItem .getPerformanceAmount () - performanceDateRepo .countByOrderItemId (orderItemId ) - refundAmount ;
494495 final long possiblePrice = orderItem .getProduct ().getPerformancePrice () * possibleAmount ;
495496 String encodedScriptImage = orderItem .getProduct ().getImagePath () != null
496497 ? bucketURL + URLEncoder .encode (orderItem .getProduct ().getImagePath (), StandardCharsets .UTF_8 )
@@ -898,7 +899,7 @@ private Map<UUID, Integer> getPerformanceDateCountMap(List<OrderItemEntity> orde
898899 ));
899900 }
900901
901- private Map <Long , Integer > getRefundCountMap (List <OrderItemEntity > orderItems ) {
902+ private Map <Long , Integer > getRefundQuantityMap (List <OrderItemEntity > orderItems ) {
902903 List <Long > orderIds = orderItems .stream ()
903904 .map (oi -> oi .getOrder ().getId ())
904905 .distinct ()
@@ -907,12 +908,11 @@ private Map<Long, Integer> getRefundCountMap(List<OrderItemEntity> orderItems) {
907908 if (orderIds .isEmpty ())
908909 return Map .of ();
909910
910- return refundRepo .countByOrderIds (orderIds )
911+ return refundRepo .sumRefundQuantityByOrderIds (orderIds )
911912 .stream ()
912913 .collect (Collectors .toMap (
913- row -> (Long ) row [0 ],
914- row -> ((Long ) row [1 ]).intValue ()
914+ row -> (Long ) row [0 ], // orderId
915+ row -> ((Long ) row [1 ]).intValue () // sum(quantity)
915916 ));
916917 }
917-
918918}
0 commit comments