번역 이벤트 커밋 후 처리 분기
This commit is contained in:
@@ -352,7 +352,8 @@ class AdminChatCharacterController(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = request.id,
|
id = request.id,
|
||||||
targetType = LanguageTranslationTargetType.CHARACTER
|
targetType = LanguageTranslationTargetType.CHARACTER,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -95,7 +95,8 @@ class AdminOriginalWorkService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = originalWork.id!!,
|
id = originalWork.id!!,
|
||||||
targetType = LanguageTranslationTargetType.ORIGINAL_WORK
|
targetType = LanguageTranslationTargetType.ORIGINAL_WORK,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -165,7 +166,8 @@ class AdminOriginalWorkService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = ow.id!!,
|
id = ow.id!!,
|
||||||
targetType = LanguageTranslationTargetType.ORIGINAL_WORK
|
targetType = LanguageTranslationTargetType.ORIGINAL_WORK,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,8 @@ class AdminContentThemeService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = savedTheme.id!!,
|
id = savedTheme.id!!,
|
||||||
targetType = LanguageTranslationTargetType.CONTENT_THEME
|
targetType = LanguageTranslationTargetType.CONTENT_THEME,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -183,7 +183,8 @@ class AudioContentService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = request.contentId,
|
id = request.contentId,
|
||||||
targetType = LanguageTranslationTargetType.CONTENT
|
targetType = LanguageTranslationTargetType.CONTENT,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,8 @@ class CategoryService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = request.categoryId,
|
id = request.categoryId,
|
||||||
targetType = LanguageTranslationTargetType.CREATOR_CONTENT_CATEGORY
|
targetType = LanguageTranslationTargetType.CREATOR_CONTENT_CATEGORY,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -158,7 +159,7 @@ class CategoryService(
|
|||||||
val sourceLang = entity.languageCode
|
val sourceLang = entity.languageCode
|
||||||
if (!sourceLang.isNullOrBlank() && sourceLang != locale) {
|
if (!sourceLang.isNullOrBlank() && sourceLang != locale) {
|
||||||
val existing = translations[item.categoryId]
|
val existing = translations[item.categoryId]
|
||||||
if (existing != null && !existing.category.isNullOrBlank()) {
|
if (existing != null && existing.category.isNotBlank()) {
|
||||||
result.add(GetCategoryListResponse(categoryId = item.categoryId, category = existing.category))
|
result.add(GetCategoryListResponse(categoryId = item.categoryId, category = existing.category))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -203,7 +203,8 @@ class CreatorAdminContentService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = request.id,
|
id = request.id,
|
||||||
targetType = LanguageTranslationTargetType.CONTENT
|
targetType = LanguageTranslationTargetType.CONTENT,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,7 +117,8 @@ class CreatorAdminContentSeriesService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = series.id!!,
|
id = series.id!!,
|
||||||
targetType = LanguageTranslationTargetType.SERIES
|
targetType = LanguageTranslationTargetType.SERIES,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -211,7 +212,8 @@ class CreatorAdminContentSeriesService(
|
|||||||
applicationEventPublisher.publishEvent(
|
applicationEventPublisher.publishEvent(
|
||||||
LanguageTranslationEvent(
|
LanguageTranslationEvent(
|
||||||
id = series.id!!,
|
id = series.id!!,
|
||||||
targetType = LanguageTranslationTargetType.SERIES
|
targetType = LanguageTranslationTargetType.SERIES,
|
||||||
|
waitTransactionCommit = true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import kr.co.vividnext.sodalive.content.translation.ContentTranslation
|
|||||||
import kr.co.vividnext.sodalive.content.translation.ContentTranslationPayload
|
import kr.co.vividnext.sodalive.content.translation.ContentTranslationPayload
|
||||||
import kr.co.vividnext.sodalive.content.translation.ContentTranslationRepository
|
import kr.co.vividnext.sodalive.content.translation.ContentTranslationRepository
|
||||||
import kr.co.vividnext.sodalive.i18n.translation.PapagoTranslationService.Companion.getTranslatableLanguageCodes
|
import kr.co.vividnext.sodalive.i18n.translation.PapagoTranslationService.Companion.getTranslatableLanguageCodes
|
||||||
|
import org.springframework.context.event.EventListener
|
||||||
import org.springframework.data.repository.findByIdOrNull
|
import org.springframework.data.repository.findByIdOrNull
|
||||||
import org.springframework.scheduling.annotation.Async
|
import org.springframework.scheduling.annotation.Async
|
||||||
import org.springframework.stereotype.Component
|
import org.springframework.stereotype.Component
|
||||||
@@ -51,7 +52,8 @@ enum class LanguageTranslationTargetType {
|
|||||||
|
|
||||||
class LanguageTranslationEvent(
|
class LanguageTranslationEvent(
|
||||||
val id: Long,
|
val id: Long,
|
||||||
val targetType: LanguageTranslationTargetType
|
val targetType: LanguageTranslationTargetType,
|
||||||
|
val waitTransactionCommit: Boolean = false
|
||||||
)
|
)
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -76,9 +78,20 @@ class LanguageTranslationListener(
|
|||||||
private val translationService: PapagoTranslationService
|
private val translationService: PapagoTranslationService
|
||||||
) {
|
) {
|
||||||
@Async
|
@Async
|
||||||
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
|
@EventListener(condition = "!#event.waitTransactionCommit")
|
||||||
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||||
fun translation(event: LanguageTranslationEvent) {
|
fun translationImmediate(event: LanguageTranslationEvent) {
|
||||||
|
processTranslation(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Async
|
||||||
|
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT, condition = "#event.waitTransactionCommit")
|
||||||
|
@Transactional(propagation = Propagation.REQUIRES_NEW)
|
||||||
|
fun translationAfterCommit(event: LanguageTranslationEvent) {
|
||||||
|
processTranslation(event)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun processTranslation(event: LanguageTranslationEvent) {
|
||||||
when (event.targetType) {
|
when (event.targetType) {
|
||||||
LanguageTranslationTargetType.CONTENT -> handleContentLanguageTranslation(event)
|
LanguageTranslationTargetType.CONTENT -> handleContentLanguageTranslation(event)
|
||||||
LanguageTranslationTargetType.CHARACTER -> handleCharacterLanguageTranslation(event)
|
LanguageTranslationTargetType.CHARACTER -> handleCharacterLanguageTranslation(event)
|
||||||
@@ -92,8 +105,7 @@ class LanguageTranslationListener(
|
|||||||
|
|
||||||
private fun handleContentLanguageTranslation(event: LanguageTranslationEvent) {
|
private fun handleContentLanguageTranslation(event: LanguageTranslationEvent) {
|
||||||
val audioContent = audioContentRepository.findByIdOrNull(event.id) ?: return
|
val audioContent = audioContentRepository.findByIdOrNull(event.id) ?: return
|
||||||
val languageCode = audioContent.languageCode
|
val languageCode = audioContent.languageCode ?: return
|
||||||
if (languageCode != null) return
|
|
||||||
|
|
||||||
getTranslatableLanguageCodes(languageCode).forEach { locale ->
|
getTranslatableLanguageCodes(languageCode).forEach { locale ->
|
||||||
val tags = audioContent.audioContentHashTags
|
val tags = audioContent.audioContentHashTags
|
||||||
@@ -150,8 +162,7 @@ class LanguageTranslationListener(
|
|||||||
|
|
||||||
private fun handleCharacterLanguageTranslation(event: LanguageTranslationEvent) {
|
private fun handleCharacterLanguageTranslation(event: LanguageTranslationEvent) {
|
||||||
val character = chatCharacterRepository.findByIdOrNull(event.id) ?: return
|
val character = chatCharacterRepository.findByIdOrNull(event.id) ?: return
|
||||||
val languageCode = character.languageCode
|
val languageCode = character.languageCode ?: return
|
||||||
if (languageCode != null) return
|
|
||||||
|
|
||||||
getTranslatableLanguageCodes(languageCode).forEach { locale ->
|
getTranslatableLanguageCodes(languageCode).forEach { locale ->
|
||||||
val personality = character.personalities.firstOrNull()
|
val personality = character.personalities.firstOrNull()
|
||||||
@@ -285,8 +296,7 @@ class LanguageTranslationListener(
|
|||||||
|
|
||||||
private fun handleSeriesLanguageTranslation(event: LanguageTranslationEvent) {
|
private fun handleSeriesLanguageTranslation(event: LanguageTranslationEvent) {
|
||||||
val series = seriesRepository.findByIdOrNull(event.id) ?: return
|
val series = seriesRepository.findByIdOrNull(event.id) ?: return
|
||||||
val languageCode = series.languageCode
|
val languageCode = series.languageCode ?: return
|
||||||
if (languageCode != null) return
|
|
||||||
|
|
||||||
getTranslatableLanguageCodes(languageCode).forEach { locale ->
|
getTranslatableLanguageCodes(languageCode).forEach { locale ->
|
||||||
val keywords = series.keywordList
|
val keywords = series.keywordList
|
||||||
@@ -385,8 +395,7 @@ class LanguageTranslationListener(
|
|||||||
|
|
||||||
private fun handleOriginalWorkLanguageTranslation(event: LanguageTranslationEvent) {
|
private fun handleOriginalWorkLanguageTranslation(event: LanguageTranslationEvent) {
|
||||||
val originalWork = originalWorkRepository.findByIdOrNull(event.id) ?: return
|
val originalWork = originalWorkRepository.findByIdOrNull(event.id) ?: return
|
||||||
val languageCode = originalWork.languageCode
|
val languageCode = originalWork.languageCode ?: return
|
||||||
if (languageCode != null) return
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* handleSeriesLanguageTranslation 참조하여 원작 번역 구현
|
* handleSeriesLanguageTranslation 참조하여 원작 번역 구현
|
||||||
|
|||||||
Reference in New Issue
Block a user