// src/scripts/import-users-from-csv.ts import { PrismaClient, Roles } from '@prisma/client'; import * as fs from 'fs'; import * as path from 'path'; const prisma = new PrismaClient(); // ⚙️ Chemin vers ton CSV (à adapter selon où tu le mets) const CSV_PATH = path.resolve(__dirname, 'data/export_employee_table.csv'); // Type aligné sur les colonnes du CSV type CsvUserRow = { email: string; first_name: string; last_name: string; phone_number: string; }; // Petit parseur de ligne CSV sans dépendance function splitCsvLine(line: string): string[] { const result: string[] = []; let current = ''; let inQuotes = false; for (let i = 0; i < line.length; i++) { const char = line[i]; if (char === '"') { // guillemet échappé "" if (inQuotes && line[i + 1] === '"') { current += '"'; i++; // on saute le deuxième } else { inQuotes = !inQuotes; } } else if (char === ',' && !inQuotes) { result.push(current); current = ''; } else { current += char; } } result.push(current); return result.map((v) => v.trim()); } async function main() { // 1. Lecture du fichier CSV const fileContent = fs.readFileSync(CSV_PATH, 'utf-8'); const lines = fileContent .split(/\r?\n/) .map((l) => l.trim()) .filter((l) => l.length > 0); if (lines.length <= 1) { console.error('CSV vide ou seulement un header'); return; } // 2. Header (noms de colonnes) -> ["email", "first_name", "last_name", "phone_number"] const header = splitCsvLine(lines[0]); const dataLines = lines.slice(1); // 3. Conversion de chaque ligne en objet { email, first_name, last_name, phone_number } const records: CsvUserRow[] = dataLines.map((line) => { const values = splitCsvLine(line); const row: any = {}; header.forEach((col, idx) => { row[col] = values[idx] ?? ''; }); return row as CsvUserRow; }); // 4. Mapping vers le format attendu par Prisma (model Users) const data = records.map((row) => ({ email: row.email.trim(), first_name: row.first_name.trim(), last_name: row.last_name.trim(), phone_number: row.phone_number.trim(), role: Roles.EMPLOYEE, // residence: null, })); console.log(`➡️ ${data.length} lignes trouvées dans le CSV`); console.log('Exemple importé :', data[0]); const result = await prisma.users.createMany({ data, }); console.log(`✅ ${result.count} utilisateurs insérés dans la DB`); } main() .catch((err) => { console.error('Erreur pendant l’import CSV → DB', err); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });