the-tip-top-backend/scripts/check-and-create-admin.js
2025-11-17 23:47:54 +01:00

94 lines
3.0 KiB
JavaScript

/**
* Script pour vérifier et créer un compte ADMIN
*/
import { pool } from '../db.js';
import bcrypt from 'bcrypt';
async function checkAndCreateAdmin() {
try {
console.log('🔍 Vérification des utilisateurs ADMIN...\n');
// 1. Vérifier tous les utilisateurs
const allUsers = await pool.query(`
SELECT id, email, role, is_verified, created_at
FROM users
ORDER BY created_at DESC
`);
console.log(`📊 Total d'utilisateurs: ${allUsers.rows.length}\n`);
console.table(allUsers.rows);
// 2. Vérifier les admins existants
const admins = await pool.query(`
SELECT email, role, is_verified
FROM users
WHERE role = 'ADMIN'
`);
console.log(`\n👑 Nombre d'administrateurs: ${admins.rows.length}`);
if (admins.rows.length > 0) {
console.log('✅ Administrateurs trouvés:');
console.table(admins.rows);
} else {
console.log('❌ Aucun administrateur trouvé!\n');
// 3. Proposer de créer ou promouvoir un admin
if (allUsers.rows.length > 0) {
console.log('📝 Options:');
console.log('1. Promouvoir un utilisateur existant au rôle ADMIN');
console.log('2. Créer un nouveau compte ADMIN\n');
// Promouvoir le premier utilisateur au rôle ADMIN (pour l'exemple)
const userToPromote = allUsers.rows[0];
console.log(`🔄 Promotion de ${userToPromote.email} au rôle ADMIN...`);
await pool.query(
'UPDATE users SET role = $1, is_verified = TRUE WHERE id = $2',
['ADMIN', userToPromote.id]
);
console.log(`${userToPromote.email} est maintenant ADMIN!\n`);
} else {
console.log('📝 Création d\'un compte ADMIN par défaut...');
const hashedPassword = await bcrypt.hash('Admin123!', 10);
const result = await pool.query(`
INSERT INTO users (email, password, first_name, last_name, role, is_verified)
VALUES ($1, $2, $3, $4, $5, TRUE)
RETURNING id, email, role
`, ['admin@thetiptop.com', hashedPassword, 'Admin', 'TheTipTop', 'ADMIN']);
console.log('✅ Compte ADMIN créé:');
console.log(` Email: admin@thetiptop.com`);
console.log(` Mot de passe: Admin123!`);
console.log(` ID: ${result.rows[0].id}\n`);
}
}
// 4. Vérification finale
const finalCheck = await pool.query(`
SELECT email, role, is_verified
FROM users
WHERE role = 'ADMIN'
`);
console.log('🎯 Résultat final - Administrateurs:');
console.table(finalCheck.rows);
// 5. Vérifier les tickets
const ticketsCount = await pool.query('SELECT COUNT(*) as count FROM tickets');
console.log(`\n🎫 Nombre total de tickets: ${ticketsCount.rows[0].count}`);
await pool.end();
console.log('\n✅ Script terminé avec succès!');
} catch (error) {
console.error('❌ Erreur:', error.message);
await pool.end();
process.exit(1);
}
}
checkAndCreateAdmin();