chore: project_status 갱신 — Phase V2-6 Admin CRM 고도화 완료

This commit is contained in:
윤찬 2026-04-12 21:33:17 +09:00
parent dca1b90faa
commit 8467ecbdb5

View file

@ -1,8 +1,49 @@
# D3RO-VOICE 프로젝트 현황 # D3RO-VOICE 프로젝트 현황
> 마지막 갱신: 2026-04-12 22:00 (마스터플랜 4개 작업 + Admin CRM 독립 프로젝트) > 마지막 갱신: 2026-04-13 09:30 (Phase V2-6 Admin CRM 고도화)
> 규칙 13: 작업 완료 즉시 이 파일 갱신 의무 > 규칙 13: 작업 완료 즉시 이 파일 갱신 의무
## Phase V2-6: Admin CRM 고도화 (2026-04-13 09:30) ✅
### DB 마이그레이션 (`20260413000004_admin_enhancement.sql`)
- `audit_log` 테이블: admin_id, action, target, before/after JSON diff, memo
- `subscriptions.admin_note` 컬럼 추가
- `profiles.role` CHECK 확장: user/admin/super_admin
- RLS: admin+super_admin 조회, super_admin 쓰기
- SQL RPC 3종: admin_usage_by_feature, admin_top_users, admin_dau
### Edge Functions 4개 (admin-users, admin-subscriptions, admin-payments, admin-audit-log)
- admin-users: 유저 목록/상세 + super_admin role 변경
- admin-subscriptions: 구독 CRUD (생성/수정/소프트삭제) + 메모 필수 + 감사로그 자동 기록
- admin-payments: DB + Payple API 병행 결제 이력 조회
- admin-audit-log: 감사로그 목록/상세 (필터: target_type, admin_id, 날짜)
- 공유 유틸: `_shared/admin-auth.ts` (권한 검증), `_shared/audit.ts` (감사 기록)
### Swagger UI (`apps/admin-swagger/`)
- 독립 정적 페이지 + OpenAPI 3.0 spec
- Bearer token 입력으로 admin 인증
### Admin CRUD 웹페이지 (apps/admin)
- 구독 상세/수정/삭제: `/subscriptions/[id]` + SubscriptionForm + MemoDialog
- 구독 생성 (VIP 부여): `/subscriptions/new`
- 유저 상세: role 변경 버튼 (super_admin만) + RoleChangeDialog
- 감사로그: `/audit-log` 목록 + `/audit-log/[id]` 상세 diff (AuditDiffViewer)
- 결제 이력: PaymentHistory 컴포넌트 (DB + Payple 병행)
- 사이드바: Audit Log 메뉴 + API Docs 외부 링크
### recharts 차트 3종
- FeatureUsageChart: feature별 일간 StackedBar
- DauChart: DAU 추이 Line
- TopUsersChart: 유저별 사용량 Top 20 HorizontalBar
- Usage 페이지: 차트 + 기간 필터(7/14/30일) + 테이블
### 권한 체계
- super_admin: 구독 CRUD, role 변경, 구독 삭제 (위험 작업)
- admin: 전체 조회 전용
- admin-guard.ts: requireAdmin(), requireSuperAdmin(), isSuperAdmin()
---
## Admin CRM 독립 프로젝트 (2026-04-12 22:00) ✅ ## Admin CRM 독립 프로젝트 (2026-04-12 22:00) ✅
- `apps/admin` Next.js 독립 앱 (포트 3001) — apps/web에서 완전 분리 - `apps/admin` Next.js 독립 앱 (포트 3001) — apps/web에서 완전 분리