From e3c33c71a0529746c60b8f163b3a2f1454c8c850 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Jun 2025 14:47:33 +0900 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=EC=BF=A0=ED=8F=B0=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1,=20=EC=BF=A0=ED=8F=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20-=20=EC=BF=A0=ED=8F=B0=20=ED=83=80=EC=9E=85(=EC=BA=94,=20?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8)=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/can/coupon/CanCoupon.kt | 8 ++++++++ .../sodalive/can/coupon/CanCouponNumberRepository.kt | 1 + .../vividnext/sodalive/can/coupon/CanCouponRepository.kt | 4 ++++ .../co/vividnext/sodalive/can/coupon/CanCouponService.kt | 3 --- .../sodalive/can/coupon/GenerateCanCouponRequest.kt | 1 + .../sodalive/can/coupon/GetCouponListResponse.kt | 1 + .../kr/co/vividnext/sodalive/useraction/ActionType.kt | 3 ++- 7 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCoupon.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCoupon.kt index 92ec244..fb77069 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCoupon.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCoupon.kt @@ -3,13 +3,21 @@ package kr.co.vividnext.sodalive.can.coupon import kr.co.vividnext.sodalive.common.BaseEntity import java.time.LocalDateTime import javax.persistence.Entity +import javax.persistence.EnumType +import javax.persistence.Enumerated @Entity data class CanCoupon( val couponName: String, + @Enumerated(EnumType.STRING) + val couponType: CouponType, val can: Int, val couponCount: Int, var validity: LocalDateTime, var isActive: Boolean, var isMultipleUse: Boolean ) : BaseEntity() + +enum class CouponType { + CAN, POINT +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponNumberRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponNumberRepository.kt index fd3bc08..fc99a88 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponNumberRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponNumberRepository.kt @@ -79,6 +79,7 @@ class CanCouponNumberQueryRepositoryImpl(private val queryFactory: JPAQueryFacto override fun findByCouponNumber(couponNumber: String): CanCouponNumber? { return queryFactory .selectFrom(canCouponNumber) + .innerJoin(canCouponNumber.canCoupon, canCoupon) .where(canCouponNumber.couponNumber.eq(couponNumber)) .fetchFirst() } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt index 0882f50..114436f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponRepository.kt @@ -1,5 +1,6 @@ package kr.co.vividnext.sodalive.can.coupon +import com.querydsl.core.types.dsl.CaseBuilder import com.querydsl.core.types.dsl.DateTimePath import com.querydsl.core.types.dsl.Expressions import com.querydsl.core.types.dsl.StringTemplate @@ -30,6 +31,9 @@ class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : QGetCouponListItemResponse( canCoupon.id, canCoupon.couponName, + CaseBuilder() + .`when`(canCoupon.couponType.eq(CouponType.POINT)).then("포인트 쿠폰") + .otherwise("캔 쿠폰"), canCoupon.can, canCoupon.couponCount, Expressions.ZERO, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt index d8fbde0..5870ffc 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt @@ -68,15 +68,12 @@ class CanCouponService( fun getCouponList(offset: Long, limit: Long): GetCouponListResponse { val totalCount = repository.getCouponTotalCount() - val items = repository.getCouponList(offset = offset, limit = limit) - .asSequence() .map { val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id) it.useCouponCount = useCouponCount it } - .toList() return GetCouponListResponse(totalCount, items) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GenerateCanCouponRequest.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GenerateCanCouponRequest.kt index 98028b2..1e6183d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GenerateCanCouponRequest.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GenerateCanCouponRequest.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty data class GenerateCanCouponRequest( @JsonProperty("couponName") val couponName: String, + @JsonProperty("couponType") val couponType: CouponType, @JsonProperty("can") val can: Int, @JsonProperty("validity") val validity: String, @JsonProperty("isMultipleUse") val isMultipleUse: Boolean, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt index ff416a7..0c1e7ae 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponListResponse.kt @@ -10,6 +10,7 @@ data class GetCouponListResponse( data class GetCouponListItemResponse @QueryProjection constructor( val id: Long, val couponName: String, + val couponType: String, val can: Int, val couponCount: Int, var useCouponCount: Int, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/useraction/ActionType.kt b/src/main/kotlin/kr/co/vividnext/sodalive/useraction/ActionType.kt index 5933be9..177ed8c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/useraction/ActionType.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/useraction/ActionType.kt @@ -5,5 +5,6 @@ enum class ActionType(val displayName: String) { USER_AUTHENTICATION("본인인증"), CONTENT_COMMENT("콘텐츠 댓글"), ORDER_CONTENT_COMMENT("구매한 콘텐츠 댓글"), - LIVE_CONTINUOUS_LISTEN_30("라이브 연속 청취 30분") + LIVE_CONTINUOUS_LISTEN_30("라이브 연속 청취 30분"), + COUPON("쿠폰") } -- 2.40.1 From 54c0322398c0580c0842f4609a60c61cef8cfe8b Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Jun 2025 15:16:11 +0900 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20=EC=BF=A0=ED=8F=B0=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20-=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=BF=A0?= =?UTF-8?q?=ED=8F=B0=EC=9D=B4=EB=A9=B4=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=A9=EC=A0=84=20=EB=90=98=EB=8F=84=EB=A1=9D=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/can/charge/ChargeService.kt | 64 +++++++++++++++---- .../vividnext/sodalive/point/PointGrantLog.kt | 3 +- 2 files changed, 54 insertions(+), 13 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt index 4b8486e..66ea314 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt @@ -5,6 +5,7 @@ import kr.co.bootpay.Bootpay import kr.co.vividnext.sodalive.can.CanRepository import kr.co.vividnext.sodalive.can.charge.event.ChargeSpringEvent import kr.co.vividnext.sodalive.can.coupon.CanCouponNumberRepository +import kr.co.vividnext.sodalive.can.coupon.CouponType import kr.co.vividnext.sodalive.can.payment.Payment import kr.co.vividnext.sodalive.can.payment.PaymentGateway import kr.co.vividnext.sodalive.can.payment.PaymentStatus @@ -12,6 +13,11 @@ import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.google.GooglePlayService import kr.co.vividnext.sodalive.member.Member import kr.co.vividnext.sodalive.member.MemberRepository +import kr.co.vividnext.sodalive.point.MemberPoint +import kr.co.vividnext.sodalive.point.MemberPointRepository +import kr.co.vividnext.sodalive.point.PointGrantLog +import kr.co.vividnext.sodalive.point.PointGrantLogRepository +import kr.co.vividnext.sodalive.useraction.ActionType import okhttp3.MediaType.Companion.toMediaTypeOrNull import okhttp3.OkHttpClient import okhttp3.Request @@ -27,6 +33,7 @@ import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import java.math.BigDecimal import java.math.RoundingMode +import java.time.LocalDateTime @Service @Transactional(readOnly = true) @@ -36,6 +43,9 @@ class ChargeService( private val memberRepository: MemberRepository, private val couponNumberRepository: CanCouponNumberRepository, + private val grantLogRepository: PointGrantLogRepository, + private val memberPointRepository: MemberPointRepository, + private val objectMapper: ObjectMapper, private val okHttpClient: OkHttpClient, private val applicationEventPublisher: ApplicationEventPublisher, @@ -64,23 +74,53 @@ class ChargeService( if (canCouponNumber.member != null) { throw SodaException("이미 사용한 쿠폰번호 입니다.") } - canCouponNumber.member = member val coupon = canCouponNumber.canCoupon!! - val couponCharge = Charge(0, coupon.can, status = ChargeStatus.COUPON) - couponCharge.title = "${coupon.can} 캔" - couponCharge.member = member - val payment = Payment( - status = PaymentStatus.COMPLETE, - paymentGateway = PaymentGateway.PG - ) - payment.method = coupon.couponName - couponCharge.payment = payment - chargeRepository.save(couponCharge) + when (coupon.couponType) { + CouponType.CAN -> { + val couponCharge = Charge(0, coupon.can, status = ChargeStatus.COUPON) + couponCharge.title = "${coupon.can} 캔" + couponCharge.member = member - member.charge(0, coupon.can, "pg") + val payment = Payment( + status = PaymentStatus.COMPLETE, + paymentGateway = PaymentGateway.PG + ) + payment.method = coupon.couponName + couponCharge.payment = payment + chargeRepository.save(couponCharge) + + member.charge(0, coupon.can, "pg") + } + + CouponType.POINT -> { + val memberId = member.id!! + val point = coupon.can + val actionType = ActionType.COUPON + + grantLogRepository.save( + PointGrantLog( + memberId = memberId, + point = point, + actionType = actionType, + policyId = null, + orderId = null, + couponName = coupon.couponName + ) + ) + + memberPointRepository.save( + MemberPoint( + memberId = memberId, + point = point, + actionType = actionType, + expiresAt = LocalDateTime.now().plusDays(3) + ) + ) + } + } } @Transactional diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt b/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt index 83666c6..e2c3ab5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLog.kt @@ -13,5 +13,6 @@ data class PointGrantLog( @Enumerated(EnumType.STRING) val actionType: ActionType, val policyId: Long?, - val orderId: Long? + val orderId: Long?, + val couponName: String? = null ) : BaseEntity() -- 2.40.1 From dcd4497315c822b9d738bf7f188f05aebf8db90d Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Jun 2025 16:36:46 +0900 Subject: [PATCH 3/8] =?UTF-8?q?feat:=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20-=20=EC=BF=A0=ED=8F=B0=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EC=B6=A9=EC=A0=84=ED=95=9C=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EB=82=B4=EC=97=AD=EB=8F=84=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20?= =?UTF-8?q?=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=ED=8A=B8=20=EC=A0=95=EC=B1=85=EA=B3=BC=EC=9D=98=20=EC=A1=B0?= =?UTF-8?q?=EC=9D=B8=EC=9D=84=20leftJoin=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/point/PointGrantLogRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLogRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLogRepository.kt index 6edc73a..1727576 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLogRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/point/PointGrantLogRepository.kt @@ -63,11 +63,11 @@ class PointGrantLogQueryRepositoryImpl( QGetPointRewardStatusResponse( pointGrantLog.point.stringValue().concat(" 포인트"), formattedDate, - pointRewardPolicy.title + pointRewardPolicy.title.coalesce(pointGrantLog.couponName) ) ) .from(pointGrantLog) - .innerJoin(pointRewardPolicy).on(pointGrantLog.policyId.eq(pointRewardPolicy.id)) + .leftJoin(pointRewardPolicy).on(pointGrantLog.policyId.eq(pointRewardPolicy.id)) .where(pointGrantLog.memberId.eq(memberId)) .orderBy(pointGrantLog.id.desc()) .fetch() -- 2.40.1 From 9ed717fb9529c6568e7e4295c76b68de3b08fc7c Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Jun 2025 16:52:19 +0900 Subject: [PATCH 4/8] =?UTF-8?q?feat:=20=EC=BF=A0=ED=8F=B0=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20-=20=EC=BF=A0=ED=8F=B0=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../co/vividnext/sodalive/can/charge/ChargeService.kt | 5 ++++- .../sodalive/can/coupon/CanCouponController.kt | 10 +++++----- .../vividnext/sodalive/can/coupon/CanCouponService.kt | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt index 66ea314..63f93eb 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt @@ -67,7 +67,7 @@ class ChargeService( ) { @Transactional - fun chargeByCoupon(couponNumber: String, member: Member) { + fun chargeByCoupon(couponNumber: String, member: Member): String { val canCouponNumber = couponNumberRepository.findByCouponNumber(couponNumber = couponNumber) ?: throw SodaException("잘못된 쿠폰번호입니다.\n고객센터로 문의해 주시기 바랍니다.") @@ -93,6 +93,7 @@ class ChargeService( chargeRepository.save(couponCharge) member.charge(0, coupon.can, "pg") + return "쿠폰 사용이 완료되었습니다. ${coupon.can}캔이 지급되었습니다." } CouponType.POINT -> { @@ -119,6 +120,8 @@ class ChargeService( expiresAt = LocalDateTime.now().plusDays(3) ) ) + + return "쿠폰 사용이 완료되었습니다. ${coupon.can}포인트가 지급되었습니다." } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponController.kt index 9d680a1..628145a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponController.kt @@ -109,11 +109,11 @@ class CanCouponController(private val service: CanCouponService) { ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok( - service.useCanCoupon( - couponNumber = request.couponNumber, - memberId = member.id!! - ) + val completeMessage = service.useCanCoupon( + couponNumber = request.couponNumber, + memberId = member.id!! ) + + ApiResponse.ok(Unit, completeMessage) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt index 5870ffc..ff88283 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/CanCouponService.kt @@ -121,7 +121,7 @@ class CanCouponService( } } - fun useCanCoupon(couponNumber: String, memberId: Long) { + fun useCanCoupon(couponNumber: String, memberId: Long): String { val member = memberRepository.findByIdOrNull(id = memberId) ?: throw SodaException("로그인 정보를 확인해주세요.") @@ -129,7 +129,7 @@ class CanCouponService( issueService.validateAvailableUseCoupon(couponNumber, memberId) - chargeService.chargeByCoupon(couponNumber, member) + return chargeService.chargeByCoupon(couponNumber, member) } private fun insertHyphens(input: String): String { -- 2.40.1 From 8db5c6443dfc8013e782315b2630225d478f0ab7 Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Jun 2025 17:17:52 +0900 Subject: [PATCH 5/8] =?UTF-8?q?fix:=20=EC=BF=A0=ED=8F=B0=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20-=20=EC=BF=A0=ED=8F=B0=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=EC=95=88=EB=82=B4=20=EB=AC=B8=EA=B5=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/can/charge/ChargeService.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt index 63f93eb..dfc7a4b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/charge/ChargeService.kt @@ -93,7 +93,7 @@ class ChargeService( chargeRepository.save(couponCharge) member.charge(0, coupon.can, "pg") - return "쿠폰 사용이 완료되었습니다. ${coupon.can}캔이 지급되었습니다." + return "쿠폰 사용이 완료되었습니다.\n${coupon.can}캔이 지급되었습니다." } CouponType.POINT -> { @@ -121,7 +121,7 @@ class ChargeService( ) ) - return "쿠폰 사용이 완료되었습니다. ${coupon.can}포인트가 지급되었습니다." + return "쿠폰 사용이 완료되었습니다.\n${coupon.can}포인트가 지급되었습니다." } } } -- 2.40.1 From 16a2b82ffd0e3070989c21c801f6ef1aa5359439 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 10 Jun 2025 11:14:48 +0900 Subject: [PATCH 6/8] =?UTF-8?q?feat:=20=EC=BD=98=ED=85=90=EC=B8=A0=20?= =?UTF-8?q?=EB=A9=94=EC=9D=B8,=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=9E=AD?= =?UTF-8?q?=ED=82=B9=20-=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=20=EA=B0=80=EB=8A=A5=20=EC=97=AC=EB=B6=80=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 --- .../sodalive/content/AudioContentRepository.kt | 16 +++++++++++----- .../content/main/GetAudioContentMainItem.kt | 3 ++- .../content/main/GetAudioContentRanking.kt | 1 + .../AudioContentCurationQueryRepository.kt | 3 ++- .../ContentMainTabTagCurationRepository.kt | 3 ++- .../sodalive/content/order/OrderRepository.kt | 3 ++- .../vividnext/sodalive/rank/RankingRepository.kt | 4 ++++ 7 files changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index 7028673..48038b2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -488,7 +488,8 @@ class AudioContentQueryRepositoryImpl( member.profileImage.prepend("/").prepend(imageHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(audioContent) @@ -557,7 +558,8 @@ class AudioContentQueryRepositoryImpl( member.profileImage.prepend("/").prepend(imageHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(audioContent) @@ -776,7 +778,8 @@ class AudioContentQueryRepositoryImpl( member.profileImage.prepend("/").prepend(cloudfrontHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(audioContent) @@ -896,7 +899,8 @@ class AudioContentQueryRepositoryImpl( .prepend(imageHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(audioContent) @@ -956,7 +960,8 @@ class AudioContentQueryRepositoryImpl( member.profileImage.prepend("/").prepend(imageHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(audioContentCurationItem) @@ -1018,6 +1023,7 @@ class AudioContentQueryRepositoryImpl( audioContent.duration, member.id, member.nickname, + audioContent.isPointAvailable, member.profileImage.prepend("/").prepend(imageHost) ) ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt index a329cd4..269fa8c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentMainItem.kt @@ -11,5 +11,6 @@ data class GetAudioContentMainItem @QueryProjection constructor( @JsonProperty("creatorProfileImageUrl") val creatorProfileImageUrl: String, @JsonProperty("creatorNickname") val creatorNickname: String, @JsonProperty("price") val price: Int, - @JsonProperty("duration") val duration: String + @JsonProperty("duration") val duration: String, + @JsonProperty("isPointAvailable") val isPointAvailable: Boolean ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentRanking.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentRanking.kt index e96ad30..00f7092 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentRanking.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/GetAudioContentRanking.kt @@ -18,5 +18,6 @@ data class GetAudioContentRankingItem @QueryProjection constructor( @JsonProperty("duration") val duration: String, @JsonProperty("creatorId") val creatorId: Long, @JsonProperty("creatorNickname") val creatorNickname: String, + @JsonProperty("isPointAvailable") val isPointAvailable: Boolean, @JsonProperty("creatorProfileImageUrl") val creatorProfileImageUrl: String ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt index f7e76a2..71ce651 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/curation/AudioContentCurationQueryRepository.kt @@ -94,7 +94,8 @@ class AudioContentCurationQueryRepository(private val queryFactory: JPAQueryFact member.profileImage.prepend("/").prepend(cloudfrontHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(audioContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/ContentMainTabTagCurationRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/ContentMainTabTagCurationRepository.kt index 13ca6a4..243a9ff 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/ContentMainTabTagCurationRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/content/ContentMainTabTagCurationRepository.kt @@ -97,7 +97,8 @@ class ContentMainTabTagCurationRepository( member.profileImage.prepend("/").prepend(imageHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(contentHashTagCurationItem) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt index d460d19..a05ea4e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt @@ -210,7 +210,8 @@ class OrderQueryRepositoryImpl( .prepend(coverImageHost), member.nickname, audioContent.price, - audioContent.duration + audioContent.duration, + audioContent.isPointAvailable ) ) .from(order) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt index 9b3e6f7..ddf2288 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt @@ -102,6 +102,7 @@ class RankingRepository( audioContent.duration, member.id, member.nickname, + audioContent.isPointAvailable, member.profileImage.prepend("/").prepend(imageHost) ) ) @@ -560,6 +561,7 @@ class RankingRepository( audioContent.duration, member.id, member.nickname, + audioContent.isPointAvailable, member.profileImage.prepend("/").prepend(imageHost) ) ) @@ -726,6 +728,7 @@ class RankingRepository( audioContent.duration, member.id, member.nickname, + audioContent.isPointAvailable, member.profileImage.prepend("/").prepend(imageHost) ) ) @@ -782,6 +785,7 @@ class RankingRepository( audioContent.duration, member.id, member.nickname, + audioContent.isPointAvailable, member.profileImage.prepend("/").prepend(imageHost) ) ) -- 2.40.1 From 8335717741c8114effc1ff7a8873bc143ae8d168 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 10 Jun 2025 14:44:54 +0900 Subject: [PATCH 7/8] =?UTF-8?q?feat:=20=ED=81=AC=EB=A6=AC=EC=97=90?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=EC=B1=84=EB=84=90=20=EC=BD=98=ED=85=90?= =?UTF-8?q?=EC=B8=A0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20-=20=ED=8F=AC?= =?UTF-8?q?=EC=9D=B8=ED=8A=B8=20=EC=82=AC=EC=9A=A9=20=EA=B0=80=EB=8A=A5=20?= =?UTF-8?q?=EC=97=AC=EB=B6=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/content/AudioContentRepository.kt | 3 ++- .../vividnext/sodalive/content/GetAudioContentListResponse.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index 48038b2..0f6d651 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -262,7 +262,8 @@ class AudioContentQueryRepositoryImpl( audioContent.releaseDate.gt(LocalDateTime.now()), Expressions.asBoolean(false), Expressions.asBoolean(false), - audioContent.remaining.loe(0) + audioContent.remaining.loe(0), + audioContent.isPointAvailable ) ) .from(audioContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentListResponse.kt index 5ced3eb..1137717 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/GetAudioContentListResponse.kt @@ -21,5 +21,6 @@ data class GetAudioContentListItem @QueryProjection constructor( val isScheduledToOpen: Boolean, var isRented: Boolean, var isOwned: Boolean, - var isSoldOut: Boolean + var isSoldOut: Boolean, + val isPointAvailable: Boolean ) -- 2.40.1 From e508dafb349185b483a05cd5919a75f98ed1a2f4 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 10 Jun 2025 18:03:52 +0900 Subject: [PATCH 8/8] =?UTF-8?q?feat:=20=EC=8B=9C=EB=A6=AC=EC=A6=88=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20-=20=ED=8F=AC=EC=9D=B8=ED=8A=B8=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=20=EA=B0=80=EB=8A=A5=20=EC=97=AC=EB=B6=80=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/series/content/ContentSeriesContentRepository.kt | 3 ++- .../content/series/content/GetSeriesContentListResponse.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt index d8b3bc7..356f472 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/ContentSeriesContentRepository.kt @@ -124,7 +124,8 @@ class ContentSeriesContentQueryRepositoryImpl( audioContent.duration, audioContent.price, Expressions.asBoolean(false), - Expressions.asBoolean(false) + Expressions.asBoolean(false), + audioContent.isPointAvailable ) ) .from(seriesContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/GetSeriesContentListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/GetSeriesContentListResponse.kt index 00f774c..7c0e0a1 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/GetSeriesContentListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/series/content/GetSeriesContentListResponse.kt @@ -15,5 +15,6 @@ data class GetSeriesContentListItem @QueryProjection constructor( val duration: String, val price: Int, var isRented: Boolean, - var isOwned: Boolean + var isOwned: Boolean, + val isPointAvailable: Boolean ) -- 2.40.1