From f0aa0bc021549efe833343326a86df8fc6c627b7 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 29 May 2024 13:35:39 +0900 Subject: [PATCH 1/4] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EC=88=98=EC=A0=95=20-=20=EA=B0=80?= =?UTF-8?q?=EA=B2=A9=20=EC=88=98=EC=A0=95=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/kr/co/vividnext/sodalive/content/AudioContent.kt | 2 +- .../creator/admin/content/CreatorAdminContentService.kt | 5 +++++ .../admin/content/UpdateCreatorAdminContentRequest.kt | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContent.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContent.kt index 8536827..9d121eb 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContent.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContent.kt @@ -32,7 +32,7 @@ data class AudioContent( var title: String, @Column(columnDefinition = "TEXT", nullable = false) var detail: String, - val price: Int = 0, + var price: Int = 0, var releaseDate: LocalDateTime? = null, val limited: Int? = null, var remaining: Int? = null, 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 9d1438d..935f612 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 @@ -139,5 +139,10 @@ class CreatorAdminContentService( if (request.detail != null) { audioContent.detail = request.detail } + + if (request.price != null) { + if (request.price < 5) throw SodaException("콘텐츠의 최소금액은 5캔 입니다.") + audioContent.price = request.price + } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/UpdateCreatorAdminContentRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/UpdateCreatorAdminContentRequest.kt index b1f85e1..3360562 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/UpdateCreatorAdminContentRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/content/UpdateCreatorAdminContentRequest.kt @@ -4,6 +4,7 @@ data class UpdateCreatorAdminContentRequest( val id: Long, val title: String?, val detail: String?, + val price: Int?, val isAdult: Boolean?, val isActive: Boolean?, val isCommentAvailable: Boolean? From e3f65c8941ed0aef34980493736435adcbe5d2d0 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 29 May 2024 15:16:24 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20=EC=88=98=EC=A0=95=20-=20=EA=B0=80?= =?UTF-8?q?=EA=B2=A9=20=EC=88=98=EC=A0=95=EC=8B=9C=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EB=A1=9C=EA=B7=B8=EB=A1=9C=20=EA=B8=B0?= =?UTF-8?q?=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 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 } } From e41ec1c91c081fc1f00a2740e8046ed3b0d28310 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 30 May 2024 01:01:54 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=8B=9C?= =?UTF-8?q?=EA=B7=B8=EB=8B=88=EC=B2=98=20=EA=B4=80=EB=A6=AC=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20-=20=EB=93=B1=EB=A1=9D=EC=88=9C,=20?= =?UTF-8?q?=EC=BA=94=20=EB=82=AE=EC=9D=80=20=EC=88=9C,=20=EC=BA=94=20?= =?UTF-8?q?=EB=86=92=EC=9D=80=20=EC=88=9C=20=EC=A0=95=EB=A0=AC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CreatorAdminSignatureController.kt | 4 ++- .../CreatorAdminSignatureRepository.kt | 26 +++++++++++++++++-- .../signature/CreatorAdminSignatureService.kt | 8 +++++- .../live/signature/SignatureCanSortType.kt | 5 ++++ 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanSortType.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt index 22a3ed8..40f67ed 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.creator.admin.signature import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.live.signature.SignatureCanSortType import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable import org.springframework.security.access.prepost.PreAuthorize @@ -21,11 +22,12 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature @GetMapping fun getSignatureCanList( pageable: Pageable, + @RequestParam("sort-type", required = false) sortType: SignatureCanSortType = SignatureCanSortType.NEWEST, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(data = service.getSignatureList(pageable, memberId = member.id!!)) + ApiResponse.ok(data = service.getSignatureList(pageable, sortType, memberId = member.id!!)) } @PostMapping diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt index da27d01..9dd2c9e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureRepository.kt @@ -3,6 +3,7 @@ package kr.co.vividnext.sodalive.creator.admin.signature import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.live.signature.QSignatureCan.signatureCan import kr.co.vividnext.sodalive.live.signature.SignatureCan +import kr.co.vividnext.sodalive.live.signature.SignatureCanSortType import kr.co.vividnext.sodalive.member.QMember.member import org.springframework.data.jpa.repository.JpaRepository @@ -11,7 +12,13 @@ interface CreatorAdminSignatureRepository : JpaRepository, C interface CreatorAdminSignatureQueryRepository { fun getSignatureListTotalCount(memberId: Long): Int - fun getSignatureList(memberId: Long, imageHost: String, offset: Long, limit: Long): List + fun getSignatureList( + memberId: Long, + sortType: SignatureCanSortType, + imageHost: String, + offset: Long, + limit: Long + ): List fun findSignatureByIdOrNull(id: Long, memberId: Long): SignatureCan? } @@ -32,10 +39,25 @@ class CreatorAdminSignatureQueryRepositoryImpl( override fun getSignatureList( memberId: Long, + sortType: SignatureCanSortType, imageHost: String, offset: Long, limit: Long ): List { + val orderBy = when (sortType) { + SignatureCanSortType.CAN_HIGH -> { + signatureCan.can.desc() + } + + SignatureCanSortType.CAN_LOW -> { + signatureCan.can.asc() + } + + else -> { + signatureCan.id.desc() + } + } + return queryFactory.select( QGetSignatureListItem( signatureCan.id, @@ -54,7 +76,7 @@ class CreatorAdminSignatureQueryRepositoryImpl( ) .offset(offset) .limit(limit) - .orderBy(signatureCan.id.desc()) + .orderBy(orderBy) .fetch() } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt index 71bf228..6aee5be 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureService.kt @@ -4,6 +4,7 @@ import com.amazonaws.services.s3.model.ObjectMetadata import kr.co.vividnext.sodalive.aws.s3.S3Uploader import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.live.signature.SignatureCan +import kr.co.vividnext.sodalive.live.signature.SignatureCanSortType import kr.co.vividnext.sodalive.member.MemberRepository import kr.co.vividnext.sodalive.utils.generateFileName import org.springframework.beans.factory.annotation.Value @@ -24,10 +25,15 @@ class CreatorAdminSignatureService( @Value("\${cloud.aws.cloud-front.host}") private val imageHost: String ) { - fun getSignatureList(pageable: Pageable, memberId: Long): GetSignatureListResponse { + fun getSignatureList( + pageable: Pageable, + sortType: SignatureCanSortType, + memberId: Long + ): GetSignatureListResponse { val totalCount = repository.getSignatureListTotalCount(memberId = memberId) val items = repository.getSignatureList( memberId = memberId, + sortType = sortType, imageHost = imageHost, offset = pageable.offset, limit = pageable.pageSize.toLong() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanSortType.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanSortType.kt new file mode 100644 index 0000000..93799e5 --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/signature/SignatureCanSortType.kt @@ -0,0 +1,5 @@ +package kr.co.vividnext.sodalive.live.signature + +enum class SignatureCanSortType { + NEWEST, CAN_HIGH, CAN_LOW +} From 78d13aee1a088dd292697b2b4f5486101b942899 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 30 May 2024 01:28:38 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=8B=9C?= =?UTF-8?q?=EA=B7=B8=EB=8B=88=EC=B2=98=20=EA=B4=80=EB=A6=AC=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20-=20sortType=EC=9D=84=20=ED=95=84=EC=88=98?= =?UTF-8?q?=20parameter=EC=97=90=EC=84=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/signature/CreatorAdminSignatureController.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt index 40f67ed..38760cd 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/creator/admin/signature/CreatorAdminSignatureController.kt @@ -22,12 +22,18 @@ class CreatorAdminSignatureController(private val service: CreatorAdminSignature @GetMapping fun getSignatureCanList( pageable: Pageable, - @RequestParam("sort-type", required = false) sortType: SignatureCanSortType = SignatureCanSortType.NEWEST, + @RequestParam("sort-type", required = false) sortType: SignatureCanSortType?, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(data = service.getSignatureList(pageable, sortType, memberId = member.id!!)) + ApiResponse.ok( + data = service.getSignatureList( + pageable, + sortType ?: SignatureCanSortType.NEWEST, + memberId = member.id!! + ) + ) } @PostMapping