Files
SAE_riot/services/firebaseService.js

158 lines
4.4 KiB
JavaScript
Raw Normal View History

2025-03-28 13:53:35 +01:00
// Firebase V9 ESM seulement
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.6.1/firebase-app.js";
import {
getAuth,
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
onAuthStateChanged,
signOut
} from "https://www.gstatic.com/firebasejs/9.6.1/firebase-auth.js";
import {
getFirestore,
collection,
addDoc,
doc,
setDoc
} from "https://www.gstatic.com/firebasejs/9.6.1/firebase-firestore.js";
2025-03-28 16:27:07 +01:00
import {
query,
where,
getDocs
} from "https://www.gstatic.com/firebasejs/9.6.1/firebase-firestore.js";
2025-03-28 13:53:35 +01:00
const firebaseConfig = {
apiKey: "AIzaSyBXKB6AGbTN95lOLrIVpWrSIK_uL_C6GUA",
authDomain: "music-app-riotjs.firebaseapp.com",
projectId: "music-app-riotjs",
storageBucket: "music-app-riotjs.firebasestorage.app",
messagingSenderId: "483729603961",
appId: "1:483729603961:web:122965ce7dbeb2e85103a8",
measurementId: "G-18P6WCT80"
};
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
export async function login(email, password) {
2025-03-28 16:27:07 +01:00
const userC = await signInWithEmailAndPassword(auth, email, password);
localStorage.setItem("uid", userC.user.uid);
return userC;
2025-03-28 13:53:35 +01:00
}
export async function sign(email, password) {
const userCred = await createUserWithEmailAndPassword(auth, email, password);
2025-03-28 16:27:07 +01:00
await adduserdata(userCred.user.email, userCred.user.uid);
2025-03-29 15:53:23 +01:00
localStorage.setItem("uid", userCred.user.uid);
2025-03-28 16:27:07 +01:00
return userCred;
2025-03-28 13:53:35 +01:00
}
2025-03-28 16:27:07 +01:00
export async function adduserdata(email_user, uid) {
2025-03-28 13:53:35 +01:00
await addDoc(collection(db, "users"), {
2025-03-28 16:27:07 +01:00
email: email_user,
uid: uid
2025-03-28 13:53:35 +01:00
});
}
export async function logout() {
await signOut(auth);
}
window.observeAuthState = function(callback) {
onAuthStateChanged(auth, callback);
};
2025-03-28 16:27:07 +01:00
2025-03-28 13:53:35 +01:00
export async function favorite(releaseId) {
2025-03-28 16:27:07 +01:00
const storedUid = localStorage.getItem("uid");
const usersRef = collection(db, "users");
const q = query(usersRef, where("uid", "==", storedUid));
const querySnapshot = await getDocs(q);
const userDoc = querySnapshot.docs[0];
const userDocId = userDoc.id;
const favoritesRef = collection(db, "users", userDocId, "favorites");
await addDoc(favoritesRef, {
releaseId: releaseId,
2025-03-28 13:53:35 +01:00
});
}
2025-03-28 16:27:07 +01:00
2025-03-28 13:53:35 +01:00
export async function getFavorites() {
2025-03-28 16:27:07 +01:00
const storedUid = localStorage.getItem("uid");
if (!storedUid) {
console.warn("Aucun UID trouvé dans localStorage.");
2025-03-28 13:53:35 +01:00
return [];
}
2025-03-28 16:27:07 +01:00
const usersRef = collection(db, "users");
const q = query(usersRef, where("uid", "==", storedUid));
const querySnapshot = await getDocs(q);
2025-03-28 13:53:35 +01:00
2025-03-28 16:27:07 +01:00
if (querySnapshot.empty) {
console.warn("Aucun document utilisateur trouvé avec cet UID.");
return [];
}
2025-03-28 13:53:35 +01:00
2025-03-28 16:27:07 +01:00
const userDoc = querySnapshot.docs[0];
const userDocId = userDoc.id;
const favoritesRef = collection(db, "users", userDocId, "favorites");
const snapshot = await getDocs(favoritesRef);
return snapshot.docs.map(doc => doc.data().releaseId);
}
export async function isFavorite(releaseId) {
const storedUid = localStorage.getItem("uid");
if (!storedUid) return false;
const usersRef = collection(db, "users");
const userQuery = query(usersRef, where("uid", "==", storedUid));
const userSnapshot = await getDocs(userQuery);
if (userSnapshot.empty) return false;
const userDoc = userSnapshot.docs[0];
const userDocId = userDoc.id;
const favoritesRef = collection(db, "users", userDocId, "favorites");
const favQuery = query(favoritesRef, where("releaseId", "==", releaseId));
const favSnapshot = await getDocs(favQuery);
2025-03-29 15:53:23 +01:00
return !favSnapshot.empty;
}
export async function removeFavorite(releaseId) {
const storedUid = localStorage.getItem("uid");
const usersRef = collection(db, "users");
const userQuery = query(usersRef, where("uid", "==", storedUid));
const userSnapshot = await getDocs(userQuery);
const userDoc = userSnapshot.docs[0];
const userDocId = userDoc.id;
const favoritesRef = collection(db, "users", userDocId, "favorites");
const favQuery = query(favoritesRef, where("releaseId", "==", releaseId));
const favSnapshot = await getDocs(favQuery);
await deleteDoc(doc.ref);
2025-03-29 15:53:23 +01:00
console.log(`Le favori avec releaseId ${releaseId} a été supprimé.`);
2025-03-28 13:53:35 +01:00
}
window.login = login;
window.sign = sign;
window.logout = logout;
window.favorite = favorite;
2025-03-28 16:27:07 +01:00
window.getFavorites = getFavorites;
2025-03-29 15:53:23 +01:00
window.isFavorite = isFavorite;
window.removeFavorite = removeFavorite;