This commit is contained in:
2026-04-02 14:15:26 +02:00
parent 0cc8ab8540
commit af75a09c18
11 changed files with 734 additions and 472 deletions
+31 -30
View File
@@ -1,3 +1,11 @@
// =============================================================================
// firebase.js — Gestion de la base de données et de l'authentification Firebase
//
// Objectif pour la soutenance : Montrer l'intégration d'un Backend-as-a-Service,
// l'utilisation de modules ES externes et la séparation entre les accès BDD
// (Firestore) et la gestion des comptes (Auth).
// =============================================================================
import { initializeApp } from "https://www.gstatic.com/firebasejs/11.6.1/firebase-app.js";
import {
@@ -16,65 +24,58 @@ import {
} from "https://www.gstatic.com/firebasejs/11.6.1/firebase-firestore.js";
// Clés publiques. La sécurité réelle des données se configure côté Firebase
// grâce aux Firestore Security Rules (qui empêcheraient un uid de lire la data d'un autre uid).
const firebaseConfig = {
apiKey: "AIzaSyDr1jMgGm0Oj_bOiWY-8Gy27IlzkmAzlOM",
authDomain: "parcoursupp-expl.firebaseapp.com",
projectId: "parcoursupp-expl",
storageBucket: "parcoursupp-expl.firebasestorage.app",
apiKey: "AIzaSyDr1jMgGm0Oj_bOiWY-8Gy27IlzkmAzlOM",
authDomain: "parcoursupp-expl.firebaseapp.com",
projectId: "parcoursupp-expl",
storageBucket: "parcoursupp-expl.firebasestorage.app",
messagingSenderId: "973054617217",
appId: "1:973054617217:web:4d52af4280396976228f80"
appId: "1:973054617217:web:4d52af4280396976228f80"
};
// Initialisation des services uniques pour toute l'app
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
const auth = getAuth(app); // Service dédié à l'authentification
const db = getFirestore(app); // Service base de données
// Créer un compte avec email et mot de passe
// --- Services d'authentification ---
// Encapsulation des méthodes Firebase pour des appels asynchrones simplifiés dans nos composants
async function createAccount(email, password) {
return createUserWithEmailAndPassword(auth, email, password);
}
// Se connecter avec email et mot de passe
async function login(email, password) {
return signInWithEmailAndPassword(auth, email, password);
}
// Se déconnecter
async function logout() {
return signOut(auth);
}
// Écouter les changements d'état de connexion
// Le pattern de listener (callback) : permet de réagir à tout changement de session
// sans avoir à vérifier en permanence l'état de l'utilisateur.
function onUserChanged(callback) {
return onAuthStateChanged(auth, callback);
}
// Sauvegarder les données d'un utilisateur dans Firestore
// --- Services base de données Firestore ---
// Utilise { merge: true } pour ne mettre à jour que le champ `selection`
// sans écraser d'éventuelles autres données de l'utilisateur si on complexifie l'app plus tard.
async function saveUserData(uid, data) {
await setDoc(doc(db, "users", uid), data, { merge: true });
}
// Charger les données d'un utilisateur depuis Firestore
// Récupère l'état enregistré au format JSON document.
// S'il n'existe pas, on retourne poliment null.
async function loadUserData(uid) {
var snap = await getDoc(doc(db, "users", uid));
if (snap.exists()) {
return snap.data();
} else {
return null;
}
return snap.exists() ? snap.data() : null;
}
export {
auth,
db,
createAccount,
login,
logout,
onUserChanged,
saveUserData,
loadUserData
};
export { auth, db, createAccount, login, logout, onUserChanged, saveUserData, loadUserData };