From b5e8ae43c811f5ecaf9e67d1343170742ddc7198 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Sun, 9 Aug 2026 19:05:10 +0200 Subject: [PATCH] =?UTF-8?q?Faire=20passer=20le=20seed=20par=20la=20connexi?= =?UTF-8?q?on=20d=20amor=C3=A7age?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le seed installe un premier compte de démonstration : il ne peut pas le créer dans un contexte locataire qui n existe pas encore. Or il se connectait avec le rôle applicatif, soumis à la row-level security en FORCE — l upsert Prisma (INSERT ... ON CONFLICT) se heurtait à la politique de lecture « id = planflow_current_account() », renvoyant NULL. Utiliser ADMIN_DATABASE_URL (compte d amorçage), comme le fait déjà le harnais de tests d intégration (tests/integration/admin-db.ts). --- prisma/seed.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/prisma/seed.ts b/prisma/seed.ts index 548ba1f..6ba6f5b 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -35,8 +35,18 @@ import { withTenant } from '../src/server/tenant'; const DEMO_PASSWORD = 'planflow-demo-2026'; +// Connexion d'amorçage, **pas** celle de l'application — même principe que le +// harnais de tests (tests/integration/admin-db.ts). +// +// L'application se connecte avec un rôle soumis à la row-level security, qui +// ne voit rien hors du compte courant et ne peut pas créer de compte de toutes +// pièces : c'est exactement ce qu'on attend de lui. Le seed, lui, installe un +// **premier** compte de démonstration — il ne peut pas le faire dans un +// contexte locataire qui n'existe pas encore. Il passe donc par la connexion +// d'amorçage, comme un exploitant depuis le serveur. const adapter = new PrismaPg({ - connectionString: process.env.DATABASE_URL ?? '', + connectionString: + process.env.ADMIN_DATABASE_URL ?? process.env.DATABASE_URL ?? '', }); const prisma = new PrismaClient({ adapter });