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:
@@ -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,70 +49,75 @@ 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.category.toLowerCase() === categoryFromFile.category.toLowerCase()
|
(cat) =>
|
||||||
|
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,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Synchroniser les skills de cette catégorie
|
// Synchroniser les skills de cette catégorie
|
||||||
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) {
|
|
||||||
// Nouvelle skill - l'ajouter
|
|
||||||
console.log(` ➕ Nouvelle skill: ${skillFromFile.name} (${skillFromFile.id})`);
|
|
||||||
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 ||
|
|
||||||
JSON.stringify(existingSkill.links?.sort()) !== JSON.stringify(skillFromFile.links?.sort());
|
|
||||||
|
|
||||||
if (needsUpdate) {
|
// Utiliser bulkInsertSkillsFromJSON qui gère les conflits automatiquement
|
||||||
console.log(` 🔄 Mise à jour de la skill: ${skillFromFile.name} (${skillFromFile.id})`);
|
const needsUpdate = existingSkill
|
||||||
// Utiliser la méthode bulkInsert avec une seule catégorie/skill pour la mise à jour
|
? existingSkill.description !== skillFromFile.description ||
|
||||||
await SkillsService.bulkInsertSkillsFromJSON([{
|
existingSkill.icon !== skillFromFile.icon ||
|
||||||
category: categoryFromFile.category,
|
JSON.stringify(existingSkill.links?.sort()) !==
|
||||||
icon: categoryFromFile.icon,
|
JSON.stringify(skillFromFile.links?.sort())
|
||||||
skills: [skillFromFile]
|
: true;
|
||||||
}]);
|
|
||||||
stats.updatedSkills++;
|
if (!existingSkill) {
|
||||||
} else {
|
console.log(
|
||||||
console.log(` ✅ Skill inchangée: ${skillFromFile.name} (${skillFromFile.id})`);
|
` ➕ Nouvelle skill: ${skillFromFile.name} (${skillFromFile.id})`
|
||||||
stats.skippedSkills++;
|
);
|
||||||
}
|
stats.newSkills++;
|
||||||
|
} else if (needsUpdate) {
|
||||||
|
console.log(
|
||||||
|
` 🔄 Mise à jour de la skill: ${skillFromFile.name} (${skillFromFile.id})`
|
||||||
|
);
|
||||||
|
stats.updatedSkills++;
|
||||||
|
} else {
|
||||||
|
console.log(
|
||||||
|
` ✅ Skill inchangée: ${skillFromFile.name} (${skillFromFile.id})`
|
||||||
|
);
|
||||||
|
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++;
|
||||||
}
|
}
|
||||||
|
|
||||||
stats.categoriesProcessed++;
|
stats.categoriesProcessed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user