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