Kerikim commited on
Commit
25c379d
·
1 Parent(s): 7bfba03

elkay: lesson.py and teacher link

Browse files
Files changed (2) hide show
  1. phase/Student_view/teacherlink.py +27 -7
  2. utils/api.py +21 -1
phase/Student_view/teacherlink.py CHANGED
@@ -70,6 +70,18 @@ def _student_assignments_for_class(student_id: int, class_id: int):
70
  except Exception:
71
  return []
72
 
 
 
 
 
 
 
 
 
 
 
 
 
73
  # --- UI ---
74
 
75
  def show_code():
@@ -204,16 +216,24 @@ def show_code():
204
  with c1:
205
  # pass lesson & assignment to the Lessons page
206
  if st.button("▶️ Start Lesson", key=f"start_lesson_{r.get('assignment_id')}"):
207
- st.session_state.selected_lesson = int(r.get("lesson_id")) # keep for backward compat
208
- st.session_state.selected_assignment = int(r.get("assignment_id")) # keep for backward compat
209
-
210
- # New explicit route hint. This is what fixes your navigation.
 
 
 
 
 
 
 
 
 
211
  st.session_state.lesson_route = {
212
  "source": "teacher",
213
- "lesson_id": int(r.get("lesson_id")),
214
- "assignment_id": int(r.get("assignment_id") or 0),
215
  }
216
-
217
  st.session_state.current_page = "Lessons"
218
  st.rerun()
219
  with c2:
 
70
  except Exception:
71
  return []
72
 
73
+ def _mark_assignment_started(student_id: int, assignment_id: int):
74
+ if USE_LOCAL_DB and hasattr(dbapi, "mark_assignment_started"):
75
+ return dbapi.mark_assignment_started(student_id, assignment_id)
76
+ return api.mark_assignment_started(student_id, assignment_id)
77
+
78
+ def _set_assignment_progress(student_id: int, assignment_id: int, current_pos: int = 1, progress: float = 0.05):
79
+ # optional nudge so the bar is not 0
80
+ if USE_LOCAL_DB and hasattr(dbapi, "set_assignment_progress"):
81
+ return dbapi.set_assignment_progress(student_id, assignment_id, current_pos, progress)
82
+ return api.set_assignment_progress(student_id, assignment_id, current_pos, progress)
83
+
84
+
85
  # --- UI ---
86
 
87
  def show_code():
 
216
  with c1:
217
  # pass lesson & assignment to the Lessons page
218
  if st.button("▶️ Start Lesson", key=f"start_lesson_{r.get('assignment_id')}"):
219
+ lesson_id = int(r.get("lesson_id"))
220
+ assignment_id = int(r.get("assignment_id"))
221
+
222
+ # Tell backend we started
223
+ try:
224
+ _mark_assignment_started(student_id, assignment_id)
225
+ _set_assignment_progress(student_id, assignment_id, current_pos=1, progress=0.05)
226
+ except Exception as e:
227
+ st.warning(f"Could not mark as started yet. Continuing anyway. {e}")
228
+
229
+ # Route intent
230
+ st.session_state.selected_lesson = lesson_id
231
+ st.session_state.selected_assignment = assignment_id
232
  st.session_state.lesson_route = {
233
  "source": "teacher",
234
+ "lesson_id": lesson_id,
235
+ "assignment_id": assignment_id,
236
  }
 
237
  st.session_state.current_page = "Lessons"
238
  st.rerun()
239
  with c2:
utils/api.py CHANGED
@@ -318,6 +318,14 @@ def delete_lesson(lesson_id: int, teacher_id: int):
318
  d = _req("DELETE", f"/lessons/{lesson_id}", json={"teacher_id": teacher_id}).json()
319
  return bool(d.get("ok", True)), d.get("message", "")
320
 
 
 
 
 
 
 
 
 
321
  # Quizzes
322
  def list_quizzes_by_teacher(teacher_id: int):
323
  return _json_or_raise(_req("GET", f"/teachers/{teacher_id}/quizzes"))
@@ -657,4 +665,16 @@ def tutor_explain(lesson_id: int, level_slug: str, wrong: list[dict]):
657
  "wrong": wrong
658
  }, timeout=60)
659
  r.raise_for_status()
660
- return r.json()["feedback"]
 
 
 
 
 
 
 
 
 
 
 
 
 
318
  d = _req("DELETE", f"/lessons/{lesson_id}", json={"teacher_id": teacher_id}).json()
319
  return bool(d.get("ok", True)), d.get("message", "")
320
 
321
+ def mark_assignment_started(student_id: int, assignment_id: int):
322
+ return _req("POST", f"/assignments/{assignment_id}/start").json()
323
+
324
+ def set_assignment_progress(student_id: int, assignment_id: int, current_pos: int, progress: float):
325
+ return _req("PATCH", f"/assignments/{assignment_id}/progress",
326
+ json={"current_pos": current_pos, "progress": progress}).json()
327
+
328
+
329
  # Quizzes
330
  def list_quizzes_by_teacher(teacher_id: int):
331
  return _json_or_raise(_req("GET", f"/teachers/{teacher_id}/quizzes"))
 
665
  "wrong": wrong
666
  }, timeout=60)
667
  r.raise_for_status()
668
+ return r.json()["feedback"]
669
+
670
+ @app.post("/assignments/{assignment_id}/start")
671
+ def start_assignment(assignment_id: int, student=Depends(auth_student)):
672
+ db.mark_assignment_started(student.id, assignment_id)
673
+ return {"ok": True}
674
+
675
+ @app.patch("/assignments/{assignment_id}/progress")
676
+ def update_progress(assignment_id: int, payload: dict, student=Depends(auth_student)):
677
+ db.set_assignment_progress(student.id, assignment_id,
678
+ payload.get("current_pos", 0),
679
+ payload.get("progress", 0.0))
680
+ return {"ok": True}