/** * 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); });