✨ 기능 설명
3개 에이전트 교차 검증 결과, 최근 PR(#470/#473/#479/#482/#485/#488/#492)을 거치며 코드는 변경됐으나 Swagger/응답 스키마/라우터 마운트가 따라가지 못한 항목 다수 발견. CRITICAL/HIGH 위주로 한 PR에 묶되 커밋을 항목별로 분리해서 리뷰가 용이하도록 진행.
✨ 개발 목록 (커밋 분리)
Commit 1 — refundRouter 마운트 순서/prefix 정정 (CRITICAL)
src/index.ts:139-155에서 refundRouter가 purchaseRouter보다 먼저 /api/prompts/purchases에 마운트되어 path 충돌 위험
- 권장:
refundRouter를 별도 prefix(/api/refunds)로 분리하거나, purchaseRouter 뒤로 배치
- Swagger 본 path도 그에 맞춰 정정 (
refund.route.ts:61, 101)
Commit 2 — prompt.download.route.ts Swagger 전면 재작성 (CRITICAL)
- 응답 schema가 실제 코드와 완전 불일치 (
PromptContent 명세 vs 실제 {message, title, prompt, is_free, is_paid, statusCode})
GET /:promptId/downloads에 403 Refunded 응답 추가
- 첫 다운로드 시
Purchase.downloaded_at 기록되는 부작용 설명 추가
GET /downloads (구매 목록) Swagger 신규 작성 — JSDoc 자체 부재
Commit 3 — /pending-amount stale 멘트 정정 (CRITICAL)
settlement.route.ts:502-530의 ⚠️ "Settlement.status를 'Succeed'로 업데이트하는 흐름이 없어서..." 제거
- 실제 동기화 동작(KST 08:00 cron) 설명으로 교체
Commit 4 — Status enum의 Refunded 누락 응답들에 반영 (HIGH)
purchase.route.ts:155 complete 응답 enum에 Refunded 추가
purchase 결제내역 응답에 status/refunded_at 표시 (환불건 구분 가능하도록)
- admin/통계 응답 곳곳 enum 명세 점검
Commit 5 — register/individual & register/business Swagger에 subCode 응답 추가 (HIGH)
settlement.route.ts:280-316, 410-438 응답에 AccountVerificationError subCode 응답 schema 추가
- (verify-account에는 이미 11종 subCode 명세 있음 — 일관성 맞추기)
Commit 6 — admin-seller 응답에 status + 환불 표시 (HIGH)
admin-seller 상세 응답 DTO에 status 필드 추가 (APPROVED/PENDING/REJECTED)
- 환불 정보 노출 정책 (관리자 화면에서 환불 거래 식별)
business_number 마스킹 정책 일관 적용 (현재 /account/detail에만 적용)
Commit 7 — 검증
pnpm build / pnpm tsc --noEmit
swagger.json 정상 생성 확인
✨ 별도 이슈로 분리 (기존 부채)
withdrawals 라우트 Swagger 전체 부재
announcements 라우트 Swagger 부재
members/tips/inquiries 일부 endpoint Swagger 누락
auth/logout HTTP 메서드 일관성
- prisma
select 강제로 PII 회귀 방지 가이드
✨ 기타 / 질문
✨ 기능 설명
3개 에이전트 교차 검증 결과, 최근 PR(#470/#473/#479/#482/#485/#488/#492)을 거치며 코드는 변경됐으나 Swagger/응답 스키마/라우터 마운트가 따라가지 못한 항목 다수 발견. CRITICAL/HIGH 위주로 한 PR에 묶되 커밋을 항목별로 분리해서 리뷰가 용이하도록 진행.
✨ 개발 목록 (커밋 분리)
Commit 1 —
refundRouter마운트 순서/prefix 정정 (CRITICAL)src/index.ts:139-155에서refundRouter가purchaseRouter보다 먼저/api/prompts/purchases에 마운트되어 path 충돌 위험refundRouter를 별도 prefix(/api/refunds)로 분리하거나,purchaseRouter뒤로 배치refund.route.ts:61, 101)Commit 2 —
prompt.download.route.tsSwagger 전면 재작성 (CRITICAL)PromptContent명세 vs 실제{message, title, prompt, is_free, is_paid, statusCode})GET /:promptId/downloads에 403 Refunded 응답 추가Purchase.downloaded_at기록되는 부작용 설명 추가GET /downloads(구매 목록) Swagger 신규 작성 — JSDoc 자체 부재Commit 3 —
/pending-amountstale 멘트 정정 (CRITICAL)settlement.route.ts:502-530의Commit 4 —
Statusenum의Refunded누락 응답들에 반영 (HIGH)purchase.route.ts:155complete 응답 enum에Refunded추가purchase결제내역 응답에status/refunded_at표시 (환불건 구분 가능하도록)Commit 5 —
register/individual®ister/businessSwagger에 subCode 응답 추가 (HIGH)settlement.route.ts:280-316, 410-438응답에AccountVerificationErrorsubCode 응답 schema 추가Commit 6 —
admin-seller응답에 status + 환불 표시 (HIGH)admin-seller상세 응답 DTO에status필드 추가 (APPROVED/PENDING/REJECTED)business_number마스킹 정책 일관 적용 (현재/account/detail에만 적용)Commit 7 — 검증
pnpm build/pnpm tsc --noEmitswagger.json정상 생성 확인✨ 별도 이슈로 분리 (기존 부채)
withdrawals라우트 Swagger 전체 부재announcements라우트 Swagger 부재members/tips/inquiries일부 endpoint Swagger 누락auth/logoutHTTP 메서드 일관성select강제로 PII 회귀 방지 가이드✨ 기타 / 질문
refundRouterprefix 분리 시 프론트 동기화 필요 (현재/api/prompts/purchases/:id/refund-eligibility→/api/refunds/purchases/:id/refund-eligibility)