feat(creator-channel): 오디오 목록 제목 번역을 적용한다
This commit is contained in:
+23
-2
@@ -12,6 +12,7 @@ import kr.co.vividnext.sodalive.content.order.QOrder.order
|
||||
import kr.co.vividnext.sodalive.content.series.translation.QSeriesTranslation
|
||||
import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme.audioContentTheme
|
||||
import kr.co.vividnext.sodalive.content.theme.translation.QContentThemeTranslation
|
||||
import kr.co.vividnext.sodalive.content.translation.QContentTranslation
|
||||
import kr.co.vividnext.sodalive.creator.admin.content.series.QSeries.series
|
||||
import kr.co.vividnext.sodalive.creator.admin.content.series.QSeriesContent.seriesContent
|
||||
import kr.co.vividnext.sodalive.member.QMember.member
|
||||
@@ -173,10 +174,11 @@ class DefaultCreatorChannelAudioQueryRepository(
|
||||
val rows = findAudioContentRows(creatorId, viewerId, themeId, now, canViewAdultContent, sort, offset, limit)
|
||||
val contentIds = rows.map { itAudioId(it) }
|
||||
val firstContentId = firstAudioContentId(creatorId, now, canViewAdultContent)
|
||||
val titlesByContentId = audioTitlesByContentIds(contentIds, locale)
|
||||
val seriesByContentId = audioSeriesByContentIds(contentIds, locale)
|
||||
val orderStatesByContentId = orderStatesByContentIds(viewerId, contentIds, now)
|
||||
|
||||
return rows.map { it.toAudioRecord(firstContentId, seriesByContentId, orderStatesByContentId) }
|
||||
return rows.map { it.toAudioRecord(firstContentId, titlesByContentId, seriesByContentId, orderStatesByContentId) }
|
||||
}
|
||||
|
||||
private fun findAudioContentRows(
|
||||
@@ -307,6 +309,7 @@ class DefaultCreatorChannelAudioQueryRepository(
|
||||
|
||||
private fun Tuple.toAudioRecord(
|
||||
firstContentId: Long?,
|
||||
titlesByContentId: Map<Long, String>,
|
||||
seriesByContentId: Map<Long, AudioSeriesSummary>,
|
||||
orderStatesByContentId: Map<Long, AudioOrderState>
|
||||
): CreatorChannelAudioContentRecord {
|
||||
@@ -315,7 +318,7 @@ class DefaultCreatorChannelAudioQueryRepository(
|
||||
val orderState = orderStatesByContentId[audioContentId]
|
||||
return CreatorChannelAudioContentRecord(
|
||||
audioContentId = audioContentId,
|
||||
title = get(audioContent.title)!!,
|
||||
title = titlesByContentId[audioContentId] ?: get(audioContent.title)!!,
|
||||
duration = get(audioContent.duration),
|
||||
imagePath = get(audioContent.coverImage),
|
||||
price = get(audioContent.price)!!,
|
||||
@@ -329,6 +332,24 @@ class DefaultCreatorChannelAudioQueryRepository(
|
||||
)
|
||||
}
|
||||
|
||||
private fun audioTitlesByContentIds(contentIds: List<Long>, locale: String): Map<Long, String> {
|
||||
if (contentIds.isEmpty()) return emptyMap()
|
||||
val contentTranslation = QContentTranslation("audioContentTranslation")
|
||||
return queryFactory
|
||||
.select(contentTranslation.contentId, contentTranslation.renderedPayload)
|
||||
.from(contentTranslation)
|
||||
.where(
|
||||
contentTranslation.contentId.`in`(contentIds),
|
||||
contentTranslation.locale.eq(locale)
|
||||
)
|
||||
.fetch()
|
||||
.mapNotNull {
|
||||
val title = it.get(contentTranslation.renderedPayload)?.title.takeUnless(String?::isNullOrBlank)
|
||||
title?.let { translatedTitle -> it.get(contentTranslation.contentId)!! to translatedTitle }
|
||||
}
|
||||
.toMap()
|
||||
}
|
||||
|
||||
private fun firstAudioContentId(
|
||||
creatorId: Long,
|
||||
now: LocalDateTime,
|
||||
|
||||
Reference in New Issue
Block a user