30 lines
964 B
PL/PgSQL
30 lines
964 B
PL/PgSQL
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();
|