카드 매입 승인 경로 Spring Boot 3 전환 (ACX-E2E-1785394564819)
Some checks failed
Verify / source-contract (push) Has been cancelled
Some checks failed
Verify / source-contract (push) Has been cancelled
This commit is contained in:
parent
ac3006a215
commit
b379184b90
1 changed files with 70 additions and 0 deletions
|
|
@ -0,0 +1,70 @@
|
|||
package com.acquirex.controller;
|
||||
|
||||
import com.acquirex.service.CardAcquisitionService;
|
||||
import com.acquirex.service.CardAcquisitionService.AcquisitionRequest;
|
||||
import com.acquirex.service.CardAcquisitionService.AcquisitionResponse;
|
||||
import com.acquirex.service.CardAcquisitionService.ApprovalRequest;
|
||||
import com.acquirex.service.CardAcquisitionService.AcquisitionNotFoundException;
|
||||
import com.acquirex.service.CardAcquisitionService.InvalidAcquisitionStateException;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.validation.constraints.*;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/acquisitions")
|
||||
@RequiredArgsConstructor
|
||||
public class CardAcquisitionController {
|
||||
private final CardAcquisitionService service;
|
||||
|
||||
public record RequestDto(
|
||||
@NotBlank(message = "카드번호 필수") @Size(min = 13, max = 19) String cardNumber,
|
||||
@NotBlank @Size(max = 20) String merchantId,
|
||||
@NotNull @DecimalMin("0.01") BigDecimal amount) {}
|
||||
|
||||
public record ApprovalDto(@NotBlank @Size(max = 50) String approvedBy) {}
|
||||
|
||||
@PostMapping
|
||||
public ResponseEntity<AcquisitionResponse> requestAcquisition(@Valid @RequestBody RequestDto dto) {
|
||||
return ResponseEntity.status(HttpStatus.CREATED)
|
||||
.body(service.requestAcquisition(new AcquisitionRequest(dto.cardNumber(), dto.merchantId(), dto.amount())));
|
||||
}
|
||||
|
||||
@GetMapping("/{id}")
|
||||
public ResponseEntity<AcquisitionResponse> getAcquisition(@PathVariable Long id) {
|
||||
return ResponseEntity.ok(service.getAcquisition(id));
|
||||
}
|
||||
|
||||
@GetMapping("/pending")
|
||||
public ResponseEntity<List<AcquisitionResponse>> getPendingAcquisitions() {
|
||||
return ResponseEntity.ok(service.getPendingAcquisitions());
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/approve")
|
||||
public ResponseEntity<AcquisitionResponse> approveAcquisition(@PathVariable Long id, @Valid @RequestBody ApprovalDto dto) {
|
||||
return ResponseEntity.ok(service.approveAcquisition(id, new ApprovalRequest(dto.approvedBy())));
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/reject")
|
||||
public ResponseEntity<AcquisitionResponse> rejectAcquisition(@PathVariable Long id, @Valid @RequestBody ApprovalDto dto) {
|
||||
return ResponseEntity.ok(service.rejectAcquisition(id, new ApprovalRequest(dto.approvedBy())));
|
||||
}
|
||||
|
||||
@ExceptionHandler(AcquisitionNotFoundException.class)
|
||||
public ResponseEntity<Map<String, Object>> handleNotFound(AcquisitionNotFoundException ex) {
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND)
|
||||
.body(Map.of("timestamp", LocalDateTime.now(), "status", 404, "error", ex.getMessage()));
|
||||
}
|
||||
|
||||
@ExceptionHandler(InvalidAcquisitionStateException.class)
|
||||
public ResponseEntity<Map<String, Object>> handleInvalidState(InvalidAcquisitionStateException ex) {
|
||||
return ResponseEntity.badRequest()
|
||||
.body(Map.of("timestamp", LocalDateTime.now(), "status", 400, "error", ex.getMessage()));
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue