CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = NOW(); RETURN NEW; END; $$ language 'plpgsql'; CREATE TYPE dropout_risk_level AS ENUM ('low', 'medium', 'high', 'critical'); CREATE TABLE IF NOT EXISTS dropout_risks ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), organization_id UUID NOT NULL REFERENCES organizations(id), course_id UUID NOT NULL REFERENCES courses(id), user_id UUID NOT NULL REFERENCES users(id), risk_level dropout_risk_level NOT NULL DEFAULT 'low', score REAL NOT NULL DEFAULT 0.0, reasons JSONB, last_calculated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), UNIQUE(course_id, user_id) ); -- Trigger for updated_at CREATE TRIGGER update_dropout_risks_updated_at BEFORE UPDATE ON dropout_risks FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();