Files
EM2_ERP/em2rp/functions/migrate_email_prefs.js
T

114 lines
3.3 KiB
JavaScript

/**
* Script de migration : Active les emails pour tous les utilisateurs existants
* À exécuter une seule fois après le déploiement
*/
const admin = require("firebase-admin");
const logger = require("firebase-functions/logger");
// AJOUTER CECI : Charger le fichier de clé
const serviceAccount = require("./serviceAccountKey.json");
// Initialiser Firebase Admin avec les credentials explicites
if (!admin.apps.length) {
admin.initializeApp({
credential: admin.credential.cert(serviceAccount), // <-- Utiliser la clé ici
projectId: "em2rp-951dc",
});
}
const db = admin.firestore();
/**
* Active les notifications par email pour tous les utilisateurs existants
*/
async function migrateEmailPreferences() {
console.log("=== DÉBUT MIGRATION EMAIL PREFERENCES ===\n");
try {
// 1. Récupérer tous les utilisateurs
const usersSnapshot = await db.collection("users").get();
console.log(`${usersSnapshot.size} utilisateurs trouvés\n`);
// 2. Préparer les updates
const updates = [];
let alreadyEnabled = 0;
let toUpdate = 0;
usersSnapshot.forEach((doc) => {
const user = doc.data();
const prefs = user.notificationPreferences || {};
// Vérifier si déjà activé
if (prefs.emailEnabled === true) {
alreadyEnabled++;
console.log(`${user.email || doc.id}: emails déjà activés`);
} else {
toUpdate++;
console.log(`${user.email || doc.id}: activation des emails`);
updates.push({
ref: doc.ref,
data: {
"notificationPreferences.emailEnabled": true,
},
});
}
});
console.log(`\n--- RÉSUMÉ ---`);
console.log(` Total utilisateurs: ${usersSnapshot.size}`);
console.log(` Déjà activés: ${alreadyEnabled}`);
console.log(` À mettre à jour: ${toUpdate}`);
// 3. Appliquer les mises à jour par batches de 500 (limite Firestore)
if (updates.length > 0) {
console.log(`\nApplication des mises à jour...`);
const batchSize = 500;
for (let i = 0; i < updates.length; i += batchSize) {
const batch = db.batch();
const currentBatch = updates.slice(i, i + batchSize);
currentBatch.forEach((update) => {
batch.update(update.ref, update.data);
});
await batch.commit();
console.log(` ✓ Batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(updates.length / batchSize)} appliqué`);
}
console.log(`\n✓ Migration terminée avec succès !`);
console.log(` ${toUpdate} utilisateurs mis à jour\n`);
} else {
console.log(`\n✓ Aucune mise à jour nécessaire\n`);
}
console.log("=== FIN MIGRATION ===");
return {
success: true,
total: usersSnapshot.size,
alreadyEnabled,
updated: toUpdate,
};
} catch (error) {
console.error("❌ ERREUR MIGRATION:", error);
throw error;
}
}
// Exécuter la migration si appelé directement
if (require.main === module) {
migrateEmailPreferences()
.then((result) => {
console.log("\n✓ Migration réussie:", result);
process.exit(0);
})
.catch((error) => {
console.error("\n❌ Migration échouée:", error);
process.exit(1);
});
}
module.exports = {migrateEmailPreferences};