diff --git a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/AdminFeeApi.java b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/AdminFeeApi.java index 1b4f29e0..fd6a1fe3 100644 --- a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/AdminFeeApi.java +++ b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/AdminFeeApi.java @@ -40,7 +40,7 @@ ApiResponse> getRequests( /** 납부 상태 처리. 이미 처리한 요청도 다시 바꿀 수 있다. */ @Operation(summary = "학생회비 납부 상태 수정", description = "납부 상태를 바꾼다. 잘못 처리한 경우를 되돌릴 수 있도록 이미 처리한 요청도 다시 바꿀 수 있다. " - + "확인필요(NEEDS_CHECK)로 바꿀 때는 학생에게 보여줄 안내 문구가 필요하다. " + + "확인필요(REJECTED)로 바꿀 때는 학생에게 보여줄 안내 문구가 필요하다. " + "확인필요 학생은 직접 재제출할 수 없으므로, 다시 내게 하려면 납부 전(UNPAID)으로 되돌린다.") @ApiErrorCode(type = FeeErrorCode.class, codes = {"INVALID_TRANSFER_STATUS", "INVALID_ADMIN_NOTE", "FEE_REQUEST_NOT_FOUND"}) diff --git a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/request/FeeStatusUpdateRequest.java b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/request/FeeStatusUpdateRequest.java index 30400142..8e5c6c1d 100644 --- a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/request/FeeStatusUpdateRequest.java +++ b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/request/FeeStatusUpdateRequest.java @@ -7,7 +7,7 @@ * 안내 문구는 확인필요일 때만 필수라 Bean Validation 대신 UseCase에서 검증한다. */ public record FeeStatusUpdateRequest( - @Schema(description = "변경할 납부 상태", example = "NEEDS_CHECK") + @Schema(description = "변경할 납부 상태", example = "REJECTED") String status, @Schema(description = "관리자 안내 문구 (최대 255자). 확인필요일 때 필수", diff --git a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/usecase/AdminFeeReviewUseCase.java b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/usecase/AdminFeeReviewUseCase.java index a173414f..bb59ae3e 100644 --- a/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/usecase/AdminFeeReviewUseCase.java +++ b/api/admin-api/src/main/java/kr/ac/kookmin/stream/api/admin/welfare/fee/usecase/AdminFeeReviewUseCase.java @@ -39,7 +39,7 @@ public StudentTransferStatus review(Long transferStatusId, TransferStatus status // 확인필요는 학생에게 보여줄 안내 문구가 있어야 의미가 있다. 그 외 상태에서는 문구를 받아도 버린다 private void validateAdminNote(TransferStatus status, String adminNote) { - if (status != TransferStatus.NEEDS_CHECK) { + if (status != TransferStatus.REJECTED) { return; } if (adminNote == null || adminNote.isBlank() || adminNote.length() > MAX_ADMIN_NOTE_LENGTH) { diff --git a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/fee/response/FeeResponse.java b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/fee/response/FeeResponse.java index 9d69afa3..5bb11ca7 100644 --- a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/fee/response/FeeResponse.java +++ b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/fee/response/FeeResponse.java @@ -28,7 +28,7 @@ public record FeeResponse( */ public static FeeResponse of(StudentTransferStatus transferStatus, FeeAccount account) { Integer remainingSemesters = transferStatus.getRemainingSemesters(); - boolean payable = remainingSemesters != null && transferStatus.getStatus() != TransferStatus.NEEDS_CHECK; + boolean payable = remainingSemesters != null && transferStatus.getStatus() != TransferStatus.REJECTED; Long transferAmount = payable ? account.calculateTransferAmount(remainingSemesters) : null; @@ -43,7 +43,7 @@ public static FeeResponse of(StudentTransferStatus transferStatus, FeeAccount ac transferStatus.getRequestedAt(), // 납부 확인 시각은 PAID일 때의 처리 시각이다. 그 외 상태에서는 보여주지 않는다 transferStatus.getStatus() == TransferStatus.PAID ? transferStatus.getReviewedAt() : null, - transferStatus.getStatus() == TransferStatus.NEEDS_CHECK ? transferStatus.getAdminNote() : null + transferStatus.getStatus() == TransferStatus.REJECTED ? transferStatus.getAdminNote() : null ); } } diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/FeeErrorCode.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/FeeErrorCode.java index 763ce85a..9850480b 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/FeeErrorCode.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/FeeErrorCode.java @@ -11,7 +11,7 @@ @AllArgsConstructor public enum FeeErrorCode implements ErrorCode { - // 상태 문자열이 UNPAID/PENDING/PAID/NEEDS_CHECK가 아닌 경우에 쓴다 + // 상태 문자열이 UNPAID/PENDING/PAID/REJECTED가 아닌 경우에 쓴다 INVALID_TRANSFER_STATUS(ErrorStatus.BAD_REQUEST, "유효하지 않은 납부 상태입니다."), INVALID_REMAINING_SEMESTERS(ErrorStatus.BAD_REQUEST, "유효하지 않은 남은 학기 수입니다."), INVALID_PROOF_IMAGE(ErrorStatus.BAD_REQUEST, "유효하지 않은 인증 이미지입니다."), diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/StudentTransferStatus.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/StudentTransferStatus.java index 12f35814..b89ebfb2 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/StudentTransferStatus.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/StudentTransferStatus.java @@ -18,7 +18,7 @@ public class StudentTransferStatus { // 학생이 입력한 남은 학기 수와, 그 근거로 올린 학점이수현황 캡처. 제출 전에는 둘 다 null이다 private Integer remainingSemesters; private String proofImageKey; - // 관리자가 확인필요로 처리하며 남긴 안내 문구. NEEDS_CHECK일 때만 값이 있다 + // 관리자가 확인필요로 처리하며 남긴 안내 문구. REJECTED일 때만 값이 있다 private String adminNote; private LocalDateTime requestedAt; private LocalDateTime reviewedAt; @@ -88,7 +88,7 @@ public void requestConfirmation(LocalDateTime now) { */ public void review(TransferStatus reviewedStatus, String adminNote, LocalDateTime now) { this.status = reviewedStatus; - this.adminNote = reviewedStatus == TransferStatus.NEEDS_CHECK ? adminNote : null; + this.adminNote = reviewedStatus == TransferStatus.REJECTED ? adminNote : null; this.reviewedAt = reviewedStatus == TransferStatus.PENDING ? null : now; } diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/TransferStatus.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/TransferStatus.java index b9244ebb..bea8025c 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/TransferStatus.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/TransferStatus.java @@ -6,7 +6,8 @@ public enum TransferStatus { UNPAID, PENDING, PAID, - NEEDS_CHECK; + // 운영진이 납부를 확인하지 못해 돌려보낸 상태. 화면에서는 "확인필요"로 보인다 + REJECTED; // Spring MVC는 잘못된 enum 문자열을 MethodArgumentNotValidException이 아닌 다른 예외로 던지므로 // 컨트롤러가 String으로 받아 이 메서드로 변환한다. null(상태 필터 미지정)은 그대로 null을 돌려준다. diff --git a/infrastructure/db/src/main/resources/db/migration/V23__rename_needs_check_to_rejected.sql b/infrastructure/db/src/main/resources/db/migration/V23__rename_needs_check_to_rejected.sql new file mode 100644 index 00000000..a60997ff --- /dev/null +++ b/infrastructure/db/src/main/resources/db/migration/V23__rename_needs_check_to_rejected.sql @@ -0,0 +1,5 @@ +-- 확인필요 상태의 이름을 NEEDS_CHECK에서 REJECTED로 바꾼다. 화면 표기(확인필요)는 그대로다. +-- 반려된 학생이 다시 납부하는 흐름으로 바뀌므로(다음 PR) 상태 이름을 하는 일에 맞춘다. +UPDATE student_transfer_statuses +SET status = 'REJECTED' +WHERE status = 'NEEDS_CHECK';