Skip to content

Commit 5d1345b

Browse files
committed
fix: 쿠폰 중복 노출 문제 방지
1 parent 381d674 commit 5d1345b

File tree

1 file changed

+11
-12
lines changed

1 file changed

+11
-12
lines changed

src/main/java/com/appcenter/marketplace/domain/payback/repository/PaybackRepositoryCustomImpl.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,7 @@ public List<CouponRes> findLatestPaybackList(Long memberId, LocalDateTime lastCr
203203
market.thumbnail,
204204
Expressions.TRUE, // Payback은 항상 available
205205
memberId != null ?
206-
savedPayback.id.isNotNull()
207-
.and(savedPayback.isPayback.eq(false)) // 환급 진행중 or 미사용
208-
.and(savedPayback.isExpired.eq(false)): // 만료 전
206+
savedPayback.id.count().gt(0L) : // 미사용+미만료 쿠폰이 1개 이상 있으면 true
209207
Expressions.FALSE,
210208
payback.createdAt,
211209
Expressions.asEnum(CouponType.PAYBACK)
@@ -215,7 +213,9 @@ public List<CouponRes> findLatestPaybackList(Long memberId, LocalDateTime lastCr
215213
.innerJoin(market.local, local)
216214
.innerJoin(local.metro, metro)
217215
.leftJoin(savedPayback).on(payback.eq(savedPayback.payback)
218-
.and(memberId != null ? savedPayback.member.id.eq(memberId) : null))
216+
.and(memberId != null ? savedPayback.member.id.eq(memberId) : null)
217+
.and(savedPayback.isPayback.eq(false)) // 환급 전
218+
.and(savedPayback.isExpired.eq(false))) // 만료 전
219219
.where(loeCreateAtAndLtPaybackId(lastCreatedAt, lastPaybackId)
220220
.and(payback.isDeleted.eq(false))
221221
.and(payback.isHidden.eq(false)))
@@ -227,8 +227,8 @@ public List<CouponRes> findLatestPaybackList(Long memberId, LocalDateTime lastCr
227227
// 인기 Payback 페이징 조회 (매장 orderNo 순)
228228
@Override
229229
public List<CouponRes> findPopularPaybackList(Long memberId, Integer lastOrderNo, Long lastPaybackId, Integer size) {
230-
QMemberPayback savedPayback = new QMemberPayback("savedPayback");
231-
QMemberPayback issuedPayback = new QMemberPayback("issuedPayback");
230+
QMemberPayback savedPayback = new QMemberPayback("savedPayback"); // 현재 로그인한 회원 개인화
231+
QMemberPayback issuedPayback = new QMemberPayback("issuedPayback"); // 회원의 발급수 집계
232232

233233
return queryFactory
234234
.select(new QCouponRes(
@@ -240,9 +240,7 @@ public List<CouponRes> findPopularPaybackList(Long memberId, Integer lastOrderNo
240240
market.thumbnail,
241241
Expressions.TRUE, // Payback은 항상 available
242242
memberId != null ?
243-
savedPayback.id.isNotNull()
244-
.and(savedPayback.isPayback.eq(false)) // 환급 진행 중 or 미사용상태
245-
.and(savedPayback.isExpired.eq(false)) : // 만료전
243+
savedPayback.id.count().gt(0L) : // 미사용+미만료 쿠폰이 1개 이상 있으면 true
246244
Expressions.FALSE,
247245
issuedPayback.id.count(),
248246
market.orderNo, // orderNo 추가
@@ -254,7 +252,9 @@ public List<CouponRes> findPopularPaybackList(Long memberId, Integer lastOrderNo
254252
.innerJoin(local.metro, metro)
255253
.leftJoin(issuedPayback).on(payback.eq(issuedPayback.payback))
256254
.leftJoin(savedPayback).on(payback.eq(savedPayback.payback)
257-
.and(memberId != null ? savedPayback.member.id.eq(memberId) : null))
255+
.and(memberId != null ? savedPayback.member.id.eq(memberId) : null)
256+
.and(savedPayback.isPayback.eq(false)) // 환급 전
257+
.and(savedPayback.isExpired.eq(false))) // 만료 전
258258
.where(payback.isDeleted.eq(false)
259259
.and(payback.isHidden.eq(false))
260260
.and(goeOrderNoAndGtPaybackId(lastOrderNo, lastPaybackId)))
@@ -265,8 +265,7 @@ public List<CouponRes> findPopularPaybackList(Long memberId, Integer lastOrderNo
265265
metro.name,
266266
local.name,
267267
market.thumbnail,
268-
market.orderNo,
269-
savedPayback.id)
268+
market.orderNo)
270269
.orderBy(market.orderNo.asc().nullsLast(), payback.id.desc())
271270
.limit(size + 1)
272271
.fetch();

0 commit comments

Comments
 (0)