Checkpoint: Le panneau d'affectations des établissements dans la page Admin est désormais disponible pour tous les utilisateurs (référents et adhérents), pas uniquement les adhérents. Ajout d'une barre de recherche dans le panneau, affichage du numéro FINESS, et composant AffectationsPanel réutilisable. Zéro erreur TypeScript.
This commit is contained in:
93
scripts/create-admin.mjs
Normal file
93
scripts/create-admin.mjs
Normal file
@@ -0,0 +1,93 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user