feat(content-all): 전체 목록 제목 번역을 적용한다

This commit is contained in:
2026-09-09 23:18:44 +09:00
parent 328c433020
commit ee3dfc40d9
2 changed files with 91 additions and 9 deletions
@@ -12,6 +12,7 @@ import kr.co.vividnext.sodalive.content.order.QOrder
import kr.co.vividnext.sodalive.content.series.translation.QSeriesTranslation
import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme
import kr.co.vividnext.sodalive.content.theme.QAudioContentTheme.audioContentTheme
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.creator.admin.content.series.SeriesPublishedDaysOfWeek
@@ -58,6 +59,7 @@ class DefaultMainContentAllQueryRepository(
sort: ContentSort,
offset: Long,
limit: Int,
locale: String,
onlyPaid: Boolean,
onlyFree: Boolean,
onlyPointAvailable: Boolean
@@ -69,13 +71,14 @@ class DefaultMainContentAllQueryRepository(
val creatorIds = rows.map { it.get(audioContent.member.id)!! }.distinct()
val firstContentIdByCreatorId = firstAudioContentIds(creatorIds, now, canViewAdultContent)
val originalSeriesByContentId = originalSeriesFlags(contentIds)
val titlesByContentId = audioTitlesByContentIds(contentIds, locale)
return rows.map { row ->
val contentId = row.get(audioContent.id)!!
val creatorId = row.get(audioContent.member.id)!!
MainContentAllAudio(
audioContentId = contentId,
title = row.get(audioContent.title)!!,
title = titlesByContentId[contentId] ?: row.get(audioContent.title)!!,
imageUrl = row.get(audioContent.coverImage).toCdnUrl(cloudFrontHost),
price = row.get(audioContent.price)!!,
isAdult = row.get(audioContent.isAdult)!!,
@@ -343,6 +346,24 @@ class DefaultMainContentAllQueryRepository(
.associate { it.get(seriesContent.content.id)!! to it.get(series.isOriginal)!! }
}
private fun audioTitlesByContentIds(contentIds: List<Long>, locale: String): Map<Long, String> {
if (contentIds.isEmpty()) return emptyMap()
val contentTranslation = QContentTranslation("mainContentAllContentTranslation")
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 audioCondition(
memberId: Long?,
canViewAdultContent: Boolean,