feat: 쿠폰 생성, 쿠폰 리스트

- 쿠폰 타입(캔, 포인트) 추가
This commit is contained in:
Klaus 2025-06-09 14:47:33 +09:00
parent 7055bb9872
commit e3c33c71a0
7 changed files with 17 additions and 4 deletions

View File

@ -3,13 +3,21 @@ package kr.co.vividnext.sodalive.can.coupon
import kr.co.vividnext.sodalive.common.BaseEntity import kr.co.vividnext.sodalive.common.BaseEntity
import java.time.LocalDateTime import java.time.LocalDateTime
import javax.persistence.Entity import javax.persistence.Entity
import javax.persistence.EnumType
import javax.persistence.Enumerated
@Entity @Entity
data class CanCoupon( data class CanCoupon(
val couponName: String, val couponName: String,
@Enumerated(EnumType.STRING)
val couponType: CouponType,
val can: Int, val can: Int,
val couponCount: Int, val couponCount: Int,
var validity: LocalDateTime, var validity: LocalDateTime,
var isActive: Boolean, var isActive: Boolean,
var isMultipleUse: Boolean var isMultipleUse: Boolean
) : BaseEntity() ) : BaseEntity()
enum class CouponType {
CAN, POINT
}

View File

@ -79,6 +79,7 @@ class CanCouponNumberQueryRepositoryImpl(private val queryFactory: JPAQueryFacto
override fun findByCouponNumber(couponNumber: String): CanCouponNumber? { override fun findByCouponNumber(couponNumber: String): CanCouponNumber? {
return queryFactory return queryFactory
.selectFrom(canCouponNumber) .selectFrom(canCouponNumber)
.innerJoin(canCouponNumber.canCoupon, canCoupon)
.where(canCouponNumber.couponNumber.eq(couponNumber)) .where(canCouponNumber.couponNumber.eq(couponNumber))
.fetchFirst() .fetchFirst()
} }

View File

@ -1,5 +1,6 @@
package kr.co.vividnext.sodalive.can.coupon 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.DateTimePath
import com.querydsl.core.types.dsl.Expressions import com.querydsl.core.types.dsl.Expressions
import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.core.types.dsl.StringTemplate
@ -30,6 +31,9 @@ class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) :
QGetCouponListItemResponse( QGetCouponListItemResponse(
canCoupon.id, canCoupon.id,
canCoupon.couponName, canCoupon.couponName,
CaseBuilder()
.`when`(canCoupon.couponType.eq(CouponType.POINT)).then("포인트 쿠폰")
.otherwise("캔 쿠폰"),
canCoupon.can, canCoupon.can,
canCoupon.couponCount, canCoupon.couponCount,
Expressions.ZERO, Expressions.ZERO,

View File

@ -68,15 +68,12 @@ class CanCouponService(
fun getCouponList(offset: Long, limit: Long): GetCouponListResponse { fun getCouponList(offset: Long, limit: Long): GetCouponListResponse {
val totalCount = repository.getCouponTotalCount() val totalCount = repository.getCouponTotalCount()
val items = repository.getCouponList(offset = offset, limit = limit) val items = repository.getCouponList(offset = offset, limit = limit)
.asSequence()
.map { .map {
val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id) val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id)
it.useCouponCount = useCouponCount it.useCouponCount = useCouponCount
it it
} }
.toList()
return GetCouponListResponse(totalCount, items) return GetCouponListResponse(totalCount, items)
} }

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonProperty
data class GenerateCanCouponRequest( data class GenerateCanCouponRequest(
@JsonProperty("couponName") val couponName: String, @JsonProperty("couponName") val couponName: String,
@JsonProperty("couponType") val couponType: CouponType,
@JsonProperty("can") val can: Int, @JsonProperty("can") val can: Int,
@JsonProperty("validity") val validity: String, @JsonProperty("validity") val validity: String,
@JsonProperty("isMultipleUse") val isMultipleUse: Boolean, @JsonProperty("isMultipleUse") val isMultipleUse: Boolean,

View File

@ -10,6 +10,7 @@ data class GetCouponListResponse(
data class GetCouponListItemResponse @QueryProjection constructor( data class GetCouponListItemResponse @QueryProjection constructor(
val id: Long, val id: Long,
val couponName: String, val couponName: String,
val couponType: String,
val can: Int, val can: Int,
val couponCount: Int, val couponCount: Int,
var useCouponCount: Int, var useCouponCount: Int,

View File

@ -5,5 +5,6 @@ enum class ActionType(val displayName: String) {
USER_AUTHENTICATION("본인인증"), USER_AUTHENTICATION("본인인증"),
CONTENT_COMMENT("콘텐츠 댓글"), CONTENT_COMMENT("콘텐츠 댓글"),
ORDER_CONTENT_COMMENT("구매한 콘텐츠 댓글"), ORDER_CONTENT_COMMENT("구매한 콘텐츠 댓글"),
LIVE_CONTINUOUS_LISTEN_30("라이브 연속 청취 30분") LIVE_CONTINUOUS_LISTEN_30("라이브 연속 청취 30분"),
COUPON("쿠폰")
} }