// // src/scripts/import-users-from-csv.ts // import { PrismaClient } 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(), // // residence: null, // si tu veux la forcer à null // // role: 'GUEST', // sinon Prisma va appliquer la valeur par défaut // })); // 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(); // });