구매목록 조회

- 구매유형별로 조회할 수 있도록 orderType 추가
This commit is contained in:
Klaus 2024-12-04 18:44:17 +09:00
parent 4ff5e9e163
commit ba17095536
3 changed files with 68 additions and 26 deletions

View File

@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RestController
@RestController @RestController
@ -33,6 +34,7 @@ class OrderController(private val service: OrderService) {
@GetMapping("/audio-content") @GetMapping("/audio-content")
fun getAudioContentOrderList( fun getAudioContentOrderList(
@RequestParam(value = "orderType", required = false) orderType: OrderType? = null,
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?,
pageable: Pageable pageable: Pageable
) = run { ) = run {
@ -40,6 +42,7 @@ class OrderController(private val service: OrderService) {
ApiResponse.ok( ApiResponse.ok(
service.getAudioContentOrderList( service.getAudioContentOrderList(
orderType = orderType,
member = member, member = member,
offset = pageable.offset, offset = pageable.offset,
limit = pageable.pageSize.toLong() limit = pageable.pageSize.toLong()

View File

@ -20,6 +20,7 @@ interface OrderQueryRepository {
fun isExistOrderedAndOrderType(memberId: Long, contentId: Long): Pair<Boolean, OrderType?> fun isExistOrderedAndOrderType(memberId: Long, contentId: Long): Pair<Boolean, OrderType?>
fun getAudioContentRemainingTime(memberId: Long, contentId: Long, timezone: String): String fun getAudioContentRemainingTime(memberId: Long, contentId: Long, timezone: String): String
fun getAudioContentOrderList( fun getAudioContentOrderList(
orderType: OrderType?,
dateTime: LocalDateTime, dateTime: LocalDateTime,
coverImageHost: String, coverImageHost: String,
memberId: Long, memberId: Long,
@ -27,7 +28,7 @@ interface OrderQueryRepository {
limit: Long = 10 limit: Long = 10
): List<GetAudioContentOrderListItem> ): List<GetAudioContentOrderListItem>
fun totalAudioContentOrderListCount(memberId: Long, dateTime: LocalDateTime): Int fun totalAudioContentOrderListCount(orderType: OrderType?, memberId: Long, dateTime: LocalDateTime): Int
fun getAudioContentMainOrderList( fun getAudioContentMainOrderList(
dateTime: LocalDateTime, dateTime: LocalDateTime,
coverImageHost: String, coverImageHost: String,
@ -117,12 +118,41 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde
} }
override fun getAudioContentOrderList( override fun getAudioContentOrderList(
orderType: OrderType?,
dateTime: LocalDateTime, dateTime: LocalDateTime,
coverImageHost: String, coverImageHost: String,
memberId: Long, memberId: Long,
offset: Long, offset: Long,
limit: Long limit: Long
): List<GetAudioContentOrderListItem> { ): List<GetAudioContentOrderListItem> {
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 return queryFactory
.select( .select(
QGetAudioContentOrderListItem( QGetAudioContentOrderListItem(
@ -141,39 +171,45 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde
) )
.from(order) .from(order)
.innerJoin(order.audioContent, audioContent) .innerJoin(order.audioContent, audioContent)
.where( .where(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))
)
)
)
.offset(offset) .offset(offset)
.limit(limit) .limit(limit)
.orderBy(order.createdAt.desc()) .orderBy(order.createdAt.desc())
.fetch() .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) return queryFactory.select(order.id)
.from(order) .from(order)
.where( .where(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))
)
)
)
.fetch() .fetch()
.size .size
} }

View File

@ -90,15 +90,18 @@ class OrderService(
} }
fun getAudioContentOrderList( fun getAudioContentOrderList(
orderType: OrderType? = null,
member: Member, member: Member,
offset: Long, offset: Long,
limit: Long limit: Long
): GetAudioContentOrderListResponse { ): GetAudioContentOrderListResponse {
val totalCount = repository.totalAudioContentOrderListCount( val totalCount = repository.totalAudioContentOrderListCount(
orderType = orderType,
memberId = member.id!!, memberId = member.id!!,
dateTime = LocalDateTime.now() dateTime = LocalDateTime.now()
) )
val orderItems = repository.getAudioContentOrderList( val orderItems = repository.getAudioContentOrderList(
orderType = orderType,
dateTime = LocalDateTime.now(), dateTime = LocalDateTime.now(),
coverImageHost = audioContentCoverImageHost, coverImageHost = audioContentCoverImageHost,
memberId = member.id!!, memberId = member.id!!,