feat: Implement LTI deep linking, live sessions, predictive analytics, and portfolios with associated UI and database migrations.

This commit is contained in:
2026-02-24 09:37:16 -03:00
parent 7f7ea3d70c
commit 04dbe05704
81 changed files with 4119 additions and 249 deletions
@@ -0,0 +1,29 @@
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();