-- Bidirectionele live klasinteractie. Sessies onthouden het laatste echte -- voortgangsmoment en een eventuele pauze. Leerkrachtacties worden duurzaam -- opgeslagen, zodat een korte netwerkonderbreking geen hint of aanmoediging -- laat verdwijnen. ALTER TABLE live_learning_sessions ADD COLUMN IF NOT EXISTS last_progress_at TIMESTAMPTZ, ADD COLUMN IF NOT EXISTS paused_at TIMESTAMPTZ; CREATE TABLE IF NOT EXISTS teacher_pupil_actions ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, class_id BIGINT NOT NULL REFERENCES classes(id) ON DELETE CASCADE, pupil_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, teacher_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, kind TEXT NOT NULL CHECK (kind IN ('hint', 'encourage', 'pause', 'resume', 'easier')), message TEXT, payload JSONB NOT NULL DEFAULT '{}'::jsonb, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), acknowledged_at TIMESTAMPTZ, CHECK (message IS NULL OR char_length(message) <= 160) ); CREATE INDEX IF NOT EXISTS idx_teacher_pupil_actions_pending ON teacher_pupil_actions (pupil_id, acknowledged_at, created_at DESC); CREATE INDEX IF NOT EXISTS idx_teacher_pupil_actions_class ON teacher_pupil_actions (class_id, created_at DESC);