diff --git a/scripts/generate-test-data.ts b/scripts/generate-test-data.ts index a233f6d..b7da0e8 100644 --- a/scripts/generate-test-data.ts +++ b/scripts/generate-test-data.ts @@ -76,27 +76,51 @@ interface SkillData { category: string; } -async function loadAllSkills(): Promise { +interface SkillCategoryData { + id: string; + name: string; + icon: string; +} + +async function loadAllSkills(): Promise<{ + skills: SkillData[]; + categories: SkillCategoryData[]; +}> { const skillsDir = path.join(__dirname, "../data/skills"); const files = fs .readdirSync(skillsDir) .filter((file) => file.endsWith(".json")); const allSkills: SkillData[] = []; + const categoriesMap = new Map(); for (const file of files) { const filePath = path.join(skillsDir, file); const content = JSON.parse(fs.readFileSync(filePath, "utf-8")); + // Extraire la catĂ©gorie + const categoryId = content.category.toLowerCase().replace(/\s+/g, "-"); + const categoryName = content.category; + const categoryIcon = content.icon || "default-icon"; + + categoriesMap.set(categoryId, { + id: categoryId, + name: categoryName, + icon: categoryIcon, + }); + content.skills.forEach((skill: any) => { allSkills.push({ ...skill, - category: content.category, + category: categoryId, }); }); } - return allSkills; + return { + skills: allSkills, + categories: Array.from(categoriesMap.values()), + }; } function getRandomElement(array: T[]): T { @@ -123,6 +147,40 @@ function generateRandomLevel(): SkillLevel { return "never"; } +async function insertSkillCategories(categories: SkillCategoryData[]) { + const pool = getPool(); + + console.log("📚 CrĂ©ation des catĂ©gories de skills..."); + + for (const category of categories) { + await pool.query( + "INSERT INTO skill_categories (id, name, icon) VALUES ($1, $2, $3) ON CONFLICT (id) DO NOTHING", + [category.id, category.name, category.icon] + ); + console.log(` ✅ CatĂ©gorie créée: ${category.name}`); + } +} + +async function insertSkills(skills: SkillData[]) { + const pool = getPool(); + + console.log("🔧 CrĂ©ation des skills..."); + + for (const skill of skills) { + await pool.query( + "INSERT INTO skills (id, name, description, icon, category_id) VALUES ($1, $2, $3, $4, $5) ON CONFLICT (id) DO NOTHING", + [ + skill.id, + skill.name, + skill.description, + skill.icon || null, + skill.category, + ] + ); + } + console.log(` ✅ ${skills.length} skills créés`); +} + async function insertTestTeams() { const pool = getPool(); @@ -151,14 +209,16 @@ async function insertTestUsers() { for (let i = 0; i < userCount; i++) { const firstName = getRandomElement(FIRST_NAMES); const lastName = getRandomElement(LAST_NAMES); + const email = `${firstName.toLowerCase()}.${lastName.toLowerCase()}@peakskills.local`; + const passwordHash = "$2b$10$default.hash.for.test.users.placeholder"; try { const result = await pool.query( - `INSERT INTO users (first_name, last_name, team_id) - VALUES ($1, $2, $3) - ON CONFLICT (first_name, last_name, team_id) DO NOTHING + `INSERT INTO users (first_name, last_name, team_id, email, password_hash) + VALUES ($1, $2, $3, $4, $5) + ON CONFLICT (email) DO NOTHING RETURNING uuid_id`, - [firstName, lastName, team.id] + [firstName, lastName, team.id, email, passwordHash] ); if (result.rows.length > 0) { @@ -167,13 +227,14 @@ async function insertTestUsers() { firstName, lastName, teamId: team.id, + email, }); console.log( - ` ✅ Utilisateur créé: ${firstName} ${lastName} (${team.name})` + ` ✅ Utilisateur créé: ${firstName} ${lastName} (${team.name}) - ${email}` ); } } catch (error) { - // Ignore les conflits de nom + // Ignore les conflits d'email console.log( ` ⚠ Utilisateur ${firstName} ${lastName} existe dĂ©jĂ  dans ${team.name}` ); @@ -234,10 +295,20 @@ async function main() { try { console.log("🚀 GĂ©nĂ©ration des donnĂ©es de test...\n"); - // Charger tous les skills - console.log("📚 Chargement des skills..."); - const skills = await loadAllSkills(); - console.log(` ✅ ${skills.length} skills chargĂ©es\n`); + // Charger tous les skills et catĂ©gories + console.log("📚 Chargement des skills et catĂ©gories..."); + const { skills, categories } = await loadAllSkills(); + console.log( + ` ✅ ${skills.length} skills chargĂ©es dans ${categories.length} catĂ©gories\n` + ); + + // CrĂ©er les catĂ©gories de skills + await insertSkillCategories(categories); + console.log(""); + + // CrĂ©er les skills + await insertSkills(skills); + console.log(""); // CrĂ©er les teams await insertTestTeams(); @@ -254,9 +325,10 @@ async function main() { console.log("✹ DonnĂ©es de test gĂ©nĂ©rĂ©es avec succĂšs !"); console.log(`📈 RĂ©sumĂ© :`); console.log(` - Direction: ${TEST_DIRECTION}`); + console.log(` - CatĂ©gories de skills: ${categories.length}`); + console.log(` - Skills: ${skills.length}`); console.log(` - Teams: ${TEST_TEAMS.length}`); console.log(` - Utilisateurs: ${users.length}`); - console.log(` - Skills disponibles: ${skills.length}`); } catch (error) { console.error("❌ Erreur lors de la gĂ©nĂ©ration des donnĂ©es:", error); process.exit(1);