93 lines
3.0 KiB
JavaScript
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);
|
|
});
|