Skip to content

Commit ab09f31

Browse files
committed
feat: 파트너가 발급한 쿠폰 전체 조회기능 추가
1 parent 2324d98 commit ab09f31

File tree

4 files changed

+32
-0
lines changed

4 files changed

+32
-0
lines changed

src/main/java/com/trashheroesbe/feature/coupon/api/CouponPartnerController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.trashheroesbe.feature.coupon.dto.request.CouponCreateRequest;
77
import com.trashheroesbe.feature.coupon.dto.request.CouponUpdateRequest;
88
import com.trashheroesbe.feature.coupon.dto.response.CouponCreateResponse;
9+
import com.trashheroesbe.feature.coupon.dto.response.PartnerCouponResponse;
910
import com.trashheroesbe.global.response.ApiResponse;
1011
import com.trashheroesbe.global.auth.security.CustomerDetails;
1112
import jakarta.validation.Valid;
@@ -14,10 +15,12 @@
1415
import org.springframework.web.bind.annotation.PathVariable;
1516
import org.springframework.web.bind.annotation.PostMapping;
1617
import org.springframework.web.bind.annotation.PatchMapping;
18+
import org.springframework.web.bind.annotation.GetMapping;
1719
import org.springframework.web.bind.annotation.RequestBody;
1820
import org.springframework.web.bind.annotation.RequestMapping;
1921
import org.springframework.web.bind.annotation.RestController;
2022
import org.springframework.security.core.annotation.AuthenticationPrincipal;
23+
import java.util.List;
2124

2225
@RestController
2326
@RequiredArgsConstructor
@@ -26,6 +29,14 @@ public class CouponPartnerController implements CouponPartnerControllerApi {
2629

2730
private final CouponService couponService;
2831

32+
@Override
33+
@GetMapping("/coupons")
34+
public ApiResponse<List<PartnerCouponResponse>> getPartnerCoupons(
35+
@AuthenticationPrincipal CustomerDetails customerDetails
36+
) {
37+
return ApiResponse.success(OK, couponService.getPartnerCoupons(customerDetails));
38+
}
39+
2940
@Override
3041
@PostMapping("/coupons")
3142
public ApiResponse<CouponCreateResponse> createCoupon(

src/main/java/com/trashheroesbe/feature/coupon/api/CouponPartnerControllerApi.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.trashheroesbe.feature.coupon.dto.request.CouponCreateRequest;
44
import com.trashheroesbe.feature.coupon.dto.request.CouponUpdateRequest;
55
import com.trashheroesbe.feature.coupon.dto.response.CouponCreateResponse;
6+
import com.trashheroesbe.feature.coupon.dto.response.PartnerCouponResponse;
67
import com.trashheroesbe.global.response.ApiResponse;
78
import io.swagger.v3.oas.annotations.Operation;
89
import io.swagger.v3.oas.annotations.Parameter;
@@ -11,11 +12,17 @@
1112
import jakarta.validation.Valid;
1213
import org.springframework.web.bind.annotation.PathVariable;
1314
import org.springframework.web.bind.annotation.RequestBody;
15+
import java.util.List;
1416
import com.trashheroesbe.global.auth.security.CustomerDetails;
1517

1618
@Tag(name = "Coupon", description = "쿠폰 생성/조회 API")
1719
public interface CouponPartnerControllerApi {
1820

21+
@Operation(summary = "파트너 쿠폰 전체 조회", description = "파트너가 발급한 쿠폰 목록을 조회합니다.")
22+
ApiResponse<List<PartnerCouponResponse>> getPartnerCoupons(
23+
@AuthenticationPrincipal CustomerDetails customerDetails
24+
);
25+
1926
@Operation(summary = "쿠폰 생성", description = "파트너가 쿠폰을 생성합니다.")
2027
ApiResponse<CouponCreateResponse> createCoupon(
2128
@AuthenticationPrincipal CustomerDetails customerDetails,

src/main/java/com/trashheroesbe/feature/coupon/application/CouponService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import com.trashheroesbe.feature.coupon.dto.request.CouponCreateRequest;
55
import com.trashheroesbe.feature.coupon.dto.request.CouponUpdateRequest;
66
import com.trashheroesbe.feature.coupon.dto.response.CouponCreateResponse;
7+
import com.trashheroesbe.feature.coupon.dto.response.PartnerCouponResponse;
78
import com.trashheroesbe.feature.coupon.infrastructure.CouponRepository;
89
import com.trashheroesbe.feature.partner.domain.entity.Partner;
910
import com.trashheroesbe.global.exception.BusinessException;
1011
import com.trashheroesbe.global.response.type.ErrorCode;
1112
import com.trashheroesbe.global.auth.security.CustomerDetails;
13+
import java.util.List;
1214
import lombok.RequiredArgsConstructor;
1315
import org.springframework.stereotype.Service;
1416
import org.springframework.transaction.annotation.Transactional;
@@ -20,6 +22,14 @@ public class CouponService {
2022

2123
private final CouponRepository couponRepository;
2224

25+
@Transactional(readOnly = true)
26+
public List<PartnerCouponResponse> getPartnerCoupons(CustomerDetails customerDetails) {
27+
Partner partner = extractPartner(customerDetails);
28+
return couponRepository.findAllByPartnerIdFetch(partner.getId()).stream()
29+
.map(PartnerCouponResponse::from)
30+
.toList();
31+
}
32+
2333
public CouponCreateResponse createCoupon(
2434
CustomerDetails customerDetails,
2535
CouponCreateRequest request

src/main/java/com/trashheroesbe/feature/coupon/infrastructure/CouponRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.trashheroesbe.feature.coupon.domain.entity.Coupon;
44
import java.util.Optional;
5+
import java.util.List;
56
import org.springframework.data.jpa.repository.JpaRepository;
67
import org.springframework.data.jpa.repository.Query;
78
import org.springframework.data.repository.query.Param;
@@ -12,4 +13,7 @@ public interface CouponRepository extends JpaRepository<Coupon, Long> {
1213

1314
@Query("select c from Coupon c join fetch c.partner where c.id = :id")
1415
Optional<Coupon> findByIdFetchPartner(@Param("id") Long id);
16+
17+
@Query("select c from Coupon c join fetch c.partner p where p.id = :partnerId")
18+
List<Coupon> findAllByPartnerIdFetch(@Param("partnerId") Long partnerId);
1519
}

0 commit comments

Comments
 (0)