feat: add admin package configuration and automated super admin initialization script
This commit is contained in:
@@ -3,12 +3,39 @@ const bcrypt = require('bcryptjs');
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function waitForDatabase(prismaClient, maxRetries = 30, delayMs = 2000) {
|
||||
for (let attempt = 1; attempt <= maxRetries; attempt++) {
|
||||
try {
|
||||
await prismaClient.$executeRawUnsafe('SELECT 1;');
|
||||
console.log('✅ Base de données prête et accessible.');
|
||||
return true;
|
||||
} 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");
|
||||
|
||||
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) {
|
||||
throw new Error(`Délai dépassé en attendant la base de données après ${maxRetries} tentatives (${maxRetries * (delayMs / 1000)}s): ${msg}`);
|
||||
}
|
||||
await new Promise(resolve => setTimeout(resolve, delayMs));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const email = 'admin@afrohub.com';
|
||||
const initialPassword = process.env.ADMIN_INITIAL_PASSWORD || 'afrohub2025';
|
||||
|
||||
console.log(`🔍 Vérification du compte Super Admin (${email})...`);
|
||||
|
||||
// Attente que la base de données soit prête à accepter les requêtes
|
||||
await waitForDatabase(prisma);
|
||||
|
||||
// Auto-migration: Ensure columns adminRole and adminPermissions exist
|
||||
try {
|
||||
await prisma.$executeRawUnsafe(`
|
||||
@@ -65,9 +92,13 @@ async function main() {
|
||||
|
||||
main()
|
||||
.catch(err => {
|
||||
console.error("❌ Erreur lors de l'initialisation du Super Admin:", err);
|
||||
process.exit(1);
|
||||
console.error("⚠️ Note lors de l'initialisation du Super Admin:", err.message || err);
|
||||
console.warn("⚠️ Poursuite du démarrage de l'application Next.js...");
|
||||
// Ne pas crasher le conteneur en production si le script de vérification échoue
|
||||
process.exit(0);
|
||||
})
|
||||
.finally(async () => {
|
||||
await prisma.$disconnect();
|
||||
try {
|
||||
await prisma.$disconnect();
|
||||
} catch (_) {}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user