d3ro-voice/server/supabase/migrations/20260412000002_payple_billing.sql
윤찬 c9baf031c9 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 키
2026-04-12 19:18:40 +09:00

30 lines
1.3 KiB
SQL

-- Phase 3.2-B: Payple 결제 연동을 위한 스키마 확장
-- 기존 Stripe 필드를 보존하면서 Payple 결제 수단을 추가
-- 1. payment_provider 컬럼 — 어떤 결제 수단으로 구독했는지
ALTER TABLE public.subscriptions
ADD COLUMN IF NOT EXISTS payment_provider text NOT NULL DEFAULT 'none';
-- 기존 Stripe 구독자는 payment_provider = 'stripe' 로 갱신
UPDATE public.subscriptions
SET payment_provider = 'stripe'
WHERE stripe_customer_id IS NOT NULL
AND payment_provider = 'none';
-- CHECK 제약 추가
ALTER TABLE public.subscriptions
ADD CONSTRAINT subscriptions_payment_provider_check
CHECK (payment_provider IN ('none', 'stripe', 'payple'));
-- 2. Payple 결제 정보 컬럼
ALTER TABLE public.subscriptions
ADD COLUMN IF NOT EXISTS payple_payer_id text, -- 빌링키 (PCD_PAYER_ID)
ADD COLUMN IF NOT EXISTS payple_pay_oid text; -- 최근 주문번호 (PCD_PAY_OID)
-- 3. 인덱스: 빌링키로 구독 조회 (갱신 시 사용)
CREATE INDEX IF NOT EXISTS idx_subscriptions_payple_payer
ON public.subscriptions(payple_payer_id)
WHERE payple_payer_id IS NOT NULL;
-- 4. RLS: 기존 subscriptions 정책 그대로 적용 (user_id = auth.uid())
-- 새 컬럼은 기존 RLS 정책이 자동 커버하므로 추가 정책 불필요