feat: implement comprehensive Firebase Functions backend for equipment management and migrate core repository services

This commit is contained in:
ElPoyo
2026-05-26 15:35:48 +02:00
parent 323df01afe
commit ea1e1335e3
37 changed files with 6315 additions and 6140 deletions
+26 -27
View File
@@ -5,28 +5,28 @@
* le champ 'id' avec la valeur du document ID si ce champ est manquant.
*/
const admin = require('firebase-admin');
const serviceAccount = require('./serviceAccountKey.json');
const admin = require("firebase-admin");
const serviceAccount = require("./serviceAccountKey.json");
// Initialiser Firebase Admin
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
credential: admin.credential.cert(serviceAccount),
});
const db = admin.firestore();
async function migrateEquipmentIds() {
console.log('🔧 Migration: Ajout du champ id aux équipements');
console.log('================================================\n');
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();
const equipmentsSnapshot = await db.collection("equipments").get();
console.log(`📦 Total d'équipements: ${equipmentsSnapshot.size}`);
let missingIdCount = 0;
let updatedCount = 0;
let errorCount = 0;
const errorCount = 0;
const batch = db.batch();
let batchCount = 0;
@@ -34,12 +34,12 @@ async function migrateEquipmentIds() {
const data = doc.data();
// Vérifier si le champ 'id' est manquant ou vide
if (!data.id || data.id === '') {
if (!data.id || data.id === "") {
missingIdCount++;
console.log(`❌ Équipement ${doc.id} (${data.name || 'Sans nom'}) : champ 'id' manquant`);
console.log(`❌ Équipement ${doc.id} (${data.name || "Sans nom"}) : champ 'id' manquant`);
// Ajouter au batch
batch.update(doc.ref, { id: doc.id });
batch.update(doc.ref, {id: doc.id});
batchCount++;
updatedCount++;
@@ -58,36 +58,35 @@ async function migrateEquipmentIds() {
console.log(`✅ Batch final de ${batchCount} documents mis à jour`);
}
console.log('\n================================================');
console.log('📊 RÉSUMÉ DE LA MIGRATION');
console.log('================================================');
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');
console.log("================================================\n");
if (missingIdCount === 0) {
console.log('✅ Tous les équipements ont déjà un champ id !');
console.log("✅ Tous les équipements ont déjà un champ id !");
} else if (updatedCount === missingIdCount) {
console.log('✅ Migration terminée avec succès !');
console.log("✅ Migration terminée avec succès !");
} else {
console.log('⚠️ Migration terminée avec des erreurs');
console.log("⚠️ Migration terminée avec des erreurs");
}
} catch (error) {
console.error('❌ Erreur lors de la migration:', 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);
});
.then(() => {
console.log("\n✅ Script terminé");
process.exit(0);
})
.catch((error) => {
console.error("\n❌ Script échoué:", error);
process.exit(1);
});