캔 쿠폰 조회 로직 수정 #110

Merged
klaus merged 1 commits from test into main 2024-01-04 09:59:21 +00:00
3 changed files with 40 additions and 16 deletions

View File

@ -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<CanCoupon, Long>, CanCouponQueryRepository
interface CanCouponQueryRepository {
fun getCouponTotalCount(): Int
fun getCouponList(offset: Long, limit: Long): List<CanCoupon>
fun getCouponList(offset: Long, limit: Long): List<GetCouponListItemResponse>
}
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<CanCoupon> {
override fun getCouponList(offset: Long, limit: Long): List<GetCouponListItemResponse> {
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<LocalDateTime>): 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"
)
}
}

View File

@ -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()

View File

@ -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<GetCouponListItemResponse>
)
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