-- 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);