From b04365350423ff3418c858dbbc2bc6afb87bdea1 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Thu, 30 Jul 2026 13:00:26 +0000 Subject: [PATCH] =?UTF-8?q?=EC=B9=B4=EB=93=9C=20=EB=A7=A4=EC=9E=85=20?= =?UTF-8?q?=EC=8A=B9=EC=9D=B8=20=EA=B2=BD=EB=A1=9C=20Spring=20Boot=203=20?= =?UTF-8?q?=EC=A0=84=ED=99=98=20(ACX-E2E-1785394564819)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AcquisitionApprovalController.java | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 proj-acquirex/src/main/java/com/acquirex/approval/controller/AcquisitionApprovalController.java diff --git a/proj-acquirex/src/main/java/com/acquirex/approval/controller/AcquisitionApprovalController.java b/proj-acquirex/src/main/java/com/acquirex/approval/controller/AcquisitionApprovalController.java new file mode 100644 index 0000000..a3419e2 --- /dev/null +++ b/proj-acquirex/src/main/java/com/acquirex/approval/controller/AcquisitionApprovalController.java @@ -0,0 +1,61 @@ +package com.acquirex.approval.controller; + +import com.acquirex.approval.domain.AcquisitionApproval.ApprovalStatus; +import com.acquirex.approval.service.AcquisitionApprovalService; +import com.acquirex.approval.service.AcquisitionApprovalService.ApprovalRequest; +import com.acquirex.approval.service.AcquisitionApprovalService.ApprovalResponse; +import jakarta.validation.Valid; +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.* 네임스페이스 적용 */ +@RestController +@RequestMapping("/api/v1/acquisitions") +public class AcquisitionApprovalController { + + private final AcquisitionApprovalService service; + + public AcquisitionApprovalController(AcquisitionApprovalService service) { + this.service = service; + } + + @PostMapping("/approvals") + public ResponseEntity createApproval(@Valid @RequestBody ApprovalRequest request) { + return ResponseEntity.status(HttpStatus.CREATED).body(service.processApproval(request)); + } + + @GetMapping("/approvals/{approvalNumber}") + public ResponseEntity getApproval(@PathVariable String approvalNumber) { + return ResponseEntity.ok(service.findByApprovalNumber(approvalNumber)); + } + + @GetMapping("/merchants/{merchantId}/approvals") + public ResponseEntity> getApprovalsByMerchant( + @PathVariable String merchantId, @RequestParam(required = false) ApprovalStatus status) { + return ResponseEntity.ok(service.findByMerchantId(merchantId, status)); + } + + @PostMapping("/approvals/{id}/cancel") + public ResponseEntity cancelApproval(@PathVariable Long id) { + return ResponseEntity.ok(service.cancelApproval(id)); + } + + @ExceptionHandler(jakarta.validation.ConstraintViolationException.class) + public ResponseEntity> handleConstraintViolation(jakarta.validation.ConstraintViolationException ex) { + return ResponseEntity.badRequest().body(Map.of("error", ex.getMessage())); + } + + @ExceptionHandler(IllegalArgumentException.class) + public ResponseEntity> handleIllegalArgument(IllegalArgumentException ex) { + return ResponseEntity.badRequest().body(Map.of("error", ex.getMessage())); + } + + @ExceptionHandler(IllegalStateException.class) + public ResponseEntity> handleIllegalState(IllegalStateException ex) { + return ResponseEntity.status(HttpStatus.CONFLICT).body(Map.of("error", ex.getMessage())); + } +} \ No newline at end of file