feat(server+web+desktop): Phase 3.2-B Payple 결제 연동 + 대시보드 Premium 상태 표시

Payple PG 연동:
- _shared/payple.ts: Payple API 래퍼 (auth/billing/cancel/deleteBillingKey)
- payple-checkout Edge Function: 빌링키 결제 + 구독 활성화
- payple-webhook Edge Function: 결제완료/취소 이벤트
- payple-manage Edge Function: 구독 취소 (빌링키 해지)
- DB migration: payment_provider + payple_payer_id + payple_pay_oid
- 웹 billing 페이지: Payple JS SDK 결제창 + 관리 버튼 (Stripe 대체)
- Electron LicenseModal: shell.openExternal → 웹 결제 페이지

대시보드 Premium 상태:
- CrtDisplay services에 PREMIUM LLM LED 추가
- 백엔드 인디케이터 카드 (Local/Premium) + 티어 카드
- 사용량 섹션: 전 티어 표시 + 모델별 Premium 쿼터
- 12개 locale × 14개 i18n 키
This commit is contained in:
윤찬 2026-04-12 19:18:40 +09:00
parent b8cb665264
commit c9baf031c9
27 changed files with 1318 additions and 98 deletions

View file

@ -1,8 +1,51 @@
# D3RO-VOICE 프로젝트 현황
> 마지막 갱신: 2026-04-12 (Phase 3.2 Premium LLM 완결 — 빅뱅 8/8 달성)
> 마지막 갱신: 2026-04-12 (Phase 3.2-B Payple 결제 연동 + 대시보드 Premium 표시)
> 규칙 13: 작업 완료 즉시 이 파일 갱신 의무
## Phase 3.2-B Payple 결제 연동 + 대시보드 Premium 상태 (2026-04-12) ✅
### A. Payple 결제 연동
Stripe 기반 결제를 Payple(한국 PG)로 전면 교체. 웹(apps/web) 결제 페이지가 핵심.
**신규 파일:**
- `server/supabase/functions/_shared/payple.ts` — Payple API 래퍼 (auth, billing, cancel, deleteBillingKey)
- `server/supabase/functions/payple-checkout/index.ts` — 빌링키로 첫 결제 + 구독 활성화
- `server/supabase/functions/payple-webhook/index.ts` — 결제완료/취소 이벤트 처리
- `server/supabase/functions/payple-manage/index.ts` — 구독 취소 (빌링키 해지)
- `server/supabase/migrations/20260412000002_payple_billing.sql` — payment_provider, payple_payer_id, payple_pay_oid 컬럼
- `apps/web/src/components/billing/payple-checkout-button.tsx` — Payple JS SDK 결제창 호출
- `apps/web/src/components/billing/payple-manage-button.tsx` — 구독 관리/취소 다이얼로그
**수정 파일:**
- `apps/web/src/app/(app)/billing/page.tsx` — 티어 통일(team→pro_plus) + Payple 컴포넌트로 교체
- `apps/desktop/src/renderer/components/LicenseModal.tsx` — 업그레이드 → shell.openExternal(웹 결제)
- `packages/core/src/ipc-channels.ts` — LICENSE.OPEN_BILLING 추가
- `apps/desktop/src/preload/index.ts` — license.openBilling() API
- `apps/desktop/src/main/ipc/license-handlers.ts` — OPEN_BILLING 핸들러
- `server/supabase/config.toml` — payple-* verify_jwt=false
### B. 대시보드 Premium 상태 표시
- DashboardPage services 배열에 PREMIUM LLM LED 추가 → CrtDisplay 자동 렌더
- 백엔드 인디케이터 카드(Local/Premium) + 티어 카드
- 사용량 바: 모든 티어에서 표시 + Premium 모델별(Haiku/Sonnet/Opus) 쿼터 섹션
### i18n
12개 locale에 14개 키 추가 (service.premiumLlm, dashboard.currentBackend 등)
### 알려진 이슈 (이월)
1. **세션 만료 렌더러 미동기화** — 기존 이슈
2. **LemonSqueezy 코드 잔존** — LicenseService.ts에 @deprecated 코드. 다음 사이클에서 정리
3. **Payple 테스트 키** — 라이브 전환 시 PAYPLE_CST_ID/CUST_KEY/REFUND_KEY/CLIENT_KEY Supabase Secrets 등록 필요
4. **Payple 정기 갱신 크론** — payple-renew 미구현. pg_cron 또는 외부 스케줄러 필요
### 백로그
- **관리자 백엔드 서비스 웹페이지**: 사용자 관리 CRM, 구독 현황 대시보드, 쿼터 관리, 결제 이력 조회. 별도 admin/ 앱 또는 apps/web 내 admin 라우트 그룹으로 구현 예정.
- **Payple 정기 갱신 크론** (payple-renew)
- **SSE 스트리밍 Premium**
---
## Phase 3.2 Premium LLM 완결 (2026-04-12) — 빅뱅 8/8 마지막 성공 기준 ✅
Supabase Edge Function(llm-proxy)을 통해 Anthropic Claude를 호출하는 PremiumLLMService 구현. 사용자가 Settings에서 Local/Premium 백엔드를 선택하면 VoiceModeService가 자동 분기하고, Premium 실패 시 Local로 silent fallback + 상단 중앙 배너 알림.