-- Opslaansysteem: optimistische concurrency + versiegeschiedenis. -- data_rev telt elke wijziging van users.data; een client stuurt de rev mee -- die hij geladen heeft en de update slaagt alleen als die nog actueel is -- (anders 409: een ander tabblad/digibord schreef eerder). user_data_versions -- bewaart periodieke snapshots van de vorige data zodat een leerkracht een -- eerdere versie kan terugzetten. ALTER TABLE users ADD COLUMN IF NOT EXISTS data_rev BIGINT NOT NULL DEFAULT 0; ALTER TABLE users ADD COLUMN IF NOT EXISTS data_updated_at TIMESTAMPTZ; CREATE TABLE IF NOT EXISTS user_data_versions ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, data JSONB NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX IF NOT EXISTS idx_user_data_versions ON user_data_versions(user_id, created_at DESC);