🔍 דוח ביקורת — מסלולי תלמיד

בדיקה מעמיקה של כל נקודות המגע של התלמיד — הרשמה, כניסה, ניווט, הגשות, התקדמות ואבטחה.

3

באגים תוקנו

10

תהליכים תקינים

3

בעיות ידועות

16

סה"כ נבדק

🗺️ מפת מסלול התלמיד
→1. גולש מגיע לדף קורס ציבורי (?type=course&id=...)
→2. אם אנונימי + מנסה לגשת לתוכן → AnonGuestGate (שם + טלפון)
→3. הרשמה חדשה → courseRegistration → Student + CourseEnrollment נוצרים
→4. כניסה חוזרת → StudentLoginDialog → studentLogin (ID/email/phone/Google OAuth)
→5. student_id מוגדר ב-URL + localStorage
→6. צפייה בקורס → NextStepBanner מציג המלצה לצעד הבא (resolveNextStep)
→7. גישה למפגש (?type=session) → חומרים + מטלות + הנחיות
→8. גישה לחומר (?type=material) → PublicMaterialPage + markCompleted
→9. גישה למטלה (?type=assignment) → PublicAssignmentPage → הגשה/בוחן
→10. פורטל תלמיד (?type=student) → ציונים + נוכחות + קורסים + XP

בפונקציה `resolveNextStep`, בלוק P5 (prereq material) השתמש במשתנה `nextSession` שלא אותחל באותו scope. הקוד הקדמי הגדיר `openAssignment` שוב (כפול) ו-`nextSession` לא הוגדר כלל בנקודה הזו, מה שגרם ל-ReferenceError וקריסה שמנעה מהתלמיד לקבל המלצת צעד הבא.

✅ תיקון: הוסר הכפול של בלוק P4 ו-`nextSession` מחושב כעת לפני בלוק P5 ב-scope הנכון.
functions/resolveNextStepcomponents/public/NextStepBanner

הקומפוננטה `PublicAssignmentPage` קראה ל-`autoGradeQuiz` ישירות מהפרונטאנד עם פרמטרים שאינם תואמים ל-API שלה (שולחת `assignment_id/student_id/answers` במקום `gradeId/assignmentId/studentAnswers`). `autoGradeQuiz` מצפה ל-`gradeId` שנוצר לאחר שמירה ב-DB — הדבר גרם לשגיאה 400 בכל הגשת בוחן.

✅ תיקון: הפרונטאנד כעת שולח ל-`submitPublicAssignment` בלבד. הפונקציה הזו שומרת את הגשה ואז קוראת ל-`autoGradeQuiz` עם ה-gradeId שנוצר.
components/public/assignment/PublicAssignmentPage.jsx

`submitPublicAssignment` המיר תשובות בוחן מ-object לarray עם מפתחות `q-0`, `q-1`... אבל הפרונטאנד שלח תשובות עם מפתחות מספריים `0, 1, 2...`. התוצאה: כל התשובות הפכו ל-`null` ב-autoGradeQuiz, וכל תלמיד קיבל ציון 0.

✅ תיקון: הלוגיקה כעת תומכת בשני פורמטים: מפתחות מספריים וגם `q-N`.
functions/submitPublicAssignment