카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Some checks are pending
Verify / source-contract (push) Waiting to run
Some checks are pending
Verify / source-contract (push) Waiting to run
This commit is contained in:
parent
1b88ac69fc
commit
8b0e39d260
1 changed files with 95 additions and 0 deletions
|
|
@ -0,0 +1,95 @@
|
|||
package com.acquirex.approval;
|
||||
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Positive;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 카드 매입 승인 REST 컨트롤러.
|
||||
* Spring Boot 3 전환: javax.validation → jakarta.validation
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/acquisitions")
|
||||
public class CardAcquisitionController {
|
||||
|
||||
private final CardAcquisitionService service;
|
||||
|
||||
public CardAcquisitionController(CardAcquisitionService service) {
|
||||
this.service = service;
|
||||
}
|
||||
|
||||
@PostMapping
|
||||
public ResponseEntity<CardAcquisitionResponse> createAcquisition(
|
||||
@Valid @RequestBody CreateAcquisitionRequest request) {
|
||||
CardAcquisition acquisition = service.createAcquisition(
|
||||
request.cardNumber(), request.merchantId(), request.amount());
|
||||
return ResponseEntity.status(HttpStatus.CREATED)
|
||||
.body(CardAcquisitionResponse.from(acquisition));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<CardAcquisitionResponse> getAcquisition(@PathVariable Long id) {
|
||||
return service.findById(id)
|
||||
.map(CardAcquisitionResponse::from)
|
||||
.map(ResponseEntity::ok)
|
||||
.orElse(ResponseEntity.notFound().build());
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public ResponseEntity<List<CardAcquisitionResponse>> getAllAcquisitions(
|
||||
@RequestParam(required = false) CardAcquisition.ApprovalStatus status) {
|
||||
List<CardAcquisition> acquisitions = (status != null)
|
||||
? service.findByStatus(status) : service.findAll();
|
||||
return ResponseEntity.ok(acquisitions.stream().map(CardAcquisitionResponse::from).toList());
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/approve")
|
||||
public ResponseEntity<CardAcquisitionResponse> approveAcquisition(
|
||||
@PathVariable Long id, @RequestBody ApproveRequest request) {
|
||||
return ResponseEntity.ok(CardAcquisitionResponse.from(service.approve(id, request.approver())));
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/reject")
|
||||
public ResponseEntity<CardAcquisitionResponse> rejectAcquisition(
|
||||
@PathVariable Long id, @RequestBody RejectRequest request) {
|
||||
return ResponseEntity.ok(CardAcquisitionResponse.from(service.reject(id, request.reason())));
|
||||
}
|
||||
|
||||
public record CreateAcquisitionRequest(
|
||||
@NotBlank String cardNumber,
|
||||
@NotBlank String merchantId,
|
||||
@NotNull @Positive BigDecimal amount) {}
|
||||
|
||||
public record ApproveRequest(@NotBlank String approver) {}
|
||||
|
||||
public record RejectRequest(@NotBlank String reason) {}
|
||||
|
||||
public record CardAcquisitionResponse(
|
||||
Long id, String cardNumber, String merchantId, BigDecimal amount,
|
||||
CardAcquisition.ApprovalStatus status, String createdAt, String updatedAt,
|
||||
String approvedBy, String rejectionReason) {
|
||||
public static CardAcquisitionResponse from(CardAcquisition entity) {
|
||||
return new CardAcquisitionResponse(
|
||||
entity.getId(),
|
||||
maskCardNumber(entity.getCardNumber()),
|
||||
entity.getMerchantId(),
|
||||
entity.getAmount(),
|
||||
entity.getStatus(),
|
||||
entity.getCreatedAt().toString(),
|
||||
entity.getUpdatedAt() != null ? entity.getUpdatedAt().toString() : null,
|
||||
entity.getApprovedBy(),
|
||||
entity.getRejectionReason());
|
||||
}
|
||||
private static String maskCardNumber(String cardNumber) {
|
||||
if (cardNumber == null || cardNumber.length() < 8) return "****";
|
||||
return cardNumber.substring(0, 4) + "****" + cardNumber.substring(cardNumber.length() - 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue