diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt index 89c1e08..889e6ed 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @RestController @@ -33,6 +34,7 @@ class OrderController(private val service: OrderService) { @GetMapping("/audio-content") fun getAudioContentOrderList( + @RequestParam(value = "orderType", required = false) orderType: OrderType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -40,6 +42,7 @@ class OrderController(private val service: OrderService) { ApiResponse.ok( service.getAudioContentOrderList( + orderType = orderType, member = member, offset = pageable.offset, limit = pageable.pageSize.toLong() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt index fb6022a..4c7887b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt @@ -20,6 +20,7 @@ interface OrderQueryRepository { fun isExistOrderedAndOrderType(memberId: Long, contentId: Long): Pair fun getAudioContentRemainingTime(memberId: Long, contentId: Long, timezone: String): String fun getAudioContentOrderList( + orderType: OrderType?, dateTime: LocalDateTime, coverImageHost: String, memberId: Long, @@ -27,7 +28,7 @@ interface OrderQueryRepository { limit: Long = 10 ): List - fun totalAudioContentOrderListCount(memberId: Long, dateTime: LocalDateTime): Int + fun totalAudioContentOrderListCount(orderType: OrderType?, memberId: Long, dateTime: LocalDateTime): Int fun getAudioContentMainOrderList( dateTime: LocalDateTime, coverImageHost: String, @@ -117,12 +118,41 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde } override fun getAudioContentOrderList( + orderType: OrderType?, dateTime: LocalDateTime, coverImageHost: String, memberId: Long, offset: Long, limit: Long ): List { + var where = order.member.id.eq(memberId) + .and(order.isActive.isTrue) + + when (orderType) { + OrderType.RENTAL -> { + where = where.and( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + } + + OrderType.KEEP -> { + where = where.and(order.type.eq(OrderType.KEEP)) + } + + null -> { + where = where.and( + order.type.eq(OrderType.KEEP) + .or( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + ) + } + } + return queryFactory .select( QGetAudioContentOrderListItem( @@ -141,39 +171,45 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde ) .from(order) .innerJoin(order.audioContent, audioContent) - .where( - order.member.id.eq(memberId) - .and(order.isActive.isTrue) - .and( - order.type.eq(OrderType.KEEP) - .or( - order.type.eq(OrderType.RENTAL) - .and(order.startDate.before(dateTime)) - .and(order.endDate.after(dateTime)) - ) - ) - ) + .where(where) .offset(offset) .limit(limit) .orderBy(order.createdAt.desc()) .fetch() } - override fun totalAudioContentOrderListCount(memberId: Long, dateTime: LocalDateTime): Int { + override fun totalAudioContentOrderListCount(orderType: OrderType?, memberId: Long, dateTime: LocalDateTime): Int { + var where = order.member.id.eq(memberId) + .and(order.isActive.isTrue) + + when (orderType) { + OrderType.RENTAL -> { + where = where.and( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + } + + OrderType.KEEP -> { + where = where.and(order.type.eq(OrderType.KEEP)) + } + + null -> { + where = where.and( + order.type.eq(OrderType.KEEP) + .or( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + ) + } + } + return queryFactory.select(order.id) .from(order) - .where( - order.member.id.eq(memberId) - .and(order.isActive.isTrue) - .and( - order.type.eq(OrderType.KEEP) - .or( - order.type.eq(OrderType.RENTAL) - .and(order.startDate.before(dateTime)) - .and(order.endDate.after(dateTime)) - ) - ) - ) + .where(where) .fetch() .size } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt index 630b22a..620aaaa 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt @@ -90,15 +90,18 @@ class OrderService( } fun getAudioContentOrderList( + orderType: OrderType? = null, member: Member, offset: Long, limit: Long ): GetAudioContentOrderListResponse { val totalCount = repository.totalAudioContentOrderListCount( + orderType = orderType, memberId = member.id!!, dateTime = LocalDateTime.now() ) val orderItems = repository.getAudioContentOrderList( + orderType = orderType, dateTime = LocalDateTime.now(), coverImageHost = audioContentCoverImageHost, memberId = member.id!!,