Files
SAE_riot/services/firebaseService.js
2025-04-02 13:18:06 +02:00

169 lines
4.7 KiB
JavaScript

// 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,
deleteDoc
} from "https://www.gstatic.com/firebasejs/9.6.1/firebase-firestore.js";
import {
query,
where,
getDocs
} from "https://www.gstatic.com/firebasejs/9.6.1/firebase-firestore.js";
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) {
const userC = await signInWithEmailAndPassword(auth, email, password);
localStorage.setItem("uid", userC.user.uid);
return userC;
}
export async function sign(email, password) {
const userCred = await createUserWithEmailAndPassword(auth, email, password);
await adduserdata(userCred.user.email, userCred.user.uid);
localStorage.setItem("uid", userCred.user.uid);
return userCred;
}
export async function adduserdata(email_user, uid) {
await addDoc(collection(db, "users"), {
email: email_user,
uid: uid
});
}
export async function logout() {
await signOut(auth);
}
window.observeAuthState = function(callback) {
onAuthStateChanged(auth, callback);
};
export async function favorite(releaseId, type) {
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,
Type: type,
});
}
export async function getFavorites() {
const storedUid = localStorage.getItem("uid");
if (!storedUid) {
console.warn("Aucun UID trouvé dans localStorage.");
return [];
}
const usersRef = collection(db, "users");
const q = query(usersRef, where("uid", "==", storedUid));
const querySnapshot = await getDocs(q);
if (querySnapshot.empty) {
console.warn("Aucun document utilisateur trouvé avec cet UID.");
return [];
}
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 => {
const data = doc.data();
return {
releaseId: data.releaseId,
Type: data.Type
};
});
}
export async function isFavorite(releaseId, type) {
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), where("Type", "==", type));
const favSnapshot = await getDocs(favQuery);
if (!favSnapshot.empty) {
return true;
} else {
return false;
}
}
export async function removeFavorite(releaseId, type) {
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), where("Type", "==", type));
const favSnapshot = await getDocs(favQuery);
await deleteDoc(favSnapshot.docs[0].ref);
console.log(`Le favori avec releaseId ${releaseId} a été supprimé.`);
}
window.login = login;
window.sign = sign;
window.logout = logout;
window.favorite = favorite;
window.getFavorites = getFavorites;
window.isFavorite = isFavorite;
window.removeFavorite = removeFavorite;