Checkpoint: Implémentation de la synchronisation automatique entre table users (role=formateur) et table formateurs : auto-création dans createUser/updateUser + script de migration pour les formateurs existants
This commit is contained in:
91
server/migrate-formateurs.mjs
Normal file
91
server/migrate-formateurs.mjs
Normal file
@@ -0,0 +1,91 @@
|
||||
import { drizzle } from "drizzle-orm/mysql2";
|
||||
import { eq } from "drizzle-orm";
|
||||
import { users, formateurs } from "../drizzle/schema.ts";
|
||||
import * as dotenv from "dotenv";
|
||||
|
||||
// Charger les variables d'environnement
|
||||
dotenv.config();
|
||||
|
||||
/**
|
||||
* Script de migration pour synchroniser les utilisateurs avec role='formateur'
|
||||
* qui n'ont pas encore d'entrée dans la table formateurs
|
||||
*/
|
||||
async function migrateFormateurs() {
|
||||
console.log("[Migration] Démarrage de la synchronisation des formateurs...");
|
||||
|
||||
if (!process.env.DATABASE_URL) {
|
||||
console.error("[Migration] DATABASE_URL non définie");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const db = drizzle(process.env.DATABASE_URL);
|
||||
|
||||
try {
|
||||
// Récupérer tous les utilisateurs avec role='formateur'
|
||||
const formateurUsers = await db
|
||||
.select()
|
||||
.from(users)
|
||||
.where(eq(users.role, 'formateur'));
|
||||
|
||||
console.log(`[Migration] ${formateurUsers.length} utilisateur(s) avec role='formateur' trouvé(s)`);
|
||||
|
||||
let created = 0;
|
||||
let updated = 0;
|
||||
let skipped = 0;
|
||||
|
||||
for (const user of formateurUsers) {
|
||||
// Si l'utilisateur a déjà un formateurId, vérifier qu'il existe
|
||||
if (user.formateurId) {
|
||||
const existingFormateur = await db
|
||||
.select()
|
||||
.from(formateurs)
|
||||
.where(eq(formateurs.id, user.formateurId))
|
||||
.limit(1);
|
||||
|
||||
if (existingFormateur.length > 0) {
|
||||
console.log(`[Migration] ✓ Utilisateur "${user.name}" (${user.email}) déjà lié au formateur ID ${user.formateurId}`);
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifier si l'utilisateur a un nom et un email
|
||||
if (!user.name || !user.email) {
|
||||
console.log(`[Migration] ⚠ Utilisateur ID ${user.id} ignoré (nom ou email manquant)`);
|
||||
skipped++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Créer une entrée dans la table formateurs
|
||||
const formateurResult = await db.insert(formateurs).values({
|
||||
nom: user.name,
|
||||
email: user.email,
|
||||
});
|
||||
|
||||
const newFormateurId = Number(formateurResult[0].insertId);
|
||||
|
||||
// Mettre à jour l'utilisateur avec le formateurId
|
||||
await db
|
||||
.update(users)
|
||||
.set({ formateurId: newFormateurId })
|
||||
.where(eq(users.id, user.id));
|
||||
|
||||
console.log(`[Migration] ✓ Créé formateur "${user.name}" (${user.email}) avec ID ${newFormateurId}`);
|
||||
created++;
|
||||
}
|
||||
|
||||
console.log("\n[Migration] Résumé:");
|
||||
console.log(` - Créés: ${created}`);
|
||||
console.log(` - Mis à jour: ${updated}`);
|
||||
console.log(` - Ignorés: ${skipped}`);
|
||||
console.log("[Migration] Terminé avec succès !");
|
||||
|
||||
} catch (error) {
|
||||
console.error("[Migration] Erreur:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
migrateFormateurs();
|
||||
Reference in New Issue
Block a user