Spaces:
Running
Running
Upload 9 files
Browse files- src/services/classroom.js +22 -0
src/services/classroom.js
CHANGED
|
@@ -480,3 +480,25 @@ export async function getUser(userId) {
|
|
| 480 |
const snap = await getDoc(userRef);
|
| 481 |
return snap.exists() ? snap.data() : null;
|
| 482 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 480 |
const snap = await getDoc(userRef);
|
| 481 |
return snap.exists() ? snap.data() : null;
|
| 482 |
}
|
| 483 |
+
|
| 484 |
+
/**
|
| 485 |
+
* Subscribes to a single user's progress for real-time updates
|
| 486 |
+
* @param {string} userId
|
| 487 |
+
* @param {Function} callback (progressMap) => void
|
| 488 |
+
* @returns {Function} unsubscribe
|
| 489 |
+
*/
|
| 490 |
+
export function subscribeToUserProgress(userId, callback) {
|
| 491 |
+
const q = query(
|
| 492 |
+
collection(db, PROGRESS_COLLECTION),
|
| 493 |
+
where("userId", "==", userId)
|
| 494 |
+
);
|
| 495 |
+
|
| 496 |
+
return onSnapshot(q, (snapshot) => {
|
| 497 |
+
const progressMap = {};
|
| 498 |
+
snapshot.forEach(doc => {
|
| 499 |
+
const data = doc.data();
|
| 500 |
+
progressMap[data.challengeId] = data;
|
| 501 |
+
});
|
| 502 |
+
callback(progressMap);
|
| 503 |
+
});
|
| 504 |
+
}
|