feat(creator-cheers): 팬 Talk 응원글 등록 시 언어 코드가 null인 경우 파파고 언어 감지 API를 호출하는 기능 추가
This commit is contained in:
@@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.content
|
|||||||
|
|
||||||
import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentRepository
|
import kr.co.vividnext.sodalive.chat.character.comment.CharacterCommentRepository
|
||||||
import kr.co.vividnext.sodalive.content.comment.AudioContentCommentRepository
|
import kr.co.vividnext.sodalive.content.comment.AudioContentCommentRepository
|
||||||
|
import kr.co.vividnext.sodalive.explorer.profile.CreatorCheersRepository
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
import org.springframework.beans.factory.annotation.Value
|
import org.springframework.beans.factory.annotation.Value
|
||||||
import org.springframework.http.HttpEntity
|
import org.springframework.http.HttpEntity
|
||||||
@@ -22,7 +23,8 @@ import org.springframework.web.client.RestTemplate
|
|||||||
enum class LanguageDetectTargetType {
|
enum class LanguageDetectTargetType {
|
||||||
CONTENT,
|
CONTENT,
|
||||||
COMMENT,
|
COMMENT,
|
||||||
CHARACTER_COMMENT
|
CHARACTER_COMMENT,
|
||||||
|
CREATOR_CHEERS
|
||||||
}
|
}
|
||||||
|
|
||||||
class LanguageDetectEvent(
|
class LanguageDetectEvent(
|
||||||
@@ -40,6 +42,7 @@ class LanguageDetectListener(
|
|||||||
private val audioContentRepository: AudioContentRepository,
|
private val audioContentRepository: AudioContentRepository,
|
||||||
private val audioContentCommentRepository: AudioContentCommentRepository,
|
private val audioContentCommentRepository: AudioContentCommentRepository,
|
||||||
private val characterCommentRepository: CharacterCommentRepository,
|
private val characterCommentRepository: CharacterCommentRepository,
|
||||||
|
private val creatorCheersRepository: CreatorCheersRepository,
|
||||||
|
|
||||||
@Value("\${cloud.naver.papago-client-id}")
|
@Value("\${cloud.naver.papago-client-id}")
|
||||||
private val papagoClientId: String,
|
private val papagoClientId: String,
|
||||||
@@ -67,6 +70,7 @@ class LanguageDetectListener(
|
|||||||
LanguageDetectTargetType.CONTENT -> handleContentLanguageDetect(event)
|
LanguageDetectTargetType.CONTENT -> handleContentLanguageDetect(event)
|
||||||
LanguageDetectTargetType.COMMENT -> handleCommentLanguageDetect(event)
|
LanguageDetectTargetType.COMMENT -> handleCommentLanguageDetect(event)
|
||||||
LanguageDetectTargetType.CHARACTER_COMMENT -> handleCharacterCommentLanguageDetect(event)
|
LanguageDetectTargetType.CHARACTER_COMMENT -> handleCharacterCommentLanguageDetect(event)
|
||||||
|
LanguageDetectTargetType.CREATOR_CHEERS -> handleCreatorCheersLanguageDetect(event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,6 +170,37 @@ class LanguageDetectListener(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleCreatorCheersLanguageDetect(event: LanguageDetectEvent) {
|
||||||
|
val cheersId = event.id
|
||||||
|
|
||||||
|
val cheers = creatorCheersRepository.findById(cheersId).orElse(null)
|
||||||
|
if (cheers == null) {
|
||||||
|
log.warn("[PapagoLanguageDetect] CreatorCheers not found. cheersId={}", cheersId)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 이미 언어 코드가 설정된 경우 호출하지 않음
|
||||||
|
if (!cheers.languageCode.isNullOrBlank()) {
|
||||||
|
log.debug(
|
||||||
|
"[PapagoLanguageDetect] languageCode already set. Skip language detection. cheersId={}, languageCode={}",
|
||||||
|
cheersId,
|
||||||
|
cheers.languageCode
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val langCode = requestPapagoLanguageCode(event.query, cheersId) ?: return
|
||||||
|
|
||||||
|
cheers.languageCode = langCode
|
||||||
|
creatorCheersRepository.save(cheers)
|
||||||
|
|
||||||
|
log.info(
|
||||||
|
"[PapagoLanguageDetect] languageCode updated from Papago. cheersId={}, langCode={}",
|
||||||
|
cheersId,
|
||||||
|
langCode
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun requestPapagoLanguageCode(query: String, targetIdForLog: Long): String? {
|
private fun requestPapagoLanguageCode(query: String, targetIdForLog: Long): String? {
|
||||||
return try {
|
return try {
|
||||||
val headers = HttpHeaders().apply {
|
val headers = HttpHeaders().apply {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package kr.co.vividnext.sodalive.explorer
|
|||||||
import kr.co.vividnext.sodalive.common.SodaException
|
import kr.co.vividnext.sodalive.common.SodaException
|
||||||
import kr.co.vividnext.sodalive.content.AudioContentService
|
import kr.co.vividnext.sodalive.content.AudioContentService
|
||||||
import kr.co.vividnext.sodalive.content.ContentType
|
import kr.co.vividnext.sodalive.content.ContentType
|
||||||
|
import kr.co.vividnext.sodalive.content.LanguageDetectEvent
|
||||||
|
import kr.co.vividnext.sodalive.content.LanguageDetectTargetType
|
||||||
import kr.co.vividnext.sodalive.content.SortType
|
import kr.co.vividnext.sodalive.content.SortType
|
||||||
import kr.co.vividnext.sodalive.content.series.ContentSeriesService
|
import kr.co.vividnext.sodalive.content.series.ContentSeriesService
|
||||||
import kr.co.vividnext.sodalive.explorer.follower.GetFollowerListResponse
|
import kr.co.vividnext.sodalive.explorer.follower.GetFollowerListResponse
|
||||||
@@ -456,6 +458,17 @@ class ExplorerService(
|
|||||||
}
|
}
|
||||||
|
|
||||||
cheersRepository.save(cheers)
|
cheersRepository.save(cheers)
|
||||||
|
|
||||||
|
// 언어 코드가 지정되지 않은 경우, 파파고 언어 감지 API를 통해 비동기로 언어를 식별한다.
|
||||||
|
if (request.languageCode.isNullOrBlank()) {
|
||||||
|
applicationEventPublisher.publishEvent(
|
||||||
|
LanguageDetectEvent(
|
||||||
|
id = cheers.id!!,
|
||||||
|
query = request.content,
|
||||||
|
targetType = LanguageDetectTargetType.CREATOR_CHEERS
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCreatorProfileCheers(
|
fun getCreatorProfileCheers(
|
||||||
|
|||||||
Reference in New Issue
Block a user