From e3f65c8941ed0aef34980493736435adcbe5d2d0 Mon Sep 17 00:00:00 2001
From: Klaus <klaus@vividnext.co.kr>
Date: Wed, 29 May 2024 15:16:24 +0900
Subject: [PATCH] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0?=
 =?UTF-8?q?=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BD=98=ED=85=90?=
 =?UTF-8?q?=EC=B8=A0=20=EC=88=98=EC=A0=95=20-=20=EA=B0=80=EA=B2=A9=20?=
 =?UTF-8?q?=EC=88=98=EC=A0=95=EC=8B=9C=20=EB=B3=80=EA=B2=BD=EC=82=AC?=
 =?UTF-8?q?=ED=95=AD=20=EB=A1=9C=EA=B7=B8=EB=A1=9C=20=EA=B8=B0=EB=A1=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../sodalive/content/ContentPriceChangeLog.kt | 29 +++++++++++++++++++
 .../ContentPriceChangeLogRepository.kt        |  5 ++++
 .../content/CreatorAdminContentService.kt     |  8 +++++
 3 files changed, 42 insertions(+)
 create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLog.kt
 create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLogRepository.kt

diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLog.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLog.kt
new file mode 100644
index 0000000..0748f40
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLog.kt
@@ -0,0 +1,29 @@
+package kr.co.vividnext.sodalive.content
+
+import java.time.LocalDateTime
+import javax.persistence.Entity
+import javax.persistence.FetchType
+import javax.persistence.GeneratedValue
+import javax.persistence.GenerationType
+import javax.persistence.Id
+import javax.persistence.JoinColumn
+import javax.persistence.ManyToOne
+import javax.persistence.PrePersist
+
+@Entity
+data class ContentPriceChangeLog(
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    var id: Long? = null,
+    val prevPrice: Int,
+    var createdAt: LocalDateTime? = null
+) {
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "content_id", nullable = false)
+    var audioContent: AudioContent? = null
+
+    @PrePersist
+    fun prePersist() {
+        createdAt = LocalDateTime.now()
+    }
+}
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLogRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLogRepository.kt
new file mode 100644
index 0000000..b661467
--- /dev/null
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentPriceChangeLogRepository.kt
@@ -0,0 +1,5 @@
+package kr.co.vividnext.sodalive.content
+
+import org.springframework.data.jpa.repository.JpaRepository
+
+interface ContentPriceChangeLogRepository : JpaRepository<ContentPriceChangeLog, Long>
diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt
index 935f612..a99972c 100644
--- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt
+++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/CreatorAdminContentService.kt
@@ -5,6 +5,8 @@ import com.fasterxml.jackson.databind.ObjectMapper
 import kr.co.vividnext.sodalive.aws.cloudfront.AudioContentCloudFront
 import kr.co.vividnext.sodalive.aws.s3.S3Uploader
 import kr.co.vividnext.sodalive.common.SodaException
+import kr.co.vividnext.sodalive.content.ContentPriceChangeLog
+import kr.co.vividnext.sodalive.content.ContentPriceChangeLogRepository
 import kr.co.vividnext.sodalive.member.Member
 import kr.co.vividnext.sodalive.utils.generateFileName
 import org.springframework.beans.factory.annotation.Value
@@ -16,6 +18,7 @@ import org.springframework.web.multipart.MultipartFile
 @Service
 class CreatorAdminContentService(
     private val repository: CreatorAdminContentRepository,
+    private val contentPriceChangeLogRepository: ContentPriceChangeLogRepository,
     private val audioContentCloudFront: AudioContentCloudFront,
     private val objectMapper: ObjectMapper,
     private val s3Uploader: S3Uploader,
@@ -142,6 +145,11 @@ class CreatorAdminContentService(
 
         if (request.price != null) {
             if (request.price < 5) throw SodaException("콘텐츠의 최소금액은 5캔 입니다.")
+
+            val contentPriceChangeLog = ContentPriceChangeLog(prevPrice = audioContent.price)
+            contentPriceChangeLog.audioContent = audioContent
+            contentPriceChangeLogRepository.save(contentPriceChangeLog)
+
             audioContent.price = request.price
         }
     }