콘텐츠 상세

- 이전화/다음화 추가
This commit is contained in:
Klaus 2025-04-01 16:21:32 +09:00
parent ae439b7e64
commit 198ecddc89
3 changed files with 46 additions and 2 deletions

View File

@ -22,6 +22,7 @@ import kr.co.vividnext.sodalive.content.pin.QPinContent.pinContent
import kr.co.vividnext.sodalive.content.playlist.AudioContentPlaylistContent import kr.co.vividnext.sodalive.content.playlist.AudioContentPlaylistContent
import kr.co.vividnext.sodalive.content.playlist.QAudioContentPlaylistContent import kr.co.vividnext.sodalive.content.playlist.QAudioContentPlaylistContent
import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme.audioContentTheme import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme.audioContentTheme
import kr.co.vividnext.sodalive.creator.admin.content.series.QSeriesContent.seriesContent
import kr.co.vividnext.sodalive.event.QEvent.event import kr.co.vividnext.sodalive.event.QEvent.event
import kr.co.vividnext.sodalive.member.MemberRole import kr.co.vividnext.sodalive.member.MemberRole
import kr.co.vividnext.sodalive.member.QMember.member import kr.co.vividnext.sodalive.member.QMember.member
@ -163,6 +164,8 @@ interface AudioContentQueryRepository {
fun fetchContentForPlaylist(contentIdList: List<Long>): List<AudioContentPlaylistContent> fun fetchContentForPlaylist(contentIdList: List<Long>): List<AudioContentPlaylistContent>
fun getCoverImageById(id: Long): String? fun getCoverImageById(id: Long): String?
fun findPreviousContent(title: String): OtherContentResponse?
fun findNextContent(title: String): OtherContentResponse?
} }
@Repository @Repository
@ -1152,4 +1155,38 @@ class AudioContentQueryRepositoryImpl(
.where(audioContent.id.eq(id)) .where(audioContent.id.eq(id))
.fetchFirst() .fetchFirst()
} }
override fun findPreviousContent(title: String): OtherContentResponse? {
return queryFactory
.select(
QOtherContentResponse(
audioContent.id,
audioContent.title,
audioContent.coverImage.prepend("$imageHost/")
)
)
.from(seriesContent)
.innerJoin(seriesContent.content, audioContent)
.where(audioContent.title.lt(title))
.orderBy(audioContent.title.asc())
.limit(1)
.fetchFirst()
}
override fun findNextContent(title: String): OtherContentResponse? {
return queryFactory
.select(
QOtherContentResponse(
audioContent.id,
audioContent.title,
audioContent.coverImage.prepend("$imageHost/")
)
)
.from(seriesContent)
.innerJoin(seriesContent.content, audioContent)
.where(audioContent.title.gt(title))
.orderBy(audioContent.title.asc())
.limit(1)
.fetchFirst()
}
} }

View File

@ -473,6 +473,9 @@ class AudioContentService(
null null
} }
val previousContent = repository.findPreviousContent(title = audioContent.title)
val nextContent = repository.findNextContent(title = audioContent.title)
if ( if (
!isExistsAudioContent && !isExistsAudioContent &&
!audioContent.isActive && !audioContent.isActive &&
@ -666,7 +669,9 @@ class AudioContentService(
isFollowing = creatorFollowing?.isFollow ?: false, isFollowing = creatorFollowing?.isFollow ?: false,
isFollow = creatorFollowing?.isFollow ?: false, isFollow = creatorFollowing?.isFollow ?: false,
isNotify = creatorFollowing?.isNotify ?: false isNotify = creatorFollowing?.isNotify ?: false
) ),
previousContent = previousContent,
nextContent = nextContent
) )
} }

View File

@ -35,7 +35,9 @@ data class GetAudioContentDetailResponse(
val commentCount: Int, val commentCount: Int,
val isPin: Boolean, val isPin: Boolean,
val isAvailablePin: Boolean, val isAvailablePin: Boolean,
val creator: AudioContentCreator val creator: AudioContentCreator,
val previousContent: OtherContentResponse?,
val nextContent: OtherContentResponse?
) )
data class OtherContentResponse @QueryProjection constructor( data class OtherContentResponse @QueryProjection constructor(