mirror of
https://github.com/Ladebeze66/devsite.git
synced 2026-03-27 18:03:46 +01:00
164 lines
5.0 KiB
JavaScript
164 lines
5.0 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
// Configuration
|
|
const RAW_DATA_DIR = './extract/raw';
|
|
const CLEAN_DATA_DIR = './extract/clean-data';
|
|
|
|
// Créer le dossier de sortie
|
|
if (!fs.existsSync(CLEAN_DATA_DIR)) {
|
|
fs.mkdirSync(CLEAN_DATA_DIR, { recursive: true });
|
|
}
|
|
|
|
// Fonctions de nettoyage par type de contenu
|
|
const cleaners = {
|
|
// Nettoyer les projets - garder seulement l'essentiel
|
|
projects: (data) => {
|
|
return data.data.map(project => ({
|
|
id: project.id,
|
|
name: project.name,
|
|
description: project.description,
|
|
slug: project.slug,
|
|
resum: project.Resum, // Contenu détaillé principal
|
|
link: project.link,
|
|
order: project.order,
|
|
// Garder seulement le nombre d'images (pour info)
|
|
imageCount: project.picture ? project.picture.length : 0
|
|
}));
|
|
},
|
|
|
|
// Nettoyer les compétences
|
|
competences: (data) => {
|
|
return data.data.map(competence => ({
|
|
id: competence.id,
|
|
name: competence.name,
|
|
content: competence.content, // Contenu principal
|
|
slug: competence.slug,
|
|
order: competence.order,
|
|
imageCount: competence.picture ? competence.picture.length : 0
|
|
}));
|
|
},
|
|
|
|
// Nettoyer les messages (optionnel pour documentation)
|
|
messages: (data) => {
|
|
return data.data.map(message => ({
|
|
id: message.id,
|
|
name: message.name,
|
|
email: message.email,
|
|
message: message.message,
|
|
// Extraire juste la date du message si présente
|
|
sentDate: extractDateFromMessage(message.message)
|
|
}));
|
|
}
|
|
};
|
|
|
|
// Fonction utilitaire pour extraire la date des messages
|
|
function extractDateFromMessage(messageText) {
|
|
const dateMatch = messageText.match(/📅 Envoyé le : (.+)/);
|
|
return dateMatch ? dateMatch[1] : null;
|
|
}
|
|
|
|
// Fonction principale de nettoyage
|
|
async function cleanAllData() {
|
|
console.log('🧹 Début du nettoyage des données...\n');
|
|
|
|
const results = [];
|
|
|
|
// Traiter chaque type de données
|
|
for (const [type, cleaner] of Object.entries(cleaners)) {
|
|
try {
|
|
const rawFile = path.join(RAW_DATA_DIR, `${type}-raw.json`);
|
|
|
|
// Vérifier si le fichier existe
|
|
if (!fs.existsSync(rawFile)) {
|
|
console.log(`⚠️ ${type}: fichier raw non trouvé, ignoré`);
|
|
continue;
|
|
}
|
|
|
|
console.log(`🔄 Nettoyage de ${type}...`);
|
|
|
|
// Lire les données brutes
|
|
const rawData = JSON.parse(fs.readFileSync(rawFile, 'utf8'));
|
|
|
|
// Nettoyer les données
|
|
const cleanData = cleaner(rawData);
|
|
|
|
// Calculer la réduction de taille
|
|
const rawSize = fs.statSync(rawFile).size;
|
|
const cleanJson = JSON.stringify(cleanData, null, 2);
|
|
const cleanSize = Buffer.byteLength(cleanJson, 'utf8');
|
|
const reduction = ((rawSize - cleanSize) / rawSize * 100).toFixed(1);
|
|
|
|
// Sauvegarder les données nettoyées
|
|
const cleanFile = path.join(CLEAN_DATA_DIR, `${type}-clean.json`);
|
|
fs.writeFileSync(cleanFile, cleanJson, 'utf8');
|
|
|
|
console.log(`✅ ${type}: ${cleanData.length} éléments nettoyés`);
|
|
console.log(` 📦 Taille réduite de ${reduction}% (${rawSize} → ${cleanSize} bytes)`);
|
|
|
|
results.push({
|
|
type,
|
|
success: true,
|
|
itemCount: cleanData.length,
|
|
rawSize,
|
|
cleanSize,
|
|
reduction: `${reduction}%`
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error(`❌ Erreur lors du nettoyage de ${type}:`, error.message);
|
|
results.push({
|
|
type,
|
|
success: false,
|
|
error: error.message
|
|
});
|
|
}
|
|
}
|
|
|
|
// Résumé final
|
|
console.log('\n📊 Résumé du nettoyage:');
|
|
console.log('=========================');
|
|
|
|
let totalRawSize = 0;
|
|
let totalCleanSize = 0;
|
|
let successCount = 0;
|
|
|
|
results.forEach(result => {
|
|
if (result.success) {
|
|
console.log(`✅ ${result.type}: ${result.itemCount} éléments (${result.reduction} de réduction)`);
|
|
totalRawSize += result.rawSize;
|
|
totalCleanSize += result.cleanSize;
|
|
successCount++;
|
|
} else {
|
|
console.log(`❌ ${result.type}: ${result.error}`);
|
|
}
|
|
});
|
|
|
|
const totalReduction = ((totalRawSize - totalCleanSize) / totalRawSize * 100).toFixed(1);
|
|
|
|
console.log(`\n🎯 ${successCount}/${Object.keys(cleaners).length} types nettoyés avec succès`);
|
|
console.log(`📦 Réduction totale: ${totalReduction}% (${totalRawSize} → ${totalCleanSize} bytes)`);
|
|
console.log(`📁 Données nettoyées sauvegardées dans ${CLEAN_DATA_DIR}/`);
|
|
|
|
// Sauvegarder le résumé
|
|
const summary = {
|
|
cleanedAt: new Date().toISOString(),
|
|
results: results,
|
|
totalTypes: Object.keys(cleaners).length,
|
|
successfulTypes: successCount,
|
|
totalReduction: `${totalReduction}%`,
|
|
rawSize: totalRawSize,
|
|
cleanSize: totalCleanSize
|
|
};
|
|
|
|
fs.writeFileSync(
|
|
path.join(CLEAN_DATA_DIR, 'cleaning-summary.json'),
|
|
JSON.stringify(summary, null, 2),
|
|
'utf8'
|
|
);
|
|
|
|
console.log('📄 Résumé sauvegardé dans cleaning-summary.json');
|
|
}
|
|
|
|
// Exécuter le script
|
|
cleanAllData().catch(console.error); |