Add translation support for audio content detail
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package kr.co.vividnext.sodalive.content.translation
|
||||
|
||||
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
|
||||
import com.fasterxml.jackson.module.kotlin.readValue
|
||||
import kr.co.vividnext.sodalive.common.BaseEntity
|
||||
import javax.persistence.AttributeConverter
|
||||
import javax.persistence.Column
|
||||
import javax.persistence.Convert
|
||||
import javax.persistence.Converter
|
||||
import javax.persistence.Entity
|
||||
import javax.persistence.Table
|
||||
import javax.persistence.UniqueConstraint
|
||||
|
||||
@Entity
|
||||
@Table(
|
||||
uniqueConstraints = [
|
||||
UniqueConstraint(columnNames = ["contentId", "locale"])
|
||||
]
|
||||
)
|
||||
class ContentTranslation(
|
||||
val contentId: Long,
|
||||
val locale: String,
|
||||
val translatedTitle: String,
|
||||
|
||||
@Column(columnDefinition = "json")
|
||||
@Convert(converter = ContentTranslationPayloadConverter::class)
|
||||
val renderedPayload: ContentTranslationPayload
|
||||
) : BaseEntity()
|
||||
|
||||
data class ContentTranslationPayload(
|
||||
val title: String,
|
||||
val detail: String,
|
||||
val tags: String
|
||||
)
|
||||
|
||||
@Converter(autoApply = false)
|
||||
class ContentTranslationPayloadConverter : AttributeConverter<ContentTranslationPayload, String> {
|
||||
|
||||
override fun convertToDatabaseColumn(attribute: ContentTranslationPayload?): String {
|
||||
if (attribute == null) return "{}"
|
||||
return objectMapper.writeValueAsString(attribute)
|
||||
}
|
||||
|
||||
override fun convertToEntityAttribute(dbData: String?): ContentTranslationPayload {
|
||||
if (dbData.isNullOrBlank()) {
|
||||
return ContentTranslationPayload(
|
||||
title = "",
|
||||
detail = "",
|
||||
tags = ""
|
||||
)
|
||||
}
|
||||
return objectMapper.readValue(dbData)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val objectMapper = jacksonObjectMapper()
|
||||
}
|
||||
}
|
||||
|
||||
data class TranslatedContent(
|
||||
val title: String?,
|
||||
val detail: String?,
|
||||
val tags: String?
|
||||
)
|
||||
@@ -0,0 +1,7 @@
|
||||
package kr.co.vividnext.sodalive.content.translation
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository
|
||||
|
||||
interface ContentTranslationRepository : JpaRepository<ContentTranslation, Long> {
|
||||
fun findByContentIdAndLocale(contentId: Long, locale: String): ContentTranslation?
|
||||
}
|
||||
Reference in New Issue
Block a user