diff --git a/services/order/src/main/java/com/ticketPing/order/application/service/OrderService.java b/services/order/src/main/java/com/ticketPing/order/application/service/OrderService.java index df6e9492..4a35a840 100644 --- a/services/order/src/main/java/com/ticketPing/order/application/service/OrderService.java +++ b/services/order/src/main/java/com/ticketPing/order/application/service/OrderService.java @@ -13,6 +13,9 @@ import lombok.val; import messaging.events.OrderCompletedForQueueTokenRemovalEvent; import messaging.events.OrderCompletedForSeatReservationEvent; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import performance.OrderSeatResponse; @@ -40,9 +43,9 @@ public OrderResponse createOrder(UUID scheduleId, UUID seatId, UUID userId) { return OrderResponse.from(order); } - public List getUserOrders(UUID userId) { - List orders = orderRepository.findByUserId(userId); - return orders.stream().map(OrderResponse::from).toList(); + public Slice getUserOrders(UUID userId, Pageable pageable) { + Slice orders = orderRepository.findUserOrdersExcludingStatus(userId, OrderStatus.FAIL, pageable); + return orders.map(OrderResponse::from); } public void validateOrderAndExtendTTL(UUID orderId, UUID userId) { diff --git a/services/order/src/main/java/com/ticketPing/order/domain/repository/OrderRepository.java b/services/order/src/main/java/com/ticketPing/order/domain/repository/OrderRepository.java index 6b8c39c4..08520db9 100644 --- a/services/order/src/main/java/com/ticketPing/order/domain/repository/OrderRepository.java +++ b/services/order/src/main/java/com/ticketPing/order/domain/repository/OrderRepository.java @@ -2,6 +2,8 @@ import com.ticketPing.order.domain.model.entity.Order; import com.ticketPing.order.domain.model.enums.OrderStatus; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import java.util.List; import java.util.Optional; @@ -14,7 +16,7 @@ public interface OrderRepository { Optional findByIdAndOrderStatus(UUID orderId, OrderStatus orderStatus); - List findByUserId(UUID userId); - boolean existsByOrderSeatSeatIdAndOrderStatusIn(UUID seatId, List pending); + + Slice findUserOrdersExcludingStatus(UUID userId, OrderStatus orderStatus, Pageable pageable); } diff --git a/services/order/src/main/java/com/ticketPing/order/infrastructure/repository/OrderJpaRepository.java b/services/order/src/main/java/com/ticketPing/order/infrastructure/repository/OrderJpaRepository.java index 9f4e8976..88738348 100644 --- a/services/order/src/main/java/com/ticketPing/order/infrastructure/repository/OrderJpaRepository.java +++ b/services/order/src/main/java/com/ticketPing/order/infrastructure/repository/OrderJpaRepository.java @@ -1,11 +1,19 @@ package com.ticketPing.order.infrastructure.repository; import com.ticketPing.order.domain.model.entity.Order; +import com.ticketPing.order.domain.model.enums.OrderStatus; import com.ticketPing.order.domain.repository.OrderRepository; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.UUID; public interface OrderJpaRepository extends OrderRepository, JpaRepository { - + @Query("SELECT o FROM Order o " + + "JOIN FETCH o.orderSeat " + + "WHERE o.userId = :userId " + + "AND o.orderStatus != :orderStatus") + Slice findUserOrdersExcludingStatus(UUID userId, OrderStatus orderStatus, Pageable pageable); } diff --git a/services/order/src/main/java/com/ticketPing/order/presentation/controller/OrderController.java b/services/order/src/main/java/com/ticketPing/order/presentation/controller/OrderController.java index 8ffb08bb..378e21a6 100644 --- a/services/order/src/main/java/com/ticketPing/order/presentation/controller/OrderController.java +++ b/services/order/src/main/java/com/ticketPing/order/presentation/controller/OrderController.java @@ -2,7 +2,9 @@ import com.ticketPing.order.application.dtos.OrderResponse; import com.ticketPing.order.application.service.OrderService; -import org.springframework.http.HttpStatus; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.http.ResponseEntity; import response.CommonResponse; import io.swagger.v3.oas.annotations.Operation; @@ -35,9 +37,10 @@ public ResponseEntity> createOrder(@RequestHeader( } @Operation(summary = "사용자 예매 목록 전체 조회") - @GetMapping("/user/reservations") - public ResponseEntity>> getUserReservation(@RequestHeader("X_USER_ID") UUID userId) { - List userReservationDto = orderService.getUserOrders(userId); + @GetMapping("/user-orders") + public ResponseEntity>> getUserReservation(@RequestHeader("X_USER_ID") UUID userId, + Pageable pageable) { + Slice userReservationDto = orderService.getUserOrders(userId, pageable); return ResponseEntity .status(200) .body(success(userReservationDto));