refactor: improve logging and streamline skill synchronization process

- Enhanced console logging for better clarity during skill category processing.
- Simplified skill update checks and utilized bulkInsertSkillsFromJSON for efficient skill management.
- Improved code readability by standardizing formatting and reducing unnecessary comments.
This commit is contained in:
Julien Froidefond
2025-08-22 16:41:41 +02:00
parent 734044d73b
commit 905e2b2081

View File

@@ -24,16 +24,20 @@ async function syncSkillsToDatabase(): Promise<void> {
// Charger les skills depuis les fichiers JSON // Charger les skills depuis les fichiers JSON
const skillCategoriesFromFiles = loadSkillCategoriesFromFiles(); const skillCategoriesFromFiles = loadSkillCategoriesFromFiles();
console.log(`📁 ${skillCategoriesFromFiles.length} catégories trouvées dans les fichiers`); console.log(
`📁 ${skillCategoriesFromFiles.length} catégories trouvées dans les fichiers`
);
// Récupérer les skills existantes de la base de données // Récupérer les skills existantes de la base de données
const existingCategories = await SkillsService.getSkillCategories(); const existingCategories = await SkillsService.getSkillCategories();
console.log(`💾 ${existingCategories.length} catégories existantes en base`); console.log(
`💾 ${existingCategories.length} catégories existantes en base`
);
// Créer un map des skills existantes pour une recherche rapide // Créer un map des skills existantes pour une recherche rapide
const existingSkillsMap = new Map<string, Skill>(); const existingSkillsMap = new Map<string, Skill>();
existingCategories.forEach(category => { existingCategories.forEach((category) => {
category.skills.forEach(skill => { category.skills.forEach((skill) => {
existingSkillsMap.set(skill.id, skill); existingSkillsMap.set(skill.id, skill);
}); });
}); });
@@ -45,26 +49,31 @@ async function syncSkillsToDatabase(): Promise<void> {
skillsProcessed: 0, skillsProcessed: 0,
newSkills: 0, newSkills: 0,
updatedSkills: 0, updatedSkills: 0,
skippedSkills: 0 skippedSkills: 0,
}; };
// Synchroniser chaque catégorie // Synchroniser chaque catégorie
for (const categoryFromFile of skillCategoriesFromFiles) { for (const categoryFromFile of skillCategoriesFromFiles) {
console.log(`\n📂 Traitement de la catégorie: ${categoryFromFile.category}`); console.log(
`\n📂 Traitement de la catégorie: ${categoryFromFile.category}`
);
const categoryId = categoryFromFile.category.toLowerCase(); const categoryId = categoryFromFile.category.toLowerCase();
// Vérifier si la catégorie existe, sinon la créer // Vérifier si la catégorie existe, sinon la créer
const existingCategory = existingCategories.find(cat => const existingCategory = existingCategories.find(
(cat) =>
cat.category.toLowerCase() === categoryFromFile.category.toLowerCase() cat.category.toLowerCase() === categoryFromFile.category.toLowerCase()
); );
if (!existingCategory) { if (!existingCategory) {
console.log(` Création de la nouvelle catégorie: ${categoryFromFile.category}`); console.log(
` Création de la nouvelle catégorie: ${categoryFromFile.category}`
);
await SkillsService.createSkillCategory({ await SkillsService.createSkillCategory({
id: categoryId, id: categoryId,
name: categoryFromFile.category, name: categoryFromFile.category,
icon: categoryFromFile.icon icon: categoryFromFile.icon,
}); });
} }
@@ -72,39 +81,39 @@ async function syncSkillsToDatabase(): Promise<void> {
for (const skillFromFile of categoryFromFile.skills) { for (const skillFromFile of categoryFromFile.skills) {
const existingSkill = existingSkillsMap.get(skillFromFile.id); const existingSkill = existingSkillsMap.get(skillFromFile.id);
if (!existingSkill) { // Utiliser bulkInsertSkillsFromJSON qui gère les conflits automatiquement
// Nouvelle skill - l'ajouter const needsUpdate = existingSkill
console.log(` Nouvelle skill: ${skillFromFile.name} (${skillFromFile.id})`); ? existingSkill.description !== skillFromFile.description ||
await SkillsService.createSkill({
id: skillFromFile.id,
name: skillFromFile.name,
description: skillFromFile.description,
icon: skillFromFile.icon,
categoryId: categoryId,
links: skillFromFile.links || []
});
stats.newSkills++;
} else {
// Skill existante - vérifier s'il faut mettre à jour description/icon/links
const needsUpdate =
existingSkill.description !== skillFromFile.description ||
existingSkill.icon !== skillFromFile.icon || existingSkill.icon !== skillFromFile.icon ||
JSON.stringify(existingSkill.links?.sort()) !== JSON.stringify(skillFromFile.links?.sort()); JSON.stringify(existingSkill.links?.sort()) !==
JSON.stringify(skillFromFile.links?.sort())
: true;
if (needsUpdate) { if (!existingSkill) {
console.log(` 🔄 Mise à jour de la skill: ${skillFromFile.name} (${skillFromFile.id})`); console.log(
// Utiliser la méthode bulkInsert avec une seule catégorie/skill pour la mise à jour ` Nouvelle skill: ${skillFromFile.name} (${skillFromFile.id})`
await SkillsService.bulkInsertSkillsFromJSON([{ );
category: categoryFromFile.category, stats.newSkills++;
icon: categoryFromFile.icon, } else if (needsUpdate) {
skills: [skillFromFile] console.log(
}]); ` 🔄 Mise à jour de la skill: ${skillFromFile.name} (${skillFromFile.id})`
);
stats.updatedSkills++; stats.updatedSkills++;
} else { } else {
console.log(` ✅ Skill inchangée: ${skillFromFile.name} (${skillFromFile.id})`); console.log(
` ✅ Skill inchangée: ${skillFromFile.name} (${skillFromFile.id})`
);
stats.skippedSkills++; stats.skippedSkills++;
} }
}
// Insérer/mettre à jour la skill (bulkInsert gère les conflits)
await SkillsService.bulkInsertSkillsFromJSON([
{
category: categoryFromFile.category,
icon: categoryFromFile.icon,
skills: [skillFromFile],
},
]);
stats.skillsProcessed++; stats.skillsProcessed++;
} }
@@ -122,11 +131,13 @@ async function syncSkillsToDatabase(): Promise<void> {
// Vérification finale // Vérification finale
const finalCategories = await SkillsService.getSkillCategories(); const finalCategories = await SkillsService.getSkillCategories();
const totalSkillsInDb = finalCategories.reduce((sum, cat) => sum + cat.skills.length, 0); const totalSkillsInDb = finalCategories.reduce(
(sum, cat) => sum + cat.skills.length,
0
);
console.log(`\n✅ Synchronisation terminée avec succès!`); console.log(`\n✅ Synchronisation terminée avec succès!`);
console.log(`💾 Total skills en base: ${totalSkillsInDb}`); console.log(`💾 Total skills en base: ${totalSkillsInDb}`);
} catch (error) { } catch (error) {
console.error("❌ Erreur lors de la synchronisation:", error); console.error("❌ Erreur lors de la synchronisation:", error);
process.exit(1); process.exit(1);