diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index 9a0ff30..86f5a31 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -14,6 +14,7 @@ import kr.co.vividnext.sodalive.content.like.AudioContentLikeRepository import kr.co.vividnext.sodalive.content.like.PutAudioContentLikeRequest import kr.co.vividnext.sodalive.content.like.PutAudioContentLikeResponse import kr.co.vividnext.sodalive.content.main.GetAudioContentRanking +import kr.co.vividnext.sodalive.content.order.LimitedEditionOrderRepository import kr.co.vividnext.sodalive.content.order.OrderRepository import kr.co.vividnext.sodalive.content.order.OrderType import kr.co.vividnext.sodalive.content.pin.PinContent @@ -47,6 +48,7 @@ class AudioContentService( private val blockMemberRepository: BlockMemberRepository, private val hashTagRepository: HashTagRepository, private val orderRepository: OrderRepository, + private val limitedEditionOrderRepository: LimitedEditionOrderRepository, private val themeQueryRepository: AudioContentThemeQueryRepository, private val playbackTrackingRepository: PlaybackTrackingRepository, private val commentRepository: AudioContentCommentRepository, @@ -465,11 +467,21 @@ class AudioContentService( contentId = audioContent.id!! ) + val existOrdered = isExistsBundleAudioContent || isExistsAudioContent + val orderSequence = if (existOrdered) { + limitedEditionOrderRepository.getOrderSequence( + contentId = audioContent.id!!, + memberId = member.id!! + ) + } else { + null + } + if ( - !isExistsAudioContent && - !isExistsBundleAudioContent && + !existOrdered && !audioContent.isActive && - audioContent.releaseDate == null + audioContent.releaseDate != null && + audioContent.releaseDate!! < LocalDateTime.now() ) { throw SodaException("잘못된 콘텐츠 입니다.\n다시 시도해 주세요.") } @@ -593,11 +605,14 @@ class AudioContentService( price = audioContent.price, duration = audioContent.duration ?: "", releaseDate = releaseDate, + totalContentCount = audioContent.limited, + remainingContentCount = audioContent.remaining, + orderSequence = orderSequence, isActivePreview = audioContent.isGeneratePreview, isAdult = audioContent.isAdult, isMosaic = audioContent.isAdult && member.auth == null, isOnlyRental = audioContent.isOnlyRental, - existOrdered = isExistsBundleAudioContent || isExistsAudioContent, + existOrdered = existOrdered, orderType = orderType, remainingTime = remainingTime, creatorOtherContentList = creatorOtherContentList, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt index 0049565..77e5ea7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentDetailResponse.kt @@ -15,6 +15,9 @@ data class GetAudioContentDetailResponse( val price: Int, val duration: String, val releaseDate: String?, + val totalContentCount: Int?, + val remainingContentCount: Int?, + val orderSequence: Int?, val isActivePreview: Boolean, val isAdult: Boolean, val isMosaic: Boolean, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/LimitedEditionOrderRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/LimitedEditionOrderRepository.kt index 7e7c576..a97cf49 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/LimitedEditionOrderRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/LimitedEditionOrderRepository.kt @@ -1,13 +1,18 @@ package kr.co.vividnext.sodalive.content.order import com.querydsl.jpa.impl.JPAQueryFactory +import kr.co.vividnext.sodalive.content.QAudioContent.audioContent import kr.co.vividnext.sodalive.content.order.QLimitedEditionOrder.limitedEditionOrder +import kr.co.vividnext.sodalive.content.order.QOrder.order +import kr.co.vividnext.sodalive.member.QMember.member import org.springframework.data.jpa.repository.JpaRepository interface LimitedEditionOrderRepository : JpaRepository, LimitedEditionOrderQueryRepository interface LimitedEditionOrderQueryRepository { fun getNextSequence(contentId: Long): Int + + fun getOrderSequence(contentId: Long, memberId: Long): Int? } class LimitedEditionOrderQueryRepositoryImpl( @@ -16,6 +21,7 @@ class LimitedEditionOrderQueryRepositoryImpl( override fun getNextSequence(contentId: Long): Int { val maxSequence = queryFactory.select(limitedEditionOrder.sequence) .from(limitedEditionOrder) + .innerJoin(limitedEditionOrder.audioContent, audioContent) .where(limitedEditionOrder.audioContent.id.eq(contentId)) .orderBy(limitedEditionOrder.sequence.desc()) .limit(1) @@ -27,4 +33,17 @@ class LimitedEditionOrderQueryRepositoryImpl( maxSequence + 1 } } + + override fun getOrderSequence(contentId: Long, memberId: Long): Int? { + return queryFactory.select(limitedEditionOrder.sequence) + .from(limitedEditionOrder) + .innerJoin(limitedEditionOrder.audioContent, audioContent) + .innerJoin(limitedEditionOrder.order, order) + .innerJoin(order.member, member) + .where( + limitedEditionOrder.audioContent.id.eq(contentId) + .and(limitedEditionOrder.order.member.id.eq(memberId)) + ) + .fetchFirst() + } }