diff --git a/src/main/java/com/appcenter/marketplace/domain/cheer/controller/CheerController.java b/src/main/java/com/appcenter/marketplace/domain/cheer/controller/CheerController.java
index bccd35f..1f91215 100644
--- a/src/main/java/com/appcenter/marketplace/domain/cheer/controller/CheerController.java
+++ b/src/main/java/com/appcenter/marketplace/domain/cheer/controller/CheerController.java
@@ -13,7 +13,7 @@
@Tag(name = "[공감]", description = "[공감] 임시 매장 공감하기")
@RestController
@RequiredArgsConstructor
-@RequestMapping("/cheer")
+@RequestMapping("/api/cheer")
public class CheerController {
private final CheerService cheerService;
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/Coupon.java b/src/main/java/com/appcenter/marketplace/domain/coupon/Coupon.java
index f46c457..7738f51 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/Coupon.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/Coupon.java
@@ -1,6 +1,6 @@
package com.appcenter.marketplace.domain.coupon;
-import com.appcenter.marketplace.domain.coupon.dto.req.CouponUpdateReq;
+import com.appcenter.marketplace.domain.coupon.dto.req.CouponReq;
import com.appcenter.marketplace.domain.market.Market;
import com.appcenter.marketplace.global.common.BaseEntity;
import jakarta.persistence.*;
@@ -54,11 +54,11 @@ public Coupon(String name, String description, LocalDateTime deadLine, Integer s
this.isDeleted = isDeleted;
}
- public void update(CouponUpdateReq couponUpdateReq) {
- this.name = couponUpdateReq.getCouponName();
- this.description = couponUpdateReq.getDescription();
- this.deadLine = couponUpdateReq.getDeadLine();
- this.stock = couponUpdateReq.getStock();
+ public void update(CouponReq couponUpReq) {
+ this.name = couponUpReq.getCouponName();
+ this.description = couponUpReq.getDescription();
+ this.deadLine = couponUpReq.getDeadLine();
+ this.stock = couponUpReq.getStock();
}
public void updateHidden() {
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponController.java b/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponController.java
index f8680e0..9d16523 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponController.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponController.java
@@ -1,6 +1,7 @@
package com.appcenter.marketplace.domain.coupon.controller;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponMemberRes;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import com.appcenter.marketplace.domain.coupon.service.CouponService;
import com.appcenter.marketplace.global.common.CommonResponse;
import io.swagger.v3.oas.annotations.Operation;
@@ -9,6 +10,7 @@
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@@ -23,11 +25,17 @@ public class CouponController {
private final CouponService couponService;
- @Operation(summary = "유효 쿠폰 조회 리스트", description = "사장님이 공개처리 & 만료되지 않은 쿠폰 리스트가 조회됩니다." +
- "
매장 상세 정보에서 조회가 이루어집니다.")
+ @Operation(summary = "유효 쿠폰 조회 리스트", description = "사장님이 공개처리 & 만료되지 않은 쿠폰 리스트가 조회됩니다.
" +
+ "매장 상세 정보에서 조회가 이루어집니다.
" +
+ "couponId는 다음 페이징 처리를 위해 사용되는 파라미터 입니다. 다음")
@GetMapping
- public ResponseEntity>> getCouponList(Long marketId) {
- return ResponseEntity.status(COUPON_FOUND.getStatus()).body(CommonResponse.from(COUPON_FOUND.getMessage(),couponService.getCouponList(marketId)));
+ public ResponseEntity>> getCouponList(
+ @RequestParam(name= "marketId")Long marketId,
+ @RequestParam(name="couponId", required = false) Long couponId,
+ @RequestParam(name="size", defaultValue = "10") Integer size
+ ) {
+ return ResponseEntity.status(COUPON_FOUND.getStatus())
+ .body(CommonResponse.from(COUPON_FOUND.getMessage(),couponService.getCouponList(marketId, couponId, size)));
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponOwnerController.java b/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponOwnerController.java
index e963146..9ffc625 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponOwnerController.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/controller/CouponOwnerController.java
@@ -1,8 +1,8 @@
package com.appcenter.marketplace.domain.coupon.controller;
import com.appcenter.marketplace.domain.coupon.dto.req.CouponReq;
-import com.appcenter.marketplace.domain.coupon.dto.req.CouponUpdateReq;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponHiddenRes;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponRes;
import com.appcenter.marketplace.domain.coupon.service.CouponOwnerService;
import com.appcenter.marketplace.global.common.CommonResponse;
@@ -41,16 +41,19 @@ public ResponseEntity> getCoupon(@PathVariable Long co
@Operation(summary = "사장님 매장별 전체 쿠폰 조회", description = "사장님의 특정 매장(MarketId)의 전체 쿠폰 리스트를 조회합니다.")
@GetMapping("/coupons")
- public ResponseEntity>> getCouponList(@RequestParam(name= "marketId")Long id) {
- return ResponseEntity.status(COUPON_FOUND.getStatus()).body(CommonResponse.from(COUPON_FOUND.getMessage(),couponService.getCouponList(id)));
+ public ResponseEntity>> getCouponList(@RequestParam(name= "marketId")Long marketId,
+ @RequestParam(name="couponId", required = false) Long couponId,
+ @RequestParam(name="size", defaultValue = "10") Integer size
+ ) {
+ return ResponseEntity.status(COUPON_FOUND.getStatus()).body(CommonResponse.from(COUPON_FOUND.getMessage(),couponService.getCouponList(marketId, couponId, size)));
}
@Operation(summary = "사장님 쿠폰 내용 수정", description = "사장님이 생성한 쿠폰의 내용을 수정합니다. " +
"
'숨김처리'를 제외한 내용을 수정할 수 있습니다. ")
@PutMapping("/coupons/{couponId}")
- public ResponseEntity> updateCoupon(@RequestBody @Valid CouponUpdateReq couponUpdateReq,
+ public ResponseEntity> updateCoupon(@RequestBody @Valid CouponReq couponReq,
@PathVariable Long couponId ){
- return ResponseEntity.status(COUPON_UPDATE.getStatus()).body(CommonResponse.from(COUPON_UPDATE.getMessage(),couponService.updateCoupon(couponUpdateReq, couponId)));
+ return ResponseEntity.status(COUPON_UPDATE.getStatus()).body(CommonResponse.from(COUPON_UPDATE.getMessage(),couponService.updateCoupon(couponReq, couponId)));
}
@Operation(summary = "숨김/공개 처리 기능", description = "사장님은 생성한 쿠폰을 숨김 / 공개 처리 할 수 있습니다.")
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/dto/res/CouponPageRes.java b/src/main/java/com/appcenter/marketplace/domain/coupon/dto/res/CouponPageRes.java
new file mode 100644
index 0000000..c8ae551
--- /dev/null
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/dto/res/CouponPageRes.java
@@ -0,0 +1,16 @@
+package com.appcenter.marketplace.domain.coupon.dto.res;
+
+import lombok.Getter;
+
+import java.util.List;
+
+@Getter
+public class CouponPageRes {
+ private final List couponResDtos;
+ private final boolean hasNext;
+
+ public CouponPageRes(List couponResDtos, boolean hasNext){
+ this.couponResDtos = couponResDtos;
+ this.hasNext = hasNext;
+ }
+}
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustom.java b/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustom.java
index 22b6619..e9c556b 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustom.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustom.java
@@ -5,8 +5,7 @@
import java.util.List;
public interface CouponRepositoryCustom {
+ List findCouponsForOwnerByMarketId(Long marketId, Long couponId, Integer size);
- List findOwnerCouponResDtoByMarketId(Long marketId);
-
- List findMemberCouponResDtoByMarketId(Long marketId);
+ List findCouponsForMemberByMarketId(Long marketId, Long couponId, Integer size);
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustomImpl.java b/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustomImpl.java
index 0af1afb..3ccf07c 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustomImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/repository/CouponRepositoryCustomImpl.java
@@ -4,6 +4,7 @@
import com.appcenter.marketplace.domain.coupon.dto.res.CouponRes;
import com.appcenter.marketplace.domain.coupon.dto.res.QCouponMemberRes;
import com.appcenter.marketplace.domain.coupon.dto.res.QCouponRes;
+import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
@@ -19,7 +20,7 @@ public class CouponRepositoryCustomImpl implements CouponRepositoryCustom {
// 사장님) '숨김처리'에 관계없이 발행한 모든 쿠폰을 확인할 수 있습니다.
@Override
- public List findOwnerCouponResDtoByMarketId(Long marketId) {
+ public List findCouponsForOwnerByMarketId(Long marketId, Long couponId, Integer size) {
return jpaQueryFactory.select(new QCouponRes(coupon.id,
coupon.market.id,
@@ -30,14 +31,17 @@ public List findOwnerCouponResDtoByMarketId(Long marketId) {
coupon.isHidden))
.from(coupon)
.join(market).on(coupon.market.id.eq(market.id))
- .where(coupon.market.id.eq(marketId)
+ .where(ltCouponId(couponId)
+ .and(coupon.market.id.eq(marketId))
.and(coupon.isDeleted.eq(false)))
+ .orderBy(coupon.id.desc())
+ .limit(size + 1)
.fetch();
}
// 유저) 사장님이 발행한 쿠폰 중 '공개처리'가 된 쿠폰들만 유저는 리스트에서 확인 가능합니다.
@Override
- public List findMemberCouponResDtoByMarketId(Long marketId) {
+ public List findCouponsForMemberByMarketId(Long marketId, Long couponId, Integer size) {
return jpaQueryFactory.select(new QCouponMemberRes(coupon.id,
coupon.name,
@@ -45,10 +49,21 @@ public List findMemberCouponResDtoByMarketId(Long marketId) {
coupon.deadLine))
.from(coupon)
.innerJoin(coupon).on(coupon.market.id.eq(market.id))
- .where(coupon.market.id.eq(marketId)
+ .where(ltCouponId(couponId)
+ .and(coupon.market.id.eq(marketId))
.and(coupon.isDeleted.eq(false))
.and(coupon.isHidden.eq(false)))
+ .orderBy(coupon.id.desc())
+ .limit(size + 1)
.fetch();
}
+
+ private BooleanBuilder ltCouponId(Long couponId) {
+ BooleanBuilder builder = new BooleanBuilder();
+ if( couponId != null){
+ builder.and(coupon.id.lt(couponId));
+ }
+ return builder;
+ }
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponOwnerService.java b/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponOwnerService.java
index 4ba8c8f..ad7b82d 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponOwnerService.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponOwnerService.java
@@ -1,12 +1,10 @@
package com.appcenter.marketplace.domain.coupon.service;
import com.appcenter.marketplace.domain.coupon.dto.req.CouponReq;
-import com.appcenter.marketplace.domain.coupon.dto.req.CouponUpdateReq;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponHiddenRes;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponRes;
-import java.util.List;
-
public interface CouponOwnerService {
// 쿠폰 등록 메서드
@@ -16,10 +14,10 @@ public interface CouponOwnerService {
CouponRes getCoupon(Long couponId);
// 매장별 전체 쿠폰 확인 메서드
- List getCouponList(Long marketId);
+ CouponPageRes getCouponList(Long marketId, Long CouponId, Integer size);
// 쿠폰 내용 수정 메서드
- CouponRes updateCoupon(CouponUpdateReq couponUpdateReq, Long couponId);
+ CouponRes updateCoupon(CouponReq couponReq, Long couponId);
// 쿠폰 숨김 처리 메서드
CouponHiddenRes updateCouponHidden(Long couponId);
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponService.java b/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponService.java
index 65df71f..2e1d5dc 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponService.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/service/CouponService.java
@@ -1,10 +1,11 @@
package com.appcenter.marketplace.domain.coupon.service;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponMemberRes;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import java.util.List;
public interface CouponService {
- List getCouponList(Long marketId);
+ CouponPageRes getCouponList(Long marketId, Long couponId, Integer size);
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponOwnerServiceImpl.java b/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponOwnerServiceImpl.java
index 436cdb0..9704f30 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponOwnerServiceImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponOwnerServiceImpl.java
@@ -2,8 +2,8 @@
import com.appcenter.marketplace.domain.coupon.Coupon;
import com.appcenter.marketplace.domain.coupon.dto.req.CouponReq;
-import com.appcenter.marketplace.domain.coupon.dto.req.CouponUpdateReq;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponHiddenRes;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import com.appcenter.marketplace.domain.coupon.dto.res.CouponRes;
import com.appcenter.marketplace.domain.coupon.repository.CouponRepository;
import com.appcenter.marketplace.domain.coupon.service.CouponOwnerService;
@@ -41,16 +41,18 @@ public CouponRes getCoupon(Long couponId) {
@Override
@Transactional
- public List getCouponList(Long marketId) {
+ public CouponPageRes getCouponList(Long marketId, Long couponId, Integer size) {
Market market = findMarketById(marketId);
- return couponRepository.findOwnerCouponResDtoByMarketId(market.getId());
+ List couponResList = couponRepository.findCouponsForOwnerByMarketId(market.getId(), couponId, size);
+
+ return checkNextPageAndReturn(couponResList, size);
}
@Override
@Transactional
- public CouponRes updateCoupon(CouponUpdateReq couponUpdateReq, Long couponId) {
+ public CouponRes updateCoupon(CouponReq couponReq, Long couponId) {
Coupon coupon = findCouponById(couponId);
- coupon.update(couponUpdateReq);
+ coupon.update(couponReq);
return CouponRes.toDto(coupon);
}
@@ -85,4 +87,15 @@ private Coupon findCouponById(Long couponId) {
else throw new CustomException(COUPON_IS_DELETED);
}
+
+ private CouponPageRes checkNextPageAndReturn(List couponList, Integer size) {
+ boolean hasNext = false;
+
+ if(couponList.size() > size){
+ hasNext = true;
+ couponList.remove(size.intValue());
+ }
+
+ return new CouponPageRes<>(couponList, hasNext);
+ }
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponServiceImpl.java b/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponServiceImpl.java
index a051c6e..907d1c9 100644
--- a/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponServiceImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/coupon/service/impl/CouponServiceImpl.java
@@ -23,10 +23,10 @@ public class CouponServiceImpl implements CouponService {
@Override
@Transactional
- public List getCouponList(Long marketId) {
+ public CouponPageRes getCouponList(Long marketId, Long couponId, Integer size) {
Market market = findMarketById(marketId);
- List couponList = couponRepository.findMemberCouponResDtoByMarketId(marketId);
- return couponList;
+ List couponList = couponRepository.findCouponsForMemberByMarketId(market.getId(), couponId, size);
+ return checkNextPageAndReturn(couponList, size);
}
private Market findMarketById(Long marketId) {
@@ -34,4 +34,14 @@ private Market findMarketById(Long marketId) {
}
+ private CouponPageRes checkNextPageAndReturn(List couponList, Integer size) {
+ boolean hasNext = false;
+
+ if(couponList.size() > size){
+ hasNext = true;
+ couponList.remove(size.intValue());
+ }
+
+ return new CouponPageRes<>(couponList, hasNext);
+ }
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/market/controller/MarketController.java b/src/main/java/com/appcenter/marketplace/domain/market/controller/MarketController.java
index 453f977..fa2e812 100644
--- a/src/main/java/com/appcenter/marketplace/domain/market/controller/MarketController.java
+++ b/src/main/java/com/appcenter/marketplace/domain/market/controller/MarketController.java
@@ -136,7 +136,7 @@ public ResponseEntity>> getTopFavoriteMarketList(
@GetMapping("/top-latest-coupon")
public ResponseEntity>> getLatestTopCouponList(
@RequestParam Long memberId,
- @RequestParam(defaultValue = "10", name = "count") Integer size) {
+ @RequestParam(defaultValue = "10", name = "size") Integer size) {
return ResponseEntity.ok(CommonResponse.from(COUPON_FOUND.getMessage(),
marketService.getTopLatestCoupons(memberId, size)));
}
@@ -152,13 +152,13 @@ public ResponseEntity>> getLatestTopCoup
public ResponseEntity>> getLatestMarketByCoupon(
@RequestParam(required = true) Long memberId,
@Parameter(description = "각 페이지의 마지막 couponId (e.g. 5)")
- @RequestParam(required = false, name = "lastPageIndex") Long couponId,
- @Parameter(description = "위에 작성한 couponId의 createdAt (e.g. 2024-11-20T00:59:33.469 OR 2024-11-20T00:59:33.469664 )")
+ @RequestParam(required = false, name = "lastPageIndex") Long marketId,
+ @Parameter(description = "위에 작성한 marketId의 createdAt (e.g. 2024-11-20T00:59:33.469 OR 2024-11-20T00:59:33.469664 )")
@RequestParam(required = false, name = "lastCreatedAt") LocalDateTime lastCreatedAt,
@RequestParam(defaultValue = "10", name = "pageSize") Integer size) {
return ResponseEntity
.ok(CommonResponse.from(MARKET_FOUND.getMessage(),
- marketService.getLatestCouponPage(memberId, lastCreatedAt, couponId, size)));
+ marketService.getLatestCouponPage(memberId, lastCreatedAt, marketId, size)));
}
@Operation(summary = "마감 임박 쿠폰 TOP 조회",
@@ -167,7 +167,7 @@ public ResponseEntity>> getLatestM
"만약 쿠폰의 마감일자가 같을 시, 최신 등록 매장 순으로 보여지게 됩니다.")
@GetMapping("/top-closing-coupon")
public ResponseEntity>> getClosingTopCouponList(
- @RequestParam(defaultValue = "10", name="count") Integer size){
+ @RequestParam(defaultValue = "10", name="size") Integer size){
return ResponseEntity.ok(CommonResponse.from(COUPON_FOUND.getMessage(),
marketService.getTopClosingCoupons(size)));
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/member_coupon/MemberCouponType.java b/src/main/java/com/appcenter/marketplace/domain/member_coupon/MemberCouponType.java
new file mode 100644
index 0000000..9625723
--- /dev/null
+++ b/src/main/java/com/appcenter/marketplace/domain/member_coupon/MemberCouponType.java
@@ -0,0 +1,5 @@
+package com.appcenter.marketplace.domain.member_coupon;
+
+public enum MemberCouponType {
+ ISSUED, EXPIRED, USED
+}
diff --git a/src/main/java/com/appcenter/marketplace/domain/member_coupon/controller/MemberCouponController.java b/src/main/java/com/appcenter/marketplace/domain/member_coupon/controller/MemberCouponController.java
index e3e992a..e17b1b5 100644
--- a/src/main/java/com/appcenter/marketplace/domain/member_coupon/controller/MemberCouponController.java
+++ b/src/main/java/com/appcenter/marketplace/domain/member_coupon/controller/MemberCouponController.java
@@ -1,5 +1,6 @@
package com.appcenter.marketplace.domain.member_coupon.controller;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import com.appcenter.marketplace.domain.member_coupon.dto.res.IssuedCouponRes;
import com.appcenter.marketplace.domain.member_coupon.dto.res.CouponHandleRes;
import com.appcenter.marketplace.domain.member_coupon.service.MemberCouponService;
@@ -12,6 +13,7 @@
import java.util.List;
+import static com.appcenter.marketplace.domain.member_coupon.MemberCouponType.*;
import static com.appcenter.marketplace.global.common.StatusCode.*;
@Tag(name = "[회원 쿠폰]", description = "[회원] 회원의 쿠폰 발급 및 사용처리, 리스트 확인")
@@ -32,31 +34,40 @@ public ResponseEntity> issuedCoupon(@RequestParam(name="m
}
@Operation(summary = "사용 가능한 쿠폰 리스트", description = "쿠폰 리스트를 조회하면 기본적으로 조회되는 리스트입니다." +
- "
'사용가능'한 쿠폰 리스트를 의미합니다." )
+ "
'사용가능'한 쿠폰 리스트를 의미합니다.
" +
+ "무한 스크롤 방식으로 hasNext가 true 면 마지막 데이터의 memberCouponId를 입력하여, 다음 페이지==다음 데이터를 받아올 수 있습니다." )
@GetMapping("/valid")
- public ResponseEntity>> getCouponList(@RequestParam(name="memberId")Long memberId){
+ public ResponseEntity>> getCouponList(@RequestParam(name="memberId")Long memberId,
+ @RequestParam(name="memberCouponId", required = false) Long memberCouponId,
+ @RequestParam(name="size", defaultValue = "10")Integer size) {
return ResponseEntity.status(COUPON_FOUND.getStatus())
- .body(CommonResponse.from(COUPON_FOUND.getMessage(), memberCouponService.getMemberCouponList(memberId)));
+ .body(CommonResponse.from(COUPON_FOUND.getMessage(), memberCouponService.getMemberCouponList(memberId, ISSUED, memberCouponId, size)));
}
@Operation(summary = "만료된 쿠폰 리스트", description = "기간이 만료된 쿠폰 리스트를 조회합니다." +
"
조건은 다음과 같습니다." +
- "1. 쿠폰의 deadLine(만료날짜) 이후여야 합니다." +
- "2. 쿠폰은 발급받았지만, 사용처리가 되지 않아야 합니다.")
+ "1. 쿠폰의 deadLine(만료날짜) 이후여야 합니다.
" +
+ "2. 쿠폰은 발급받았지만, 사용처리가 되지 않아야 합니다.
" +
+ "무한 스크롤 방식으로 hasNext가 true 면 마지막 데이터의 memberCouponId를 입력하여, 다음 페이지==다음 데이터를 받아올 수 있습니다.")
@GetMapping("/expired")
- public ResponseEntity>> getExpiredCouponList(@RequestParam(name="memberId")Long memberId){
+ public ResponseEntity>> getExpiredCouponList(@RequestParam(name="memberId")Long memberId,
+ @RequestParam(name="memberCouponId", required = false) Long memberCouponId,
+ @RequestParam(name="size", defaultValue = "10")Integer size){
return ResponseEntity.status(COUPON_FOUND.getStatus())
- .body(CommonResponse.from(COUPON_FOUND.getMessage(), memberCouponService.getExpiredMemberCouponList(memberId)));
+ .body(CommonResponse.from(COUPON_FOUND.getMessage(), memberCouponService.getMemberCouponList(memberId, EXPIRED, memberCouponId, size)));
}
@Operation(summary = "사용완료된 쿠폰 리스트", description = "사용이 완료된 쿠폰 리스트를 조회합니다." +
"
조건은 다음과 같습니다." +
- "1. 쿠폰을 발급받고, 사용처리가 완료되어야 합니다." +
- "2. 쿠폰의 deadLine(만료날짜)와는 상관이 없습니다.")
+ "1. 쿠폰을 발급받고, 사용처리가 완료되어야 합니다.
" +
+ "2. 쿠폰의 deadLine(만료날짜)와는 상관이 없습니다.
" +
+ "무한 스크롤 방식으로 hasNext가 true 면 마지막 데이터의 memberCouponId를 입력하여, 다음 페이지==다음 데이터를 받아올 수 있습니다.")
@GetMapping("/used")
- public ResponseEntity>> getUsedCouponList(@RequestParam(name="memberId")Long memberId){
+ public ResponseEntity>> getUsedCouponList(@RequestParam(name="memberId")Long memberId,
+ @RequestParam(name="memberCouponId", required = false) Long memberCouponId,
+ @RequestParam(name="size", defaultValue = "10")Integer size){
return ResponseEntity.status(COUPON_FOUND.getStatus())
- .body(CommonResponse.from(COUPON_FOUND.getMessage(), memberCouponService.getUsedMemberCouponList(memberId)));
+ .body(CommonResponse.from(COUPON_FOUND.getMessage(), memberCouponService.getMemberCouponList(memberId, USED, memberCouponId, size)));
}
@Operation(summary = "회원 쿠폰 사용처리", description = "회원은 발급받은 memberCouponId로 사용처리를 할 수 있습니다." )
diff --git a/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustom.java b/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustom.java
index 610eb73..663bf95 100644
--- a/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustom.java
+++ b/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustom.java
@@ -7,7 +7,7 @@
public interface MemberCouponRepositoryCustom {
boolean existCouponByMemberId(Long memberId, Long couponId);
- List findIssuedCouponResDtoByMemberId(Long memberId);
- List findExpiredCouponResDtoByMemberId(Long memberId);
- List findUsedMemberCouponResDtoByMemberId(Long memberId);
+ List findIssuedCouponResDtoByMemberId(Long memberId, Long memberCouponId, Integer size);
+ List findExpiredCouponResDtoByMemberId(Long memberId, Long memberCouponId, Integer size);
+ List findUsedMemberCouponResDtoByMemberId(Long memberId, Long memberCouponId, Integer size);
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustomImpl.java b/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustomImpl.java
index 89717be..477b2af 100644
--- a/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustomImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/member_coupon/repository/MemberCouponRepositoryCustomImpl.java
@@ -2,6 +2,7 @@
import com.appcenter.marketplace.domain.member_coupon.dto.res.IssuedCouponRes;
import com.appcenter.marketplace.domain.member_coupon.dto.res.QIssuedCouponRes;
+import com.querydsl.core.BooleanBuilder;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
@@ -27,19 +28,19 @@ public boolean existCouponByMemberId(Long memberId, Long couponId) {
}
@Override
- public List findIssuedCouponResDtoByMemberId(Long memberId) {
+ public List findIssuedCouponResDtoByMemberId(Long memberId, Long memberCouponId, Integer size) {
// 만료되기 전의 쿠폰만 조회가 가능합니다.
- return findCouponsByMemberId(memberId, false);
+ return findCouponsByMemberId(memberId, false, memberCouponId, size);
}
@Override
- public List findExpiredCouponResDtoByMemberId(Long memberId) {
+ public List findExpiredCouponResDtoByMemberId(Long memberId, Long memberCouponId, Integer size) {
// 발급 받은 쿠폰 중, 기간이 만료된 쿠폰만 조회합니다.
- return findCouponsByMemberId(memberId, true);
+ return findCouponsByMemberId(memberId, true,memberCouponId, size);
}
@Override
- public List findUsedMemberCouponResDtoByMemberId(Long memberId) {
+ public List findUsedMemberCouponResDtoByMemberId(Long memberId, Long memberCouponId, Integer size ) {
return jpaQueryFactory.select(new QIssuedCouponRes(memberCoupon.id,
coupon.id,
coupon.name,
@@ -48,12 +49,15 @@ public List findUsedMemberCouponResDtoByMemberId(Long memberId)
memberCoupon.isUsed))
.from(coupon)
.join(memberCoupon).on(memberCoupon.coupon.id.eq(coupon.id))
- .where(memberCoupon.member.id.eq(memberId)
+ .where(ltMemberCouponId(memberCouponId)
+ .and(memberCoupon.member.id.eq(memberId))
.and(memberCoupon.isUsed.eq(true)))
+ .orderBy(memberCoupon.id.desc())
+ .limit(size+1)
.fetch();
}
- private List findCouponsByMemberId(Long memberId, boolean isExpired) {
+ private List findCouponsByMemberId(Long memberId, boolean isExpired,Long memberCouponId, Integer size) {
return jpaQueryFactory.select(new QIssuedCouponRes(memberCoupon.id,
coupon.id,
coupon.name,
@@ -62,13 +66,24 @@ private List findCouponsByMemberId(Long memberId, boolean isExp
memberCoupon.isUsed))
.from(coupon)
.join(memberCoupon).on(memberCoupon.coupon.id.eq(coupon.id))
- .where(memberCoupon.member.id.eq(memberId)
+ .where(ltMemberCouponId(memberCouponId)
+ .and(memberCoupon.member.id.eq(memberId))
.and(memberCoupon.isUsed.eq(false))
.and(isExpired
? memberCoupon.coupon.deadLine.before(LocalDateTime.now())
: memberCoupon.coupon.deadLine.after(LocalDateTime.now())))
+ .orderBy(memberCoupon.id.desc())
+ .limit(size+1)
.fetch();
}
+
+ private BooleanBuilder ltMemberCouponId(Long memberCouponId){
+ BooleanBuilder builder = new BooleanBuilder();
+ if( memberCouponId != null){
+ builder.and(memberCoupon.id.lt(memberCouponId));
+ }
+ return builder;
+ }
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/MemberCouponService.java b/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/MemberCouponService.java
index bfc843d..7e05f8e 100644
--- a/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/MemberCouponService.java
+++ b/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/MemberCouponService.java
@@ -1,5 +1,7 @@
package com.appcenter.marketplace.domain.member_coupon.service;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
+import com.appcenter.marketplace.domain.member_coupon.MemberCouponType;
import com.appcenter.marketplace.domain.member_coupon.dto.res.IssuedCouponRes;
import com.appcenter.marketplace.domain.member_coupon.dto.res.CouponHandleRes;
@@ -7,9 +9,7 @@
public interface MemberCouponService {
void issuedCoupon(Long memberId, Long couponId);
- List getMemberCouponList(Long memberId);
- List getExpiredMemberCouponList(Long memberId);
- List getUsedMemberCouponList(Long memberId);
+ CouponPageRes getMemberCouponList(Long memberId, MemberCouponType type, Long couponId, Integer size);
CouponHandleRes updateCoupon(Long memberCouponId);
IssuedCouponRes getMemberCoupon(Long memberCouponId);
diff --git a/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/impl/MemberCouponServiceImpl.java b/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/impl/MemberCouponServiceImpl.java
index 9ff4b3c..5394782 100644
--- a/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/impl/MemberCouponServiceImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/member_coupon/service/impl/MemberCouponServiceImpl.java
@@ -1,10 +1,12 @@
package com.appcenter.marketplace.domain.member_coupon.service.impl;
import com.appcenter.marketplace.domain.coupon.Coupon;
+import com.appcenter.marketplace.domain.coupon.dto.res.CouponPageRes;
import com.appcenter.marketplace.domain.coupon.repository.CouponRepository;
import com.appcenter.marketplace.domain.member.Member;
import com.appcenter.marketplace.domain.member.repository.MemberRepository;
import com.appcenter.marketplace.domain.member_coupon.MemberCoupon;
+import com.appcenter.marketplace.domain.member_coupon.MemberCouponType;
import com.appcenter.marketplace.domain.member_coupon.dto.res.IssuedCouponRes;
import com.appcenter.marketplace.domain.member_coupon.dto.res.CouponHandleRes;
import com.appcenter.marketplace.domain.member_coupon.repository.MemberCouponRepository;
@@ -40,7 +42,7 @@ public void issuedCoupon(Long memberId, Long couponId) {
// 회원이 이미 해당 쿠폰을 발급받았는지 확인
if (!memberCouponRepository.existCouponByMemberId(member.getId(), coupon.getId())) {
- MemberCoupon memberCoupon = memberCouponRepository.save(MemberCoupon.builder()
+ memberCouponRepository.save(MemberCoupon.builder()
.member(member)
.coupon(coupon)
.isUsed(false)
@@ -54,20 +56,19 @@ public void issuedCoupon(Long memberId, Long couponId) {
@Override
@Transactional
- public List getMemberCouponList(Long memberId) {
- return getMemberCouponList(memberId, memberCouponRepository::findIssuedCouponResDtoByMemberId);
- }
-
- @Override
- @Transactional
- public List getExpiredMemberCouponList(Long memberId) {
- return getMemberCouponList(memberId, memberCouponRepository::findExpiredCouponResDtoByMemberId);
- }
-
- @Override
- @Transactional
- public List getUsedMemberCouponList(Long memberId) {
- return getMemberCouponList(memberId, memberCouponRepository::findUsedMemberCouponResDtoByMemberId);
+ public CouponPageRes getMemberCouponList(Long memberId, MemberCouponType type, Long memberCouponId, Integer size) {
+ List couponList;
+
+ switch (type) {
+ case EXPIRED ->
+ couponList = memberCouponRepository.findExpiredCouponResDtoByMemberId(memberId, memberCouponId, size);
+ case USED ->
+ couponList = memberCouponRepository.findUsedMemberCouponResDtoByMemberId(memberId, memberCouponId, size);
+ default ->
+ couponList = memberCouponRepository.findIssuedCouponResDtoByMemberId(memberId, memberCouponId, size);
+ };
+
+ return checkNextPageAndReturn(couponList, size);
}
@Override
@@ -84,11 +85,6 @@ public IssuedCouponRes getMemberCoupon(Long memberCouponId) {
return IssuedCouponRes.toDto(memberCoupon);
}
- private List getMemberCouponList(Long memberId, Function> findCoupons) {
- Member member = findMemberById(memberId);
- return findCoupons.apply(member.getId());
- }
-
private Member findMemberById(Long memberId) {
return memberRepository.findById(memberId).orElseThrow(() -> new CustomException(MEMBER_NOT_EXIST));
}
@@ -104,4 +100,15 @@ private Coupon findCouponById(Long couponId) {
private MemberCoupon findMemberCouponById(Long memberCouponId) {
return memberCouponRepository.findById(memberCouponId).orElseThrow(() -> new CustomException(COUPON_NOT_EXIST));
}
+
+ private CouponPageRes checkNextPageAndReturn(List couponList, Integer size) {
+ boolean hasNext = false;
+
+ if(couponList.size() > size){
+ hasNext = true;
+ couponList.remove(size.intValue());
+ }
+
+ return new CouponPageRes<>(couponList, hasNext);
+ }
}
\ No newline at end of file
diff --git a/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/RequestMarketService.java b/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/RequestMarketService.java
index b2454af..caf42f1 100644
--- a/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/RequestMarketService.java
+++ b/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/RequestMarketService.java
@@ -9,4 +9,10 @@ public interface RequestMarketService {
RequestMarketRes createRequestMarket(RequestMarketCreateReq requestMarketCreateReq);
Page getRequestMarkets(Integer page, Integer size);
+
+ boolean existRequestMarket(String marketName);
+
+ void deleteRequestMarket(Long marketId);
+
+ RequestMarket getRequestMarketName(String marketName);
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/impl/RequestMarketServiceImpl.java b/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/impl/RequestMarketServiceImpl.java
index 29e4b4a..70610d6 100644
--- a/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/impl/RequestMarketServiceImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/requestMarket/service/impl/RequestMarketServiceImpl.java
@@ -41,4 +41,19 @@ public Page getRequestMarkets(Integer page, Integer size) {
return requestMarketPage.map(RequestMarketRes::from);
}
+
+ @Override
+ public boolean existRequestMarket(String marketName) {
+ return requestMarketRepository.existsByName(marketName);
+ }
+
+ @Override
+ public void deleteRequestMarket(Long marketId) {
+ requestMarketRepository.deleteById(marketId);
+ }
+
+ @Override
+ public RequestMarket getRequestMarketName(String marketName) {
+ return requestMarketRepository.findRequestMarketByName(marketName);
+ }
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/tempMarket/controller/TempMarketAdminController.java b/src/main/java/com/appcenter/marketplace/domain/tempMarket/controller/TempMarketAdminController.java
index cbb0868..78fb57f 100644
--- a/src/main/java/com/appcenter/marketplace/domain/tempMarket/controller/TempMarketAdminController.java
+++ b/src/main/java/com/appcenter/marketplace/domain/tempMarket/controller/TempMarketAdminController.java
@@ -1,6 +1,5 @@
package com.appcenter.marketplace.domain.tempMarket.controller;
-import com.appcenter.marketplace.domain.tempMarket.TempMarket;
import com.appcenter.marketplace.domain.tempMarket.dto.req.TempMarketReq;
import com.appcenter.marketplace.domain.tempMarket.dto.res.TempMarketDetailRes;
import com.appcenter.marketplace.domain.tempMarket.dto.res.TempMarketHiddenRes;
@@ -11,21 +10,18 @@
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
-import java.util.List;
-
import static com.appcenter.marketplace.global.common.StatusCode.*;
import static com.appcenter.marketplace.global.common.StatusCode.MARKET_HIDDEN;
@Tag(name ="[관리자 공감매장]", description = "[관리자] 관리자 공감매장 관리")
@RestController
@RequiredArgsConstructor
-@RequestMapping("/api/admin/tempMarkets")
+@RequestMapping("/api/admin/temp-markets")
public class TempMarketAdminController {
private final TempMarketAdminService tempMarketAdminService;
@@ -62,6 +58,12 @@ public ResponseEntity>> getAllTempMarke
return ResponseEntity.ok(CommonResponse.from(MARKET_FOUND.getMessage(), tempMarketAdminService.getMarketList(page, size)));
}
+ @Operation(summary = "매장 정보 상세 조회", description = "매장 정보를 상세 조회합니다.")
+ @GetMapping("/{tempMarketId}")
+ public ResponseEntity> getTempMarket(@PathVariable Long tempMarketId){
+ return ResponseEntity.ok(CommonResponse.from(MARKET_FOUND.getMessage(), tempMarketAdminService.getMarket(tempMarketId)));
+ }
+
@Operation(summary = "매장 공개(숨김) 처리", description = "매장을 공개(숨김)처리가 가능합니다." )
@PutMapping("/hidden/{tempMarketId}")
public ResponseEntity> toggleTempMarket(
diff --git a/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/TempMarketAdminService.java b/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/TempMarketAdminService.java
index 1f39079..a958845 100644
--- a/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/TempMarketAdminService.java
+++ b/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/TempMarketAdminService.java
@@ -1,11 +1,9 @@
package com.appcenter.marketplace.domain.tempMarket.service;
-import com.appcenter.marketplace.domain.tempMarket.TempMarket;
import com.appcenter.marketplace.domain.tempMarket.dto.req.TempMarketReq;
import com.appcenter.marketplace.domain.tempMarket.dto.res.TempMarketDetailRes;
import com.appcenter.marketplace.domain.tempMarket.dto.res.TempMarketHiddenRes;
import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@@ -17,8 +15,11 @@ public interface TempMarketAdminService {
Page getMarketList(Integer page, Integer size);
+ TempMarketDetailRes getMarket(Long marketId);
+
TempMarketHiddenRes toggleHidden(Long marketId);
void deleteMarket(Long marketId);
+
}
diff --git a/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/impl/TempMarketAdminServiceImpl.java b/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/impl/TempMarketAdminServiceImpl.java
index c107449..d982fd7 100644
--- a/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/impl/TempMarketAdminServiceImpl.java
+++ b/src/main/java/com/appcenter/marketplace/domain/tempMarket/service/impl/TempMarketAdminServiceImpl.java
@@ -3,7 +3,7 @@
import com.appcenter.marketplace.domain.category.Category;
import com.appcenter.marketplace.domain.category.CategoryRepository;
import com.appcenter.marketplace.domain.requestMarket.RequestMarket;
-import com.appcenter.marketplace.domain.requestMarket.repository.RequestMarketRepository;
+import com.appcenter.marketplace.domain.requestMarket.service.RequestMarketService;
import com.appcenter.marketplace.domain.tempMarket.TempMarket;
import com.appcenter.marketplace.domain.tempMarket.dto.req.TempMarketReq;
import com.appcenter.marketplace.domain.tempMarket.dto.res.TempMarketDetailRes;
@@ -32,7 +32,8 @@
public class TempMarketAdminServiceImpl implements TempMarketAdminService {
private final TempMarketRepository tempMarketRepository;
private final CategoryRepository categoryRepository;
- private final RequestMarketRepository requestMarketRepository;
+
+ private final RequestMarketService requestMarketService;
@Value("${tempImage.upload.path}")
private String imageFolder;
@@ -49,11 +50,12 @@ public TempMarketDetailRes createMarket(TempMarketReq marketReq, MultipartFile m
TempMarket market =tempMarketRepository.save(marketReq.toEntity(category, imageName));
// 요청 매장 삭제 로직
- // 요청 매장의 이름이나 주소가 일치하는 매장만 삭제
- if(requestMarketRepository.existsByName(market.getName()) || requestMarketRepository.existsByAddress(market.getAddress())) {
- RequestMarket requestMarket = requestMarketRepository.findRequestMarketByName(market.getName());
- requestMarketRepository.deleteById(requestMarket.getId());
+ // 요청 매장의 이름(unique)가 일치하는 매장만 삭제
+ if(requestMarketService.existRequestMarket(market.getName())){
+ RequestMarket requestMarket = requestMarketService.getRequestMarketName(market.getName());
+ requestMarketService.deleteRequestMarket(requestMarket.getId());
}
+
return TempMarketDetailRes.toDto(market);
}
@@ -88,6 +90,12 @@ public Page getMarketList(Integer page, Integer size) {
return tempMarketPage.map(TempMarketDetailRes::toDto);
}
+ @Override
+ public TempMarketDetailRes getMarket(Long marketId) {
+ TempMarket tempMarket = findMarket(marketId);
+ return TempMarketDetailRes.toDto(tempMarket);
+ }
+
@Override
@Transactional
public TempMarketHiddenRes toggleHidden(Long marketId) {
@@ -104,6 +112,7 @@ public void deleteMarket(Long marketId) {
}
+
private Category findCategory(String category) {
if (Major.exists(category)) {
return categoryRepository.findByMajor(Major.valueOf(category))