From 9536892e5a261152637fb71a35ddc59274746344 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Thu, 30 Jul 2026 08:08:07 +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 --- .../CardAcquisitionApprovalController.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/main/java/com/acquirex/approval/controller/CardAcquisitionApprovalController.java diff --git a/src/main/java/com/acquirex/approval/controller/CardAcquisitionApprovalController.java b/src/main/java/com/acquirex/approval/controller/CardAcquisitionApprovalController.java new file mode 100644 index 0000000..b5bed44 --- /dev/null +++ b/src/main/java/com/acquirex/approval/controller/CardAcquisitionApprovalController.java @@ -0,0 +1,87 @@ +package com.acquirex.approval.controller; + +import com.acquirex.approval.domain.ApprovalStatus; +import com.acquirex.approval.dto.ApprovalRequest; +import com.acquirex.approval.dto.ApprovalResponse; +import com.acquirex.approval.service.CardAcquisitionApprovalService; +import jakarta.validation.Valid; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.*; + +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; + +/** + * REST controller for card acquisition approval endpoints. + * Migrated to Spring Boot 3 with Jakarta EE 9+ (jakarta.*) annotations. + */ +@RestController +@RequestMapping("/api/v1/approvals") +public class CardAcquisitionApprovalController { + + private static final Logger log = LoggerFactory.getLogger(CardAcquisitionApprovalController.class); + private final CardAcquisitionApprovalService approvalService; + + public CardAcquisitionApprovalController(CardAcquisitionApprovalService approvalService) { + this.approvalService = approvalService; + } + + /** + * Process a card acquisition approval request. + * @param request the approval request with validation + * @return the approval response + */ + @PostMapping + public ResponseEntity processApproval(@Valid @RequestBody ApprovalRequest request) { + log.info("Received approval request: {}", request.getRequestId()); + ApprovalResponse response = approvalService.processApproval(request); + return ResponseEntity.status(mapToHttpStatus(response.getStatus())).body(response); + } + + /** + * Handle validation errors from @Valid annotations. + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public ResponseEntity> handleValidationErrors(MethodArgumentNotValidException ex) { + Map fieldErrors = new HashMap<>(); + ex.getBindingResult().getFieldErrors().forEach(e -> fieldErrors.put(e.getField(), e.getDefaultMessage())); + Map response = new HashMap<>(); + response.put("timestamp", LocalDateTime.now()); + response.put("status", HttpStatus.BAD_REQUEST.value()); + response.put("error", "Validation Failed"); + response.put("fieldErrors", fieldErrors); + log.warn("Validation error: {}", fieldErrors); + return ResponseEntity.badRequest().body(response); + } + + /** + * Handle illegal argument exceptions. + */ + @ExceptionHandler(IllegalArgumentException.class) + public ResponseEntity> handleIllegalArgument(IllegalArgumentException ex) { + Map response = new HashMap<>(); + response.put("timestamp", LocalDateTime.now()); + response.put("status", HttpStatus.BAD_REQUEST.value()); + response.put("error", "Bad Request"); + response.put("message", ex.getMessage()); + log.warn("Illegal argument: {}", ex.getMessage()); + return ResponseEntity.badRequest().body(response); + } + + /** + * Map approval status to HTTP status. + */ + private HttpStatus mapToHttpStatus(ApprovalStatus status) { + return switch (status) { + case APPROVED -> HttpStatus.OK; + case REJECTED -> HttpStatus.BAD_REQUEST; + case PENDING -> HttpStatus.ACCEPTED; + case CANCELLED -> HttpStatus.GONE; + }; + } +} \ No newline at end of file