Phase 8 SaaS 확장 연동 분석 완료

- 8.1 구독관리: API 완전 구현됨, 필드명 매핑 필요
- 8.2 결제내역: API 완전 구현됨, 필드명 매핑 필요
- 8.3 회사 추가: API 완전 구현됨, React 연동만 필요
This commit is contained in:
2025-12-22 18:53:21 +09:00
parent d60d292291
commit 32d6854049

View File

@@ -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 추가 필요 | - | ✅ |