From f5548ab3268ba2df9b893ce1394b0b3d789e46cf Mon Sep 17 00:00:00 2001 From: streaper2 Date: Wed, 21 Oct 2026 22:20:42 +0200 Subject: [PATCH] feat: add Next.js configuration and automated super admin initialization scripts --- admin/next.config.ts | 2 +- admin/scripts/ensure-admin.cjs | 21 ++++++++++++++++----- scripts/ensure-admin.cjs | 21 ++++++++++++++++----- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/admin/next.config.ts b/admin/next.config.ts index e643f2d..6a94228 100644 --- a/admin/next.config.ts +++ b/admin/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from "next"; import path from "path"; const nextConfig: NextConfig = { - output: 'standalone', + // output: 'standalone', allowedDevOrigins: ['10.0.2.2'], // 1. On ignore les erreurs de type et ESLint pour que le build diff --git a/admin/scripts/ensure-admin.cjs b/admin/scripts/ensure-admin.cjs index 0fd9177..bc2092b 100644 --- a/admin/scripts/ensure-admin.cjs +++ b/admin/scripts/ensure-admin.cjs @@ -12,7 +12,10 @@ if (fs.existsSync(rootScript)) { const prisma = new PrismaClient(); - async function waitForDatabase(prismaClient, maxRetries = 30, delayMs = 2000) { + const MAX_RETRIES = parseInt(process.env.DB_WAIT_MAX_RETRIES || '90', 10); + const DELAY_MS = parseInt(process.env.DB_WAIT_DELAY_MS || '2000', 10); + + async function waitForDatabase(prismaClient, maxRetries = MAX_RETRIES, delayMs = DELAY_MS) { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { await prismaClient.$executeRawUnsafe('SELECT 1;'); @@ -21,11 +24,19 @@ if (fs.existsSync(rootScript)) { } catch (err) { const msg = err.message || ''; const isStartingUp = msg.includes('the database system is starting up') || - msg.includes('57P03') || - msg.includes('ConnectionRefused') || - msg.includes("Can't reach database server"); + msg.includes('57P03'); + const isUnreachable = msg.includes('ConnectionRefused') || + msg.includes("Can't reach database server") || + msg.includes('connection refused') || + msg.includes('P1001'); + + let info = msg.split('\n')[0].substring(0, 80); + if (isStartingUp) { + info = 'PostgreSQL est en cours de démarrage (recovery/init)...'; + } else if (isUnreachable) { + info = 'PostgreSQL pas encore joignable (démarrage du conteneur en cours)...'; + } - const info = isStartingUp ? 'PostgreSQL est en cours de démarrage...' : msg.split('\n')[0].substring(0, 80); console.log(`⏳ En attente de la base de données (${attempt}/${maxRetries}) : ${info}`); if (attempt === maxRetries) { diff --git a/scripts/ensure-admin.cjs b/scripts/ensure-admin.cjs index 9fa10fb..493872d 100644 --- a/scripts/ensure-admin.cjs +++ b/scripts/ensure-admin.cjs @@ -3,7 +3,10 @@ const bcrypt = require('bcryptjs'); const prisma = new PrismaClient(); -async function waitForDatabase(prismaClient, maxRetries = 30, delayMs = 2000) { +const MAX_RETRIES = parseInt(process.env.DB_WAIT_MAX_RETRIES || '90', 10); +const DELAY_MS = parseInt(process.env.DB_WAIT_DELAY_MS || '2000', 10); + +async function waitForDatabase(prismaClient, maxRetries = MAX_RETRIES, delayMs = DELAY_MS) { for (let attempt = 1; attempt <= maxRetries; attempt++) { try { await prismaClient.$executeRawUnsafe('SELECT 1;'); @@ -12,11 +15,19 @@ async function waitForDatabase(prismaClient, maxRetries = 30, delayMs = 2000) { } catch (err) { const msg = err.message || ''; const isStartingUp = msg.includes('the database system is starting up') || - msg.includes('57P03') || - msg.includes('ConnectionRefused') || - msg.includes("Can't reach database server"); + msg.includes('57P03'); + const isUnreachable = msg.includes('ConnectionRefused') || + msg.includes("Can't reach database server") || + msg.includes('connection refused') || + msg.includes('P1001'); + + let info = msg.split('\n')[0].substring(0, 80); + if (isStartingUp) { + info = 'PostgreSQL est en cours de démarrage (recovery/init)...'; + } else if (isUnreachable) { + info = 'PostgreSQL pas encore joignable (démarrage du conteneur en cours)...'; + } - const info = isStartingUp ? 'PostgreSQL est en cours de démarrage...' : msg.split('\n')[0].substring(0, 80); console.log(`⏳ En attente de la base de données (${attempt}/${maxRetries}) : ${info}`); if (attempt === maxRetries) {