Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ ApiResponse<PageResponse<AdminFeeSearchResponse>> getRequests(
/** 납부 상태 처리. 이미 처리한 요청도 다시 바꿀 수 있다. */
@Operation(summary = "학생회비 납부 상태 수정",
description = "납부 상태를 바꾼다. 잘못 처리한 경우를 되돌릴 수 있도록 이미 처리한 요청도 다시 바꿀 수 있다. "
+ "확인필요(NEEDS_CHECK)로 바꿀 때는 학생에게 보여줄 안내 문구가 필요하다. "
+ "확인필요(REJECTED)로 바꿀 때는 학생에게 보여줄 안내 문구가 필요하다. "
+ "확인필요 학생은 직접 재제출할 수 없으므로, 다시 내게 하려면 납부 전(UNPAID)으로 되돌린다.")
@ApiErrorCode(type = FeeErrorCode.class,
codes = {"INVALID_TRANSFER_STATUS", "INVALID_ADMIN_NOTE", "FEE_REQUEST_NOT_FOUND"})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
* 안내 문구는 확인필요일 때만 필수라 Bean Validation 대신 UseCase에서 검증한다.
*/
public record FeeStatusUpdateRequest(
@Schema(description = "변경할 납부 상태", example = "NEEDS_CHECK")
@Schema(description = "변경할 납부 상태", example = "REJECTED")
String status,

@Schema(description = "관리자 안내 문구 (최대 255자). 확인필요일 때 필수",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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, "유효하지 않은 인증 이미지입니다."),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ public enum TransferStatus {
UNPAID,
PENDING,
PAID,
NEEDS_CHECK;
// 운영진이 납부를 확인하지 못해 돌려보낸 상태. 화면에서는 "확인필요"로 보인다
REJECTED;

// Spring MVC는 잘못된 enum 문자열을 MethodArgumentNotValidException이 아닌 다른 예외로 던지므로
// 컨트롤러가 String으로 받아 이 메서드로 변환한다. null(상태 필터 미지정)은 그대로 null을 돌려준다.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
-- 확인필요 상태의 이름을 NEEDS_CHECK에서 REJECTED로 바꾼다. 화면 표기(확인필요)는 그대로다.
-- 반려된 학생이 다시 납부하는 흐름으로 바뀌므로(다음 PR) 상태 이름을 하는 일에 맞춘다.
UPDATE student_transfer_statuses
SET status = 'REJECTED'
WHERE status = 'NEEDS_CHECK';