feat(V2-3차): pull 확장 + invite flow + Realtime + 테스트 + mobile UI 교체
묶음 E — V2-4b pull 확장:
- CloudSyncService.pullAll()에 meetings/meeting_memos/meeting_documents 추가
- meetings: LWW, 모든 컬럼 매핑 (minutes_json JSON 직렬화)
- meeting_memos: immutable INSERT-only 전략
- meeting_documents: LWW UPDATE
묶음 F — api-client types:
- interface -> type alias 전환 (11개)
- Database 타입에 TypedTable<Row, Insert, Update> 유틸 도입
(Row & Record<string, unknown> 교차로 GenericTable 제약 만족)
- @supabase/ssr 2.102는 supabase-js 버전 불일치로 제네릭 주입 불가 -
다음 사이클로 이월, api-client index.ts는 types만 재수출
묶음 G — apps/mobile UI 교체:
- login.tsx: MetalCard + PhosphorText(hero/label) + PhysicalButton
- meetings.tsx: MetalCard + Led(status) + PhosphorText(body/meta)
- record.tsx: Led + PhosphorText + PhysicalButton
- profile.tsx: MetalCard + PhysicalButton(danger) + d3roNativePalette
묶음 H — V2-7b 이메일 invite flow:
- migrations/20260410000001_team_invites.sql
- team_invites 테이블 (token, email, role, expires_at 7일)
- RLS: 같은 팀 멤버 + 초대 이메일 소유자 SELECT,
owner/admin만 INSERT/DELETE
- generate_invite_token() SECURITY DEFINER RPC (service_role)
- functions/team-invite: 권한 체크 -> 토큰 생성 -> 초대 URL 반환
- functions/team-accept: 토큰 검증 -> expires_at/accepted_at/이메일 일치 ->
team_members upsert -> 초대 accepted 표시
- config.toml에 team-invite/team-accept 함수 등록
- InviteMemberForm 재작성: 이메일 입력 + 역할 선택 -> URL 복사 UI
- /accept-invite 페이지 신규 (Suspense 내 useSearchParams + token 수락)
묶음 I — Realtime transcripts:
- apps/web/components/meetings/live-transcript-list.tsx (client)
- supabase.channel('transcripts:meeting:${id}').on('postgres_changes')
- INSERT -> 세그먼트 추가, UPDATE -> row 교체
- 중복 방지 segment_index 기준
- edited 배지 표시
- meetings/[id]/page.tsx의 transcript 섹션을 LiveTranscriptList로 교체
묶음 J — 테스트:
- packages/api-client/__tests__/client.test.ts (9 tests)
- createD3roSupabaseClient, isClientConfigured 팩토리 검증
- packages/api-client/__tests__/types.test.ts (10 tests)
- 모든 Row 타입 + 리터럴 union + Database keyof
- vitest.config.ts 신규
- apps/web/playwright.config.ts 신규 (baseURL, webServer dev 서버)
- apps/web/e2e/smoke.spec.ts 신규 (6 스모크 테스트)
- apps/web tsconfig exclude에 e2e/playwright.config.ts 추가
- package.json scripts: test, test:e2e, test:e2e:ui
검증:
- desktop typecheck OK
- web typecheck OK
- web next build OK (12 라우트, /accept-invite Suspense 적용)
- desktop build OK
- api-client test 19 passed
This commit is contained in:
parent
37f3f4d5bd
commit
c167737198
26 changed files with 1530 additions and 374 deletions
|
|
@ -1,16 +1,16 @@
|
|||
# D3RO-VOICE 프로젝트 현황
|
||||
|
||||
> 마지막 갱신: 2026-04-09 (2차 사이클)
|
||||
> 마지막 갱신: 2026-04-10 (3차 사이클)
|
||||
> 규칙 13: 작업 완료 즉시 이 파일 갱신 의무
|
||||
|
||||
## 현재 단계
|
||||
|
||||
**V1 완료** → **V2 1차 전 페이즈 + 2차 고도화 일부 완료**
|
||||
**V1 완료** → **V2 1차 전 페이즈 + 2차/3차 고도화 완료**
|
||||
|
||||
V2 1차:
|
||||
- Phase V2-1 ✅ (Monorepo 전환 a/b/c/d + minor 정리)
|
||||
- Phase V2-2 🟡 로컬 완료 (Supabase), 사용자 배포 대기
|
||||
- Phase V2-3 ✅ (Web App MVP — Next.js 15, 11 라우트)
|
||||
- Phase V2-3 ✅ (Web App MVP — Next.js 15, 12 라우트)
|
||||
- Phase V2-4 ✅ (데스크톱 Supabase push 동기화)
|
||||
- Phase V2-5 🟡 로컬 완료 (Mac 빌드), 사용자 검증 대기
|
||||
- Phase V2-6 ✅ (Mobile MVP — Expo)
|
||||
|
|
@ -18,14 +18,22 @@ V2 1차:
|
|||
- Phase V2-8 ✅ (결제 스캐폴딩 — Stripe Edge Functions + /billing)
|
||||
|
||||
V2 2차 고도화 (2026-04-09):
|
||||
- [A1] ✅ SettingsModal에 CloudSyncSection 통합 (Cloud 탭)
|
||||
- [A2] ✅ web Sidebar 공유 layout — app/(app)/layout.tsx 그룹, 중복 제거
|
||||
- [A3] ✅ 11개 locale (en/ja/zh/zh-TW/es/fr/de/pt/ru/vi/th)에 V2 새 키 번역
|
||||
- [B] ✅ V2-4b pull 동기화 — LWW 충돌 해결 (history/dictionary)
|
||||
- [C] ✅ V2-8b Stripe webhook HMAC-SHA256 서명 검증 + Customer Portal
|
||||
- [D] ✅ V2-6b packages/ui-native — RN용 MetalCard/PhosphorText/Led/PhysicalButton
|
||||
- [A1] ✅ SettingsModal에 CloudSyncSection 통합
|
||||
- [A2] ✅ web Sidebar 공유 layout (app/(app)/)
|
||||
- [A3] ✅ 11개 locale 번역
|
||||
- [B] ✅ V2-4b pull 동기화 — history/dictionary
|
||||
- [C] ✅ V2-8b Stripe webhook HMAC-SHA256 + Customer Portal
|
||||
- [D] ✅ V2-6b packages/ui-native 패키지
|
||||
|
||||
**다음 사이클**: 사용자 환경 액션 후 e2e 검증 / V2-4b에 meetings/memos 테이블 추가 / V2-6b로 mobile UI 실제 교체 / V2-7b invite flow
|
||||
V2 3차 고도화 (2026-04-10):
|
||||
- [E] ✅ V2-4b pull 확장 — meetings/meeting_memos/meeting_documents
|
||||
- [F] ⚠️ Database 제네릭 복원 — interface→type 전환 완료, 하지만 @supabase/ssr과 supabase-js 버전 정합 이슈로 실제 제네릭 주입은 보류 (다음 사이클)
|
||||
- [G] ✅ apps/mobile UI를 @d3ro/ui-native로 실제 교체 (login/meetings/record/profile)
|
||||
- [H] ✅ V2-7b 이메일 invite flow — team_invites 테이블, team-invite/team-accept Edge Functions, /accept-invite 페이지
|
||||
- [I] ✅ Realtime transcripts 구독 — web /meetings/[id]에 LiveTranscriptList
|
||||
- [J] ✅ api-client 유닛 테스트 (19 passed) + web E2E 스모크 (Playwright 스캐폴딩)
|
||||
|
||||
**다음 사이클**: 사용자 환경 액션 후 e2e 검증, Database 제네릭 완전 복원 (supabase 버전 맞추기), V1 고급 기능(음성 대화/RAG/보이스 액션) 이식, T2-8b 이메일 발송 실제 연동
|
||||
|
||||
## V1 완료 페이즈
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue