Merge pull request '캔 쿠폰 조회 로직 수정' (#110) from test into main
Reviewed-on: #110
This commit is contained in:
commit
ec022b74d1
|
@ -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"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue