Migration: Fauna → Postgres
Strategy:
- Progressive migration guarded by Statsig flags per entity (see
lib/flags/index.js) - Dual-read/dual-path via GraphQL context and resolvers; Postgres path uses services with Supabase client and decoded JWT (RLS-safe)
Switches:
Global:@deprecated - Use per-entity flags insteadfaunaStoppedkill switch if needed- Per-entity:
faunaMigration*flags (vehicles,orders,plans,settings,widgets,payments,invoices,users,user_tenants, etc.)
Context creation (createResolversContext.js):
- Validates tokens via
getTokens - If Postgres enabled + user migration flags, calls
authMiddlewareto create Supabase client, determines tenant/role, and instantiates services viacreateTenantServices - Dataloaders: Postgres loaders when enabled, otherwise Fauna loaders
Data movement:
- Migration scripts under
scripts/fauna-migration/*andfauna*.fsl - Ensure Prisma schema parity, indices, and RLS policies
Cutover checklist:
- Enable entity flags in lower env, validate reads/writes
- Run backfill/migration scripts
- Switch write path to Postgres-only for the entity
- Monitor via Sentry/Axiom; roll back flags if needed