fix(prisma): provider statique + scripts de bascule SQLite/PostgreSQL
Prisma ne supporte pas env() pour le champ `provider` d'un datasource (uniquement pour `url`). Le schéma utilise maintenant `provider = "sqlite"` en statique, et deux scripts npm (`db:use-sqlite` / `db:use-postgres`) réécrivent le fichier pour basculer entre les deux moteurs. Sans ce fix, `prisma generate` échoue au boot. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,8 @@
|
||||
"db:studio": "prisma studio",
|
||||
"db:seed": "tsx prisma/seed.ts",
|
||||
"db:reset": "prisma migrate reset",
|
||||
"db:use-sqlite": "node scripts/switch-db-provider.mjs sqlite",
|
||||
"db:use-postgres": "node scripts/switch-db-provider.mjs postgresql",
|
||||
"docker:up": "docker compose -f docker/docker-compose.yml up -d",
|
||||
"docker:down": "docker compose -f docker/docker-compose.yml down",
|
||||
"docker:logs": "docker compose -f docker/docker-compose.yml logs -f",
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
// IPAM — Schéma Prisma
|
||||
// ---------------------------------------------------------------------
|
||||
// Le `provider` est injecté via la variable d'environnement DATABASE_PROVIDER
|
||||
// (SQLite par défaut, PostgreSQL en option). Les deux sont pris en charge.
|
||||
// Lors d'un changement de provider, régénérer le client : `pnpm db:generate`
|
||||
// et lancer une nouvelle migration : `pnpm db:migrate`.
|
||||
// Prisma n'accepte PAS `env()` pour le champ `provider` (seulement pour `url`).
|
||||
// Le provider par défaut est donc `sqlite`. Pour basculer vers PostgreSQL :
|
||||
// npm run db:use-postgres
|
||||
// puis régénérer le client : `npm run db:generate` et migrer : `npm run db:migrate`.
|
||||
// Pour revenir à SQLite : `npm run db:use-sqlite`.
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
generator client {
|
||||
@@ -11,7 +12,7 @@ generator client {
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = env("DATABASE_PROVIDER")
|
||||
provider = "sqlite"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
|
||||
36
scripts/switch-db-provider.mjs
Normal file
36
scripts/switch-db-provider.mjs
Normal file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Bascule le provider Prisma entre SQLite et PostgreSQL.
|
||||
* Prisma n'accepte pas env() pour `provider`, donc on réécrit le fichier.
|
||||
*
|
||||
* Usage : node scripts/switch-db-provider.mjs sqlite
|
||||
* node scripts/switch-db-provider.mjs postgresql
|
||||
*/
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { dirname, resolve } from 'node:path';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const schemaPath = resolve(__dirname, '..', 'prisma', 'schema.prisma');
|
||||
|
||||
const target = process.argv[2];
|
||||
if (!['sqlite', 'postgresql'].includes(target)) {
|
||||
console.error('Usage : node scripts/switch-db-provider.mjs <sqlite|postgresql>');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const content = readFileSync(schemaPath, 'utf8');
|
||||
const next = content.replace(
|
||||
/provider\s*=\s*"(sqlite|postgresql)"/,
|
||||
`provider = "${target}"`,
|
||||
);
|
||||
|
||||
if (next === content) {
|
||||
console.log(`Provider déjà réglé sur "${target}", rien à faire.`);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
writeFileSync(schemaPath, next);
|
||||
console.log(`✅ Provider Prisma basculé sur "${target}"`);
|
||||
console.log(' Pense à adapter DATABASE_URL dans .env puis :');
|
||||
console.log(' npm run db:generate && npm run db:migrate');
|
||||
Reference in New Issue
Block a user