콘텐츠 테마 저장시 번역 API로 자동 번역 하는 기능 추가
This commit is contained in:
@@ -7,6 +7,9 @@ import kr.co.vividnext.sodalive.chat.character.translate.AiCharacterTranslationR
|
||||
import kr.co.vividnext.sodalive.chat.character.translate.TranslatedAiCharacterBackground
|
||||
import kr.co.vividnext.sodalive.chat.character.translate.TranslatedAiCharacterPersonality
|
||||
import kr.co.vividnext.sodalive.content.AudioContentRepository
|
||||
import kr.co.vividnext.sodalive.content.theme.AudioContentThemeQueryRepository
|
||||
import kr.co.vividnext.sodalive.content.theme.translation.ContentThemeTranslation
|
||||
import kr.co.vividnext.sodalive.content.theme.translation.ContentThemeTranslationRepository
|
||||
import kr.co.vividnext.sodalive.content.translation.ContentTranslation
|
||||
import kr.co.vividnext.sodalive.content.translation.ContentTranslationPayload
|
||||
import kr.co.vividnext.sodalive.content.translation.ContentTranslationRepository
|
||||
@@ -21,7 +24,8 @@ import org.springframework.transaction.event.TransactionalEventListener
|
||||
|
||||
enum class LanguageTranslationTargetType {
|
||||
CONTENT,
|
||||
CHARACTER
|
||||
CHARACTER,
|
||||
CONTENT_THEME
|
||||
}
|
||||
|
||||
class LanguageTranslationEvent(
|
||||
@@ -33,9 +37,11 @@ class LanguageTranslationEvent(
|
||||
class LanguageTranslationListener(
|
||||
private val audioContentRepository: AudioContentRepository,
|
||||
private val chatCharacterRepository: ChatCharacterRepository,
|
||||
private val audioContentThemeRepository: AudioContentThemeQueryRepository,
|
||||
|
||||
private val contentTranslationRepository: ContentTranslationRepository,
|
||||
private val aiCharacterTranslationRepository: AiCharacterTranslationRepository,
|
||||
private val contentThemeTranslationRepository: ContentThemeTranslationRepository,
|
||||
|
||||
private val translationService: PapagoTranslationService
|
||||
) {
|
||||
@@ -46,6 +52,7 @@ class LanguageTranslationListener(
|
||||
when (event.targetType) {
|
||||
LanguageTranslationTargetType.CONTENT -> handleContentLanguageTranslation(event)
|
||||
LanguageTranslationTargetType.CHARACTER -> handleCharacterLanguageTranslation(event)
|
||||
LanguageTranslationTargetType.CONTENT_THEME -> handleContentThemeLanguageTranslation(event)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -202,4 +209,43 @@ class LanguageTranslationListener(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleContentThemeLanguageTranslation(event: LanguageTranslationEvent) {
|
||||
val contentTheme = audioContentThemeRepository.findThemeByIdAndActive(event.id) ?: return
|
||||
|
||||
val sourceLanguage = "ko"
|
||||
getTranslatableLanguageCodes(sourceLanguage).forEach { locale ->
|
||||
val texts = mutableListOf<String>()
|
||||
texts.add(contentTheme.theme)
|
||||
|
||||
val response = translationService.translate(
|
||||
request = TranslateRequest(
|
||||
texts = texts,
|
||||
sourceLanguage = sourceLanguage,
|
||||
targetLanguage = locale
|
||||
)
|
||||
)
|
||||
|
||||
val translatedTexts = response.translatedText
|
||||
if (translatedTexts.size == texts.size) {
|
||||
val translatedTheme = translatedTexts[0]
|
||||
|
||||
val existing = contentThemeTranslationRepository
|
||||
.findByContentThemeIdAndLocale(contentTheme.id!!, locale)
|
||||
|
||||
if (existing == null) {
|
||||
contentThemeTranslationRepository.save(
|
||||
ContentThemeTranslation(
|
||||
contentThemeId = contentTheme.id!!,
|
||||
locale = locale,
|
||||
theme = translatedTheme
|
||||
)
|
||||
)
|
||||
} else {
|
||||
existing.theme = translatedTheme
|
||||
contentThemeTranslationRepository.save(existing)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user