콘텐츠 상세

- 한정판 응답값 추가
This commit is contained in:
Klaus 2024-03-26 20:04:20 +09:00
parent 2d1f333095
commit 327f7ad341
3 changed files with 41 additions and 4 deletions

View File

@ -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,

View File

@ -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,

View File

@ -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<LimitedEditionOrder, Long>, 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()
}
}