AI 캐릭터, 콘텐츠 등록/수정 시 번역 데이터 생성

This commit is contained in:
2025-12-12 04:52:02 +09:00
parent 5d925e98e0
commit 8fec60db11
7 changed files with 266 additions and 4 deletions

View File

@@ -21,12 +21,16 @@ import kr.co.vividnext.sodalive.content.order.OrderType
import kr.co.vividnext.sodalive.content.pin.PinContent
import kr.co.vividnext.sodalive.content.pin.PinContentRepository
import kr.co.vividnext.sodalive.content.theme.AudioContentThemeQueryRepository
import kr.co.vividnext.sodalive.content.translation.ContentTranslation
import kr.co.vividnext.sodalive.content.translation.ContentTranslationPayload
import kr.co.vividnext.sodalive.content.translation.ContentTranslationRepository
import kr.co.vividnext.sodalive.content.translation.TranslatedContent
import kr.co.vividnext.sodalive.explorer.ExplorerQueryRepository
import kr.co.vividnext.sodalive.extensions.convertLocalDateTime
import kr.co.vividnext.sodalive.fcm.FcmEvent
import kr.co.vividnext.sodalive.fcm.FcmEventType
import kr.co.vividnext.sodalive.i18n.translation.LanguageTranslationEvent
import kr.co.vividnext.sodalive.i18n.translation.LanguageTranslationTargetType
import kr.co.vividnext.sodalive.i18n.translation.PapagoTranslationService
import kr.co.vividnext.sodalive.i18n.translation.TranslateRequest
import kr.co.vividnext.sodalive.member.Member
@@ -167,6 +171,13 @@ class AudioContentService(
audioContent.audioContentHashTags.addAll(newAudioContentHashTagList)
}
applicationEventPublisher.publishEvent(
LanguageTranslationEvent(
id = request.contentId,
targetType = LanguageTranslationTargetType.CONTENT
)
)
}
@Transactional
@@ -357,6 +368,13 @@ class AudioContentService(
)
}
applicationEventPublisher.publishEvent(
LanguageTranslationEvent(
id = audioContent.id!!,
targetType = LanguageTranslationTargetType.CONTENT
)
)
return CreateAudioContentResponse(contentId = audioContent.id!!)
}
@@ -785,14 +803,14 @@ class AudioContentService(
val translatedDetail = translatedTexts[index++]
val translatedTags = translatedTexts[index]
val payload = kr.co.vividnext.sodalive.content.translation.ContentTranslationPayload(
val payload = ContentTranslationPayload(
title = translatedTitle,
detail = translatedDetail,
tags = translatedTags
)
contentTranslationRepository.save(
kr.co.vividnext.sodalive.content.translation.ContentTranslation(
ContentTranslation(
contentId = audioContent.id!!,
locale = locale,
renderedPayload = payload

View File

@@ -4,8 +4,11 @@ import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentRepositor
import kr.co.vividnext.sodalive.chat.character.repository.ChatCharacterRepository
import kr.co.vividnext.sodalive.content.comment.AudioContentCommentRepository
import kr.co.vividnext.sodalive.explorer.profile.CreatorCheersRepository
import kr.co.vividnext.sodalive.i18n.translation.LanguageTranslationEvent
import kr.co.vividnext.sodalive.i18n.translation.LanguageTranslationTargetType
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.ApplicationEventPublisher
import org.springframework.http.HttpEntity
import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
@@ -47,6 +50,8 @@ class LanguageDetectListener(
private val characterCommentRepository: CharacterCommentRepository,
private val creatorCheersRepository: CreatorCheersRepository,
private val applicationEventPublisher: ApplicationEventPublisher,
@Value("\${cloud.naver.papago-client-id}")
private val papagoClientId: String,
@@ -102,6 +107,13 @@ class LanguageDetectListener(
character.languageCode = langCode
chatCharacterRepository.save(character)
applicationEventPublisher.publishEvent(
LanguageTranslationEvent(
id = characterId,
targetType = LanguageTranslationTargetType.CHARACTER
)
)
log.info(
"[PapagoLanguageDetect] languageCode updated from Papago. characterId={}, langCode={}",
characterId,
@@ -135,6 +147,13 @@ class LanguageDetectListener(
// REQUIRES_NEW 트랜잭션 내에서 변경 내용을 저장한다.
audioContentRepository.save(audioContent)
applicationEventPublisher.publishEvent(
LanguageTranslationEvent(
id = contentId,
targetType = LanguageTranslationTargetType.CONTENT
)
)
log.info(
"[PapagoLanguageDetect] languageCode updated from Papago. contentId={}, langCode={}",
contentId,

View File

@@ -23,7 +23,7 @@ class ContentTranslation(
@Column(columnDefinition = "json")
@Convert(converter = ContentTranslationPayloadConverter::class)
val renderedPayload: ContentTranslationPayload
var renderedPayload: ContentTranslationPayload
) : BaseEntity()
data class ContentTranslationPayload(