diff --git a/src/main/java/com/acquirex/controller/AcquisitionController.java b/src/main/java/com/acquirex/controller/AcquisitionController.java new file mode 100644 index 0000000..5e776bc --- /dev/null +++ b/src/main/java/com/acquirex/controller/AcquisitionController.java @@ -0,0 +1,59 @@ +package com.acquirex.controller; + +import com.acquirex.service.AcquisitionRequest; +import com.acquirex.service.AcquisitionResponse; +import com.acquirex.service.AcquisitionService; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +/** + * 카드 매입 승인 REST 컨트롤러 - Spring Boot 3 (jakarta.validation) + */ +@RestController +@RequestMapping("/api/v1/acquisitions") +@RequiredArgsConstructor +@Slf4j +public class AcquisitionController { + + private final AcquisitionService acquisitionService; + + @PostMapping + public ResponseEntity registerAcquisition(@Valid @RequestBody AcquisitionRequest request) { + log.info("매입 요청 수신: {}", request); + return ResponseEntity.status(HttpStatus.CREATED).body(acquisitionService.registerAcquisition(request)); + } + + @PostMapping("/{transactionId}/approve") + public ResponseEntity approveAcquisition(@PathVariable String transactionId) { + log.info("매입 승인 요청: transactionId={}", transactionId); + return ResponseEntity.ok(acquisitionService.approveAcquisition(transactionId)); + } + + @PostMapping("/{transactionId}/reject") + public ResponseEntity rejectAcquisition(@PathVariable String transactionId, @RequestBody Map body) { + log.info("매입 거절 요청: transactionId={}", transactionId); + return ResponseEntity.ok(acquisitionService.rejectAcquisition(transactionId, body.getOrDefault("reason", "사유 미지정"))); + } + + @GetMapping("/{transactionId}") + public ResponseEntity getAcquisition(@PathVariable String transactionId) { + log.info("매입 조회 요청: transactionId={}", transactionId); + return ResponseEntity.ok(acquisitionService.getAcquisition(transactionId)); + } + + @GetMapping + public ResponseEntity> getAcquisitions(@RequestParam(required = false) String merchantId) { + log.info("매입 목록 조회: merchantId={}", merchantId); + List responses = (merchantId != null && !merchantId.isBlank()) + ? acquisitionService.getAcquisitionsByMerchant(merchantId) + : acquisitionService.getPendingAcquisitions(); + return ResponseEntity.ok(responses); + } +} \ No newline at end of file