Repository navigation
Conversation
학생이 남은 학기 수와 학점이수현황 캡처를 제출해도 상태는 납부 전에 머물고, 송금 확인 요청을 해야 납부확인중으로 넘어간다. 확인필요로 처리된 회원은 직접 다시 제출하지 못하고 관리자가 납부 전으로 되돌려야 한다. 회원 테이블에도 납부 상태를 둔다. 관리자 납부자 목록이 납부 전 회원까지 보여줘야 하는데 그런 회원은 welfare 쪽에 행이 없어, 회원 기준 조회가 불가능하기 때문이다.
조회에서 학년·학기 파라미터를 없애고 납부 계좌·금액·안내 문구를 함께 내려준다. 제출은 남은 학기 수와 학점이수현황 캡처를 받고, 송금 확인 요청을 별도 엔드포인트로 분리했다. 금액 계산 기준이 학년·학기에서 학생이 입력한 남은 학기 수로 바뀌어 GradeSemester는 쓰이지 않는다. 재제출로 교체된 이전 캡처는 그 자리에서 지운다. 삭제는 R2 호출이라 롤백되지 않으므로 저장 트랜잭션 커밋 뒤에 하고, 실패해도 제출은 성공으로 둔다.
단건 조회인 getByMemberId에서 readOnly 트랜잭션을 뗐다(PR#67/#69 원칙). 페이지 조회는 목록과 전체 개수를 두 번에 나눠 읽어 한 스냅샷이 필요하므로 유지하고 근거를 주석으로 남겼다. 확인필요일 때 금액·송금 링크를 빼는 규칙이 컨트롤러와 응답 조립부 두 곳에 있어 응답 쪽으로 모았다. FeeAccount는 금액·링크까지 담고 있어 FeeTransferInfo로 바꿨다.
FeeTransferInfo는 계좌·금액·링크를 한데 담았는데, 셋이 한 개념이라서가 아니라 두 응답이 같은 필드를 써서 묶인 타입이었다. 링크가 나머지 값으로 만들어진 것이라 입력과 출력이 한 record에 같이 있는 문제도 있었다. 관리자가 설정하는 값(은행·계좌번호·학기당 회비)만 FeeAccount로 묶고, 학생마다 달라지는 납부 금액과 송금 링크는 그 계좌가 계산해 주는 결과로 바꿨다.
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
github-actions
Bot
requested review from
jjunh33,
leegain1,
sangrae2325 and
tnals0924
October 14, 2026 13:36
tnals0924
added this pull request to stack #127
October 15, 2026 05:12
tnals0924
reviewed
Oct 15, 2026
| * 삭제가 실패해도 제출은 성공으로 둔다 — 고아 파일 하나가 남는 편이 제출 실패보다 낫다. | ||
| * 남은 것은 파일 정리 배치가 걷어간다. | ||
| */ | ||
| private void deletePreviousProofImage(String previousKey, String currentKey) { |
Member
There was a problem hiding this comment.
고아 이미지 지우는 배치를 따로 만들어서 고아 이미지 삭제하는 로직에 통합하면 좋을 거 같습니다!
members.fee_status는 회비 상태의 사본이라, 주인이 아닌 member 도메인에 welfare의 상태를 심고 두 값을 같은 트랜잭션에서 맞출 책임까지 양쪽에 지우는 구조였다. 회비 기능 때문에 Member와 MemberService를 고치는 것도 소유 범위를 벗어난다. 사본을 없애고 member 모듈 변경을 전부 되돌렸다. 관리자 목록이 납부 전 회원까지 보여주는 문제는 회원 기준으로 뒤집는 대신, 회비 쪽이 회원당 한 행을 갖게 해서 푼다 (관리자 PR에서 이어서 한다). 송금 확인 요청이 더는 두 도메인을 건드리지 않으므로 UseCase를 없애고 서비스를 바로 부른다.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
#️⃣연관된 이슈
members.fee_status를 실제로 쓰는 목록 조회가 거기 있습니다)🎯 해결하려는 문제가 무엇인가요?
지금은
POST /v1/app/fee를 부르면 학년·학기를 받아 즉시 확인 요청(납부확인중) 으로 넘어갑니다. 제출만 하고 송금 없이 이탈한 학생도 운영진에게는 처리 대기로 보입니다. 금액 계산도 학년·학기에서 추정하는 방식이라 실제 남은 학기와 어긋날 수 있습니다.❓ 왜 해결해야 하나요?
기획이 바뀌어 납부가 두 단계가 됐습니다. 남은 학기 수와 학점이수현황 캡처를 제출하는 단계와, 토스에서 송금한 뒤 확인을 요청하는 단계입니다. Figma의 "송금을 완료하셨나요? / 다음에 할게요" 화면이 그 분기입니다.
⭐ 어떻게 해결했나요?
GET /v1/app/fee/me—grade·semester파라미터를 없애고 계좌·금액·송금 링크·안내 문구를 함께 내려줍니다POST /v1/app/fee—remainingSemesters와proofImageKey를 받아 저장하고 송금 링크를 돌려줍니다. 상태는 납부 전 그대로입니다POST /v1/app/fee/requests/confirm(신규) — 여기서 비로소 납부확인중으로 바뀝니다FeeAmountCalculator가 학년·학기 대신 남은 학기 수를 받고,GradeSemester는 삭제했습니다FileCategory.FEE_TRANSCRIPT_IMAGE와 키 조회(FileService.findByFileKey)를 추가했습니다🧩 이 PR의 한계 & 트레이드오프
members.fee_status를 추가했지만 이 PR에서 읽는 곳은 없습니다. 관리자 목록이 "납부 전" 회원까지 보여주려면 회원 기준 조회가 필요한데, 그 회원은student_transfer_statuses에 행이 없기 때문입니다. 관리자 PR에서 쓰입니다. 지금은 송금 확인 요청만 이 값을 갱신하고, 관리자 상태 수정은 아직 갱신하지 않습니다Member.feeStatus는 문자열입니다.TransferStatus가 welfare 타입이라 member 모듈이 참조할 수 없습니다.core:common으로 올리는 안도 있었지만, member가 값을 해석하지 않고 저장·비교만 해서 문자열로 뒀습니다findByFileKey를 되살렸습니다. 커밋72055f1이 지웠던 메서드인데,proofImageKey(문자열)로 파일을 검증하려면 필요합니다.fileId를 받는 대안도 있었으나 명세·프론트 계약을 유지하는 쪽을 골랐습니다submit이 이전 키까지 돌려주게 하면 반환 타입에 값을 얹어야 해서, 유니크 인덱스 조회 한 번을 받아들였습니다⛓️ 기존 기능에 미치는 영향
GET /v1/app/fee/me의 파라미터와 응답,POST /v1/app/fee의 요청·응답이 모두 바뀝니다. 프론트와 배포 순서를 맞춰야 합니다FEE_TRANSFER_LINK_INVALID(500)를 없애고FEE_ACCOUNT_NOT_FOUND(404)로 바꿨습니다. 계좌 미설정은 서버 오류가 아니라 설정 누락입니다🔀 Edge Case & 실패 시나리오
📋 검토한 대안과 선택 이유
paid_at컬럼 추가: V8이 지운 컬럼을 되살리는 셈이라,PAID일 때의reviewedAt을confirmedAt으로 내려주는 쪽을 골랐습니다. Figma에서 확인필요·납부확인중 모두 "확인일시"가-라 이 방식으로 충분합니다-로 두고, 링크를 다시 주면 "또 보내라"로 읽혀 뺐습니다💬 리뷰 포인트
[r]members.fee_status를 두는 선택과, 두 값을 한 트랜잭션에서 바꾸는 방식[c]FeeAccount가 설정만 담고 금액·링크는 계산해 주는 구조[c]마이그레이션 번호 —V17~V19가 열린 PR에 잡혀 있어V20으로 올렸습니다. 머지 순서에 따라 재조정이 필요할 수 있습니다[a]AppFeeApi에서INVALID_INPUT을 뺐습니다(검증을 전부 수동으로 함). 역직렬화 실패는 여전히 400이라 다시 넣을지 봐주세요