Files
EM2_ERP/em2rp/functions/migrate_equipment_ids.js
T

93 lines
3.0 KiB
JavaScript

/**
* Script de migration pour ajouter le champ 'id' aux équipements qui n'en ont pas
*
* Ce script parcourt tous les documents de la collection 'equipments' et ajoute
* le champ 'id' avec la valeur du document ID si ce champ est manquant.
*/
const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json");
// Initialiser Firebase Admin
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
});
const db = admin.firestore();
async function migrateEquipmentIds() {
console.log("🔧 Migration: Ajout du champ id aux équipements");
console.log("================================================\n");
try {
// Récupérer tous les équipements
const equipmentsSnapshot = await db.collection("equipments").get();
console.log(`📦 Total d'équipements: ${equipmentsSnapshot.size}`);
let missingIdCount = 0;
let updatedCount = 0;
const errorCount = 0;
const batch = db.batch();
let batchCount = 0;
for (const doc of equipmentsSnapshot.docs) {
const data = doc.data();
// Vérifier si le champ 'id' est manquant ou vide
if (!data.id || data.id === "") {
missingIdCount++;
console.log(`❌ Équipement ${doc.id} (${data.name || "Sans nom"}) : champ 'id' manquant`);
// Ajouter au batch
batch.update(doc.ref, {id: doc.id});
batchCount++;
updatedCount++;
// Exécuter le batch tous les 500 documents (limite Firestore)
if (batchCount === 500) {
await batch.commit();
console.log(`✅ Batch de ${batchCount} documents mis à jour`);
batchCount = 0;
}
}
}
// Exécuter le dernier batch s'il reste des documents
if (batchCount > 0) {
await batch.commit();
console.log(`✅ Batch final de ${batchCount} documents mis à jour`);
}
console.log("\n================================================");
console.log("📊 RÉSUMÉ DE LA MIGRATION");
console.log("================================================");
console.log(`Total d'équipements: ${equipmentsSnapshot.size}`);
console.log(`Équipements avec 'id' manquant: ${missingIdCount}`);
console.log(`Équipements mis à jour: ${updatedCount}`);
console.log(`Erreurs: ${errorCount}`);
console.log("================================================\n");
if (missingIdCount === 0) {
console.log("✅ Tous les équipements ont déjà un champ id !");
} else if (updatedCount === missingIdCount) {
console.log("✅ Migration terminée avec succès !");
} else {
console.log("⚠️ Migration terminée avec des erreurs");
}
} catch (error) {
console.error("❌ Erreur lors de la migration:", error);
throw error;
}
}
// Exécuter la migration
migrateEquipmentIds()
.then(() => {
console.log("\n✅ Script terminé");
process.exit(0);
})
.catch((error) => {
console.error("\n❌ Script échoué:", error);
process.exit(1);
});