114 lines
3.3 KiB
JavaScript
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};
|
|
|