Spaces:
Running
Running
Upload 10 files
Browse files- src/services/classroom.js +8 -0
- src/views/InstructorView.js +13 -5
src/services/classroom.js
CHANGED
|
@@ -342,6 +342,7 @@ export async function getPeerPrompts(roomCode, challengeId) {
|
|
| 342 |
* @param {string} challengeId
|
| 343 |
*/
|
| 344 |
export async function resetProgress(userId, roomCode, challengeId) {
|
|
|
|
| 345 |
const progressRef = collection(db, PROGRESS_COLLECTION);
|
| 346 |
const q = query(
|
| 347 |
progressRef,
|
|
@@ -350,12 +351,19 @@ export async function resetProgress(userId, roomCode, challengeId) {
|
|
| 350 |
);
|
| 351 |
const snapshot = await getDocs(q);
|
| 352 |
|
|
|
|
|
|
|
| 353 |
if (!snapshot.empty) {
|
| 354 |
// Reset status to 'started' so they can submit again
|
| 355 |
await updateDoc(snapshot.docs[0].ref, {
|
| 356 |
status: 'started',
|
| 357 |
timestamp: serverTimestamp()
|
| 358 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 359 |
}
|
| 360 |
}
|
| 361 |
|
|
|
|
| 342 |
* @param {string} challengeId
|
| 343 |
*/
|
| 344 |
export async function resetProgress(userId, roomCode, challengeId) {
|
| 345 |
+
console.log(`[resetProgress] Attempting reset for User: ${userId}, Challenge: ${challengeId}, Room: ${roomCode}`);
|
| 346 |
const progressRef = collection(db, PROGRESS_COLLECTION);
|
| 347 |
const q = query(
|
| 348 |
progressRef,
|
|
|
|
| 351 |
);
|
| 352 |
const snapshot = await getDocs(q);
|
| 353 |
|
| 354 |
+
console.log(`[resetProgress] Found ${snapshot.size} documents.`);
|
| 355 |
+
|
| 356 |
if (!snapshot.empty) {
|
| 357 |
// Reset status to 'started' so they can submit again
|
| 358 |
await updateDoc(snapshot.docs[0].ref, {
|
| 359 |
status: 'started',
|
| 360 |
timestamp: serverTimestamp()
|
| 361 |
});
|
| 362 |
+
console.log(`[resetProgress] Document updated successfully.`);
|
| 363 |
+
return true;
|
| 364 |
+
} else {
|
| 365 |
+
console.warn(`[resetProgress] No progress document found to reset!`);
|
| 366 |
+
return false;
|
| 367 |
}
|
| 368 |
}
|
| 369 |
|
src/views/InstructorView.js
CHANGED
|
@@ -605,16 +605,24 @@ export function setupInstructorEvents() {
|
|
| 605 |
const challengeId = modal.dataset.challengeId;
|
| 606 |
const roomCode = localStorage.getItem('vibecoding_room_code');
|
| 607 |
|
| 608 |
-
console.log('Reject attempt:', { userId, challengeId, roomCode });
|
| 609 |
|
| 610 |
-
if (!userId || !challengeId)
|
|
|
|
|
|
|
|
|
|
| 611 |
|
| 612 |
if (confirm('確定要退回此學員的進度嗎?學員將需要重新作答。')) {
|
| 613 |
try {
|
| 614 |
const { resetProgress } = await import("../services/classroom.js");
|
| 615 |
-
await resetProgress(userId, roomCode, challengeId);
|
| 616 |
-
|
| 617 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 618 |
} catch (e) {
|
| 619 |
console.error("Reject failed:", e);
|
| 620 |
alert('退回失敗: ' + e.message);
|
|
|
|
| 605 |
const challengeId = modal.dataset.challengeId;
|
| 606 |
const roomCode = localStorage.getItem('vibecoding_room_code');
|
| 607 |
|
| 608 |
+
console.log('Reject attempt - Click details:', { dataset: modal.dataset, userId, challengeId, roomCode });
|
| 609 |
|
| 610 |
+
if (!userId || !challengeId) {
|
| 611 |
+
console.error('Missing userId or challengeId');
|
| 612 |
+
return;
|
| 613 |
+
}
|
| 614 |
|
| 615 |
if (confirm('確定要退回此學員的進度嗎?學員將需要重新作答。')) {
|
| 616 |
try {
|
| 617 |
const { resetProgress } = await import("../services/classroom.js");
|
| 618 |
+
const success = await resetProgress(userId, roomCode, challengeId);
|
| 619 |
+
|
| 620 |
+
if (success) {
|
| 621 |
+
alert('已成功退回,學員將需要重新作答。');
|
| 622 |
+
window.closeBroadcastModal();
|
| 623 |
+
} else {
|
| 624 |
+
alert('找不到該學員的進度紀錄,無法退回 (Document Not Found)。');
|
| 625 |
+
}
|
| 626 |
} catch (e) {
|
| 627 |
console.error("Reject failed:", e);
|
| 628 |
alert('退回失敗: ' + e.message);
|