From a241b96d5984fecdc44203234b61562d2889c8a8 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 4 Jan 2024 18:22:48 +0900 Subject: [PATCH] =?UTF-8?q?=EC=BA=94=20=EC=BF=A0=ED=8F=B0=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95=20AS-IS=20:?= =?UTF-8?q?=20=EC=BA=94=20=EC=BF=A0=ED=8F=B0=20=EC=95=84=EC=9D=B4=ED=85=9C?= =?UTF-8?q?=20=EC=A0=84=EC=B2=B4=20=EC=A1=B0=ED=9A=8C=20TO-BE=20:=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=ED=95=84=EB=93=9C=EB=A7=8C=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../can/coupon/CanCouponRepository.kt | 36 +++++++++++++++++-- .../sodalive/can/coupon/CanCouponService.kt | 14 ++------ .../can/coupon/GetCouponListResponse.kt | 6 ++-- 3 files changed, 40 insertions(+), 16 deletions(-) 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 012ab52..0882f50 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,14 +1,18 @@ package kr.co.vividnext.sodalive.can.coupon +import com.querydsl.core.types.dsl.DateTimePath +import com.querydsl.core.types.dsl.Expressions +import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.can.coupon.QCanCoupon.canCoupon import org.springframework.data.jpa.repository.JpaRepository +import java.time.LocalDateTime interface CanCouponRepository : JpaRepository, CanCouponQueryRepository interface CanCouponQueryRepository { fun getCouponTotalCount(): Int - fun getCouponList(offset: Long, limit: Long): List + fun getCouponList(offset: Long, limit: Long): List } class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CanCouponQueryRepository { @@ -20,12 +24,38 @@ class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : .size } - override fun getCouponList(offset: Long, limit: Long): List { + override fun getCouponList(offset: Long, limit: Long): List { return queryFactory - .selectFrom(canCoupon) + .select( + QGetCouponListItemResponse( + canCoupon.id, + canCoupon.couponName, + canCoupon.can, + canCoupon.couponCount, + Expressions.ZERO, + getFormattedDate(canCoupon.validity), + canCoupon.isMultipleUse, + canCoupon.isActive + ) + ) + .from(canCoupon) .orderBy(canCoupon.id.desc()) .offset(offset) .limit(limit) .fetch() } + + private fun getFormattedDate(dateTimePath: DateTimePath): StringTemplate { + return Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})", + Expressions.dateTimeTemplate( + LocalDateTime::class.java, + "CONVERT_TZ({0},{1},{2})", + dateTimePath, + "UTC", + "Asia/Seoul" + ), + "%Y-%m-%d" + ) + } } 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 8fa9f8e..d8fbde0 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 @@ -72,17 +72,9 @@ class CanCouponService( val items = repository.getCouponList(offset = offset, limit = limit) .asSequence() .map { - val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id!!) - GetCouponListItemResponse( - id = it.id!!, - couponName = it.couponName, - can = it.can, - couponCount = it.couponCount, - useCouponCount = useCouponCount, - validity = it.validity.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")), - isMultipleUse = it.isMultipleUse, - isActive = it.isActive - ) + val useCouponCount = couponNumberRepository.getUseCouponCount(id = it.id) + it.useCouponCount = useCouponCount + it } .toList() 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 f26bab4..ff416a7 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 @@ -1,16 +1,18 @@ package kr.co.vividnext.sodalive.can.coupon +import com.querydsl.core.annotations.QueryProjection + data class GetCouponListResponse( val totalCount: Int, val items: List ) -data class GetCouponListItemResponse( +data class GetCouponListItemResponse @QueryProjection constructor( val id: Long, val couponName: String, val can: Int, val couponCount: Int, - val useCouponCount: Int, + var useCouponCount: Int, val validity: String, val isMultipleUse: Boolean, val isActive: Boolean