- Nieuwe migratie db/007_progress.sql: progress_events-tabel (per leerling
per widget-moment: pogingen, goed, sterren)
- POST /my/progress: leerling logt een afgerond moment; teacher_id/board_id
worden server-side afgeleid uit de bestaande toewijzing, nooit van de client
- GET /progress/pupil/:id en GET /progress/class/🆔 leerkracht-weergave,
gated met nieuwe progress.view-permissie en dezelfde scoping als assignments
- Permissie progress.view toegevoegd in beide permissions.js-bestanden
19 lines
1.1 KiB
SQL
19 lines
1.1 KiB
SQL
-- Voortgang: leerlingen loggen elk afgerond "moment" in een widget (ronde
|
|
-- sommen, voltooid woord, geknapte ballon) zodat leerkrachten een tijdlijn
|
|
-- per leerling kunnen bekijken. teacher_id/board_id komen server-side uit de
|
|
-- bestaande assignments-tabel, nooit van de client, om te voorkomen dat een
|
|
-- leerling voortgang onder een andere leerkracht kan wegschrijven.
|
|
CREATE TABLE IF NOT EXISTS progress_events (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
pupil_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
teacher_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
board_id TEXT NOT NULL,
|
|
widget_id TEXT NOT NULL,
|
|
widget_type TEXT NOT NULL,
|
|
attempts INT NOT NULL DEFAULT 0,
|
|
correct INT NOT NULL DEFAULT 0,
|
|
stars INT NOT NULL DEFAULT 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_progress_events_pupil ON progress_events(pupil_id, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_progress_events_teacher ON progress_events(teacher_id, created_at DESC);
|