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();