import { drizzle } from "drizzle-orm/mysql2"; import mysql from "mysql2/promise"; import bcrypt from "bcryptjs"; import { eq } from "drizzle-orm"; import * as schema from "../drizzle/schema.ts"; import dotenv from "dotenv"; dotenv.config(); const { users, localCredentials } = schema; const EMAIL = "adminItinova"; // login (utilisé comme email) const PASSWORD = "Itinova69!"; const NAME = "Gestionnaire SONUM (Itinova)"; const SONUM_ROLE = "gestionnaire"; const OPEN_ID = "local-admin-itinova"; // openId unique pour compte local async function main() { if (!process.env.DATABASE_URL) { console.error("DATABASE_URL manquant"); process.exit(1); } const connection = await mysql.createConnection(process.env.DATABASE_URL); const db = drizzle(connection); // Vérifier si l'utilisateur existe déjà const existing = await db .select() .from(users) .where(eq(users.openId, OPEN_ID)) .limit(1); let userId; if (existing.length > 0) { userId = existing[0].id; console.log(`Utilisateur existant trouvé (id=${userId}), mise à jour du mot de passe...`); // Mettre à jour le rôle au cas où await db .update(users) .set({ sonumRole: SONUM_ROLE, name: NAME, email: EMAIL, updatedAt: new Date() }) .where(eq(users.id, userId)); } else { // Créer l'utilisateur const result = await db.insert(users).values({ openId: OPEN_ID, name: NAME, email: EMAIL, loginMethod: "local", role: "user", sonumRole: SONUM_ROLE, cguAccepted: true, cguAcceptedAt: new Date(), lastSignedIn: new Date(), }); userId = Number(result[0].insertId); console.log(`Utilisateur créé (id=${userId})`); } // Hasher le mot de passe const passwordHash = await bcrypt.hash(PASSWORD, 12); // Insérer ou mettre à jour les credentials locaux const existingCreds = await db .select() .from(localCredentials) .where(eq(localCredentials.userId, userId)) .limit(1); if (existingCreds.length > 0) { await db .update(localCredentials) .set({ passwordHash, updatedAt: new Date() }) .where(eq(localCredentials.userId, userId)); console.log("Mot de passe mis à jour."); } else { await db.insert(localCredentials).values({ userId, passwordHash }); console.log("Credentials locaux créés."); } console.log("\n✅ Compte générique gestionnaire SONUM prêt :"); console.log(` Login : ${EMAIL}`); console.log(` Rôle : ${SONUM_ROLE}`); console.log(` Nom : ${NAME}`); await connection.end(); } main().catch((err) => { console.error("Erreur :", err); process.exit(1); });