Phase 3: individual defense assignments with invite codes
- progress V5 defense_sessions: per student+lab individual task (md), status machine waiting -> started -> ready, one-time 6-digit codes - 30-min timer with server-side lazy expiry (syncTimeouts: started->ready by timeout), countdown JS on student page - admin: assign task dialog (+prefill existing via data-md), CSV import (studentNo;task, \n for newlines) resolved via identity students, issue/reset code buttons, defense status column - student: code entry form (code hidden until start), assignment md, 'Готов к сдаче', waiting-for-teacher note - gateway: /api/v1/defenses,/api/v1/defenses/** routes - web api client + admin/student controllers wired
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
-- Defense sessions: individual task + invite code + 30-minute timer.
|
||||
|
||||
CREATE TABLE defense_sessions (
|
||||
id uuid PRIMARY KEY DEFAULT uuidv7(),
|
||||
student_id uuid NOT NULL,
|
||||
lab_id uuid NOT NULL,
|
||||
assignment_md text NOT NULL DEFAULT '',
|
||||
status varchar(16) NOT NULL DEFAULT 'waiting', -- waiting | started | ready
|
||||
code varchar(6),
|
||||
started_at timestamptz,
|
||||
ready_at timestamptz,
|
||||
ready_reason varchar(16), -- button | timeout
|
||||
CONSTRAINT defense_session_unique UNIQUE (student_id, lab_id)
|
||||
);
|
||||
|
||||
CREATE INDEX defense_sessions_lab_idx ON defense_sessions (lab_id);
|
||||
Reference in New Issue
Block a user