From 3d0a2dcec6e6bcb33e41f0e29fb86271a3bee9b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9C=EC=A4=80?= <104981505+xeoxxn@users.noreply.github.com> Date: Mon, 19 Oct 2026 15:15:48 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=ED=99=95=EC=9D=B8=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EC=83=81=ED=83=9C=EB=A5=BC=20REJECTED=EB=A1=9C=20?= =?UTF-8?q?=EB=B0=94=EA=BE=BC=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/admin/welfare/fee/usecase/AdminFeeReviewUseCase.java | 2 +- .../stream/api/app/welfare/fee/response/FeeResponse.java | 4 ++-- .../welfare/domain/fee/domain/StudentTransferStatus.java | 2 +- .../stream/welfare/domain/fee/domain/TransferStatus.java | 3 ++- .../db/migration/V23__rename_needs_check_to_rejected.sql | 5 +++++ 5 files changed, 11 insertions(+), 5 deletions(-) create mode 100644 infrastructure/db/src/main/resources/db/migration/V23__rename_needs_check_to_rejected.sql 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/StudentTransferStatus.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/fee/domain/StudentTransferStatus.java index 12f35814..a7d17782 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 @@ -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'; From 923b450754ad547a85c12d59a1cabfc92f46e24a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9D=B4=EC=84=9C=EC=A4=80?= <104981505+xeoxxn@users.noreply.github.com> Date: Mon, 19 Oct 2026 15:16:48 +0900 Subject: [PATCH 2/2] =?UTF-8?q?docs:=20=EB=82=A9=EB=B6=80=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD=EC=9D=84=20?= =?UTF-8?q?API=20=EB=AC=B8=EC=84=9C=EC=99=80=20=EC=A3=BC=EC=84=9D=EC=97=90?= =?UTF-8?q?=20=EB=B0=98=EC=98=81=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/ac/kookmin/stream/api/admin/welfare/fee/AdminFeeApi.java | 2 +- .../api/admin/welfare/fee/request/FeeStatusUpdateRequest.java | 2 +- .../kookmin/stream/welfare/domain/fee/domain/FeeErrorCode.java | 2 +- .../stream/welfare/domain/fee/domain/StudentTransferStatus.java | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) 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/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 a7d17782..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;