ALTER TABLE assignments ADD COLUMN IF NOT EXISTS title TEXT, ADD COLUMN IF NOT EXISTS sequence JSONB NOT NULL DEFAULT '[]'::jsonb; CREATE TABLE IF NOT EXISTS assignment_step_progress ( assignment_id BIGINT NOT NULL REFERENCES assignments(id) ON DELETE CASCADE, pupil_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, step_id TEXT NOT NULL, completed_at TIMESTAMPTZ NOT NULL DEFAULT now(), PRIMARY KEY (assignment_id, pupil_id, step_id) ); CREATE INDEX IF NOT EXISTS idx_assignment_step_progress_pupil ON assignment_step_progress (pupil_id, assignment_id); ALTER TABLE users ADD COLUMN IF NOT EXISTS reward_points INTEGER NOT NULL DEFAULT 0; CREATE TABLE IF NOT EXISTS user_avatar_rewards ( user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, reward_key TEXT NOT NULL, unlocked_at TIMESTAMPTZ NOT NULL DEFAULT now(), PRIMARY KEY (user_id, reward_key) );