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 e84b387..2c28256 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 @@ -10,7 +10,8 @@ interface CanCouponRepository : JpaRepository, CanCouponQueryRe interface CanCouponQueryRepository { fun getCouponTotalCount(): Int fun getCouponList(offset: Long, limit: Long): List - fun getCouponNumberList(couponId: Long, offset: Long, limit: Long): List + fun getCouponNumberTotalCount(couponId: Long): Int + fun getCouponNumberList(couponId: Long, offset: Long, limit: Long): List } class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : CanCouponQueryRepository { @@ -31,10 +32,19 @@ class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : .fetch() } - override fun getCouponNumberList(couponId: Long, offset: Long, limit: Long): List { + override fun getCouponNumberTotalCount(couponId: Long): Int { + return queryFactory + .select(canCouponNumber.id) + .from(canCouponNumber) + .where(canCouponNumber.canCoupon.id.eq(couponId)) + .fetch() + .size + } + + override fun getCouponNumberList(couponId: Long, offset: Long, limit: Long): List { return queryFactory .select( - QGetCouponNumberListResponse( + QGetCouponNumberListItemResponse( canCouponNumber.id, canCouponNumber.couponNumber, canCouponNumber.member.isNotNull @@ -42,6 +52,9 @@ class CanCouponQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : ) .from(canCouponNumber) .where(canCouponNumber.canCoupon.id.eq(couponId)) + .orderBy(canCouponNumber.id.asc()) + .offset(offset) + .limit(limit) .fetch() } } 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 8172521..5e219b7 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 @@ -43,7 +43,9 @@ class CanCouponService( return GetCouponListResponse(totalCount, items) } - fun getCouponNumberList(couponId: Long, offset: Long, limit: Long): List { - return repository.getCouponNumberList(couponId = couponId, offset = offset, limit = limit) + fun getCouponNumberList(couponId: Long, offset: Long, limit: Long): GetCouponNumberListResponse { + val totalCount = repository.getCouponNumberTotalCount(couponId = couponId) + val items = repository.getCouponNumberList(couponId = couponId, offset = offset, limit = limit) + return GetCouponNumberListResponse(totalCount, items) } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponNumberListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponNumberListResponse.kt index a67d697..a79c083 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponNumberListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/coupon/GetCouponNumberListResponse.kt @@ -2,7 +2,12 @@ package kr.co.vividnext.sodalive.can.coupon import com.querydsl.core.annotations.QueryProjection -data class GetCouponNumberListResponse @QueryProjection constructor( +data class GetCouponNumberListResponse( + val totalCount: Int, + val items: List +) + +data class GetCouponNumberListItemResponse @QueryProjection constructor( val couponNumberId: Long, val couponNumber: String, val isUsed: Boolean