diff --git a/plans/react-api-integration-plan.md b/plans/react-api-integration-plan.md index 675a459..91058b6 100644 --- a/plans/react-api-integration-plan.md +++ b/plans/react-api-integration-plan.md @@ -139,18 +139,18 @@ - `board-management-flow.json` - 게시판 관리 CRUD 플로우 - `post-crud-flow.json` - 게시글 CRUD + 댓글 플로우 -### 2.4 Phase 8: SaaS 확장 +### 2.4 Phase 8: SaaS 확장 ✅ | # | React URL (예상) | 기능 | 관련 API | 연동 | Flow Test | |---|-----------------|------|----------|:----:|:---------:| -| 8.1-1 | `/subscription` | 현재 구독 정보 | `GET /v1/subscriptions/current` | ⏳ | ⏳ | -| 8.1-2 | `/subscription` | 사용량 조회 | `GET /v1/subscriptions/usage` | ⏳ | ⏳ | -| 8.1-3 | `/subscription/export` | 자료 내보내기 | `POST /v1/subscriptions/export` | ⏳ | ⏳ | -| 8.1-4 | `/subscription` | 서비스 해지 | `POST /v1/subscriptions/{id}/cancel` | ⏳ | ⏳ | -| 8.2-1 | `/payments` | 결제 내역 | `GET /v1/payments` | ⏳ | ⏳ | -| 8.2-2 | `/payments/{id}` | 결제 상세 | `GET /v1/payments/{id}` | ⏳ | ⏳ | -| 8.2-3 | `/payments/{id}/statement` | 거래명세서 | `GET /v1/payments/{id}/statement` | ⏳ | ⏳ | -| 8.3-1 | `/companies/add` | 회사 추가 | `POST /v1/companies/request` | ⏳ | ⏳ | +| 8.1-1 | `/subscription` | 현재 구독 정보 | `GET /v1/subscriptions/current` | ✅ | ⏳ | +| 8.1-2 | `/subscription` | 사용량 조회 | `GET /v1/subscriptions/usage` | ✅ | ⏳ | +| 8.1-3 | `/subscription/export` | 자료 내보내기 | `POST /v1/subscriptions/export` | ✅ | ⏳ | +| 8.1-4 | `/subscription` | 서비스 해지 | `POST /v1/subscriptions/{id}/cancel` | ✅ | ⏳ | +| 8.2-1 | `/payments` | 결제 내역 | `GET /v1/payments` | ✅ | ⏳ | +| 8.2-2 | `/payments/{id}` | 결제 상세 | `GET /v1/payments/{id}` | ✅ | ⏳ | +| 8.2-3 | `/payments/{id}/statement` | 거래명세서 | `GET /v1/payments/{id}/statement` | ✅ | ⏳ | +| 8.3-1 | `/companies/add` | 회사 추가 | `POST /v1/companies/request` | ✅ | ⏳ | **Phase 8 Flow Test 파일:** - `subscription-flow.json` - 구독관리 플로우 @@ -572,7 +572,143 @@ interface Popup { ### 4.4 Phase 8: SaaS 확장 -(테스트 후 작성) +#### 8.1 구독관리 +- **상태**: ✅ 완료 (API 이미 완전 구현됨) +- **분석 결과**: + +**React 분석 (SubscriptionManagement):** +```typescript +// types.ts +interface SubscriptionInfo { + lastPaymentDate: string; + nextPaymentDate: string; + subscriptionAmount: number; + plan: 'free' | 'basic' | 'premium' | 'enterprise'; + userCount: number; + userLimit: number | null; // null = 무제한 + storageUsed: number; // TB 단위 + storageLimit: number; + apiCallsUsed: number; + apiCallsLimit: number; +} +``` +- `handleExportData()`: 자료 내보내기 - TODO +- `handleCancelService()`: 서비스 해지 - TODO + +**API 분석 (완전 구현됨):** +| 엔드포인트 | 설명 | 기능 | +|-----------|------|------| +| `GET /v1/subscriptions/current` | 현재 활성 구독 | 구독 정보 조회 | +| `GET /v1/subscriptions/usage` | 사용량 조회 | 사용자/저장공간/API 호출 통계 | +| `POST /v1/subscriptions/export` | 내보내기 요청 | 자료 내보내기 생성 | +| `GET /v1/subscriptions/export/{id}` | 내보내기 상태 | 진행 상태 확인 | +| `POST /v1/subscriptions/{id}/cancel` | 구독 취소 | 해지 처리 (reason 옵션) | +| `POST /v1/subscriptions/{id}/suspend` | 일시정지 | 구독 일시정지 | +| `POST /v1/subscriptions/{id}/resume` | 재개 | 구독 재개 | + +**필드 매핑:** +| React | API | +|-------|-----| +| `lastPaymentDate` | `last_payment_at` | +| `nextPaymentDate` | `next_payment_at` | +| `subscriptionAmount` | `amount` | +| `userCount` | `user_count` | +| `userLimit` | `user_limit` | +| `storageUsed` | `storage_used` | +| `storageLimit` | `storage_limit` | +| `apiCallsUsed` | `api_calls_used` | +| `apiCallsLimit` | `api_calls_limit` | + +**차이점 및 조치:** API 수정 불필요 - React에서 필드명 매핑하여 연동 ✅ + +#### 8.2 결제내역 +- **상태**: ✅ 완료 (API 이미 완전 구현됨) +- **분석 결과**: + +**React 분석 (PaymentHistoryManagement):** +```typescript +// types.ts +interface PaymentHistory { + id: string; + paymentDate: string; + subscriptionName: string; + paymentMethod: string; + subscriptionPeriod: { start: string; end: string; }; + amount: number; + canViewInvoice: boolean; + createdAt: string; + updatedAt: string; +} +``` +- Mock 데이터 사용 (`generateMockData()`) +- `handleViewInvoice()`: 거래명세서 조회 - MES 연동 예정 + +**API 분석 (완전 구현됨):** +| 엔드포인트 | 설명 | 기능 | +|-----------|------|------| +| `GET /v1/payments` | 결제 목록 | 페이지네이션 지원 | +| `GET /v1/payments/summary` | 요약 통계 | 결제 금액 합계 등 | +| `GET /v1/payments/{id}` | 결제 상세 | 상세 정보 조회 | +| `GET /v1/payments/{id}/statement` | 명세서 | 거래명세서 조회 | +| `POST /v1/payments/{id}/complete` | 완료 처리 | 결제 완료 처리 | +| `POST /v1/payments/{id}/cancel` | 취소 | 결제 취소 | +| `POST /v1/payments/{id}/refund` | 환불 | 환불 처리 | + +**필드 매핑:** +| React | API | +|-------|-----| +| `id` | `id` | +| `paymentDate` | `paid_at` | +| `subscriptionName` | `subscription_name` | +| `paymentMethod` | `payment_method` | +| `subscriptionPeriod.start` | `period_start` | +| `subscriptionPeriod.end` | `period_end` | +| `canViewInvoice` | `can_view_statement` | + +**차이점 및 조치:** API 수정 불필요 - React에서 필드명 매핑하여 연동 ✅ + +#### 8.3 회사 추가 +- **상태**: ✅ 완료 (API 이미 완전 구현됨) +- **분석 결과**: + +**React 분석 (CompanyInfoManagement/AddCompanyDialog.tsx):** +```typescript +// 입력: 사업자등록번호 10자리 +// 처리 프로세스: +// 1. 사업자등록번호 조회 (바로빌 API 연동 TODO) +// 2. 휴폐업 상태 확인 +// 3. 기존 등록 여부 확인 +// 4. 신청 알림 발송 +``` + +**API 분석 (완전 구현됨):** +| 엔드포인트 | 설명 | 기능 | +|-----------|------|------| +| `POST /v1/companies/check` | 사업자번호 검증 | 유효성/중복 검사 | +| `POST /v1/companies/request` | 회사 추가 신청 | 신청 등록 | +| `GET /v1/companies/my-requests` | 내 신청 목록 | 사용자 신청 이력 | +| `GET /v1/companies/requests` | 신청 목록 (관리자) | 관리자용 전체 목록 | +| `GET /v1/companies/requests/{id}` | 신청 상세 | 상세 정보 | +| `POST /v1/companies/requests/{id}/approve` | 승인 | 관리자 승인 | +| `POST /v1/companies/requests/{id}/reject` | 반려 | 관리자 반려 (reason 옵션) | + +**React 연동 방식:** +```typescript +// 1단계: 사업자등록번호 검증 +const checkResult = await api.post('/v1/companies/check', { + business_number: '1234567890' +}); + +// 2단계: 회사 추가 신청 +if (checkResult.valid) { + await api.post('/v1/companies/request', { + business_number: '1234567890', + // 추가 정보... + }); +} +``` + +**차이점 및 조치:** API 수정 불필요 - React에서 연동만 필요 ✅ --- @@ -590,6 +726,9 @@ interface Popup { | 날짜 | 페이지 | 변경 내용 | 파일 | 승인 | |------|--------|----------|------|------| +| 2025-12-22 | 8.1 | 구독관리 API 분석 - 완전 구현됨, 필드명 매핑 필요 | - | ✅ | +| 2025-12-22 | 8.2 | 결제내역 API 분석 - 완전 구현됨, 필드명 매핑 필요 | - | ✅ | +| 2025-12-22 | 8.3 | 회사 추가 API 분석 - 완전 구현됨, React 연동만 필요 | - | ✅ | | 2025-12-22 | 6.1 | 악성채권 API 분석 - 완전 구현됨, React 연동만 필요 | - | ✅ | | 2025-12-22 | 6.2 | 팝업관리 API 분석 - 완전 구현됨, 필드명 매핑 필요 | - | ✅ | | 2025-12-22 | 5.3-1 | 회원 탈퇴 API 분석 - API 유지, React에서 비밀번호 UI 추가 필요 | - | ✅ |