feat: implementing embedding AI

This commit is contained in:
2026-03-18 17:15:39 -03:00
parent e8cdf61468
commit 64d3d5be91
32 changed files with 3568 additions and 174 deletions
@@ -0,0 +1,106 @@
-- MySQL Courses Integration
-- Store imported course and study plan data from external MySQL database
-- Used for test template creation with automatic level/course_type detection
-- Study Plans from MySQL
CREATE TABLE mysql_study_plans (
id SERIAL PRIMARY KEY,
mysql_id INTEGER NOT NULL UNIQUE, -- idPlanDeEstudios from MySQL
organization_id UUID NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL, -- Nombre from MySQL
-- Course type detection
course_type VARCHAR(20) NOT NULL DEFAULT 'regular', -- 'regular' (40h) or 'intensive' (80h)
-- Metadata
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(organization_id, mysql_id)
);
-- Courses from MySQL
CREATE TABLE IF NOT EXISTS mysql_courses (
id SERIAL PRIMARY KEY,
mysql_id INTEGER NOT NULL UNIQUE, -- idCursos from MySQL
organization_id UUID NOT NULL REFERENCES organizations(id) ON DELETE CASCADE,
study_plan_id INTEGER NOT NULL REFERENCES mysql_study_plans(id) ON DELETE CASCADE,
name VARCHAR(255) NOT NULL, -- NombreCurso from MySQL
level INTEGER, -- NivelCurso from MySQL (1-12+)
duracion INTEGER, -- Duracion from MySQL (40h or 80h)
-- Auto-calculated fields
course_type VARCHAR(20) NOT NULL DEFAULT 'regular', -- 'regular' (40h) or 'intensive' (80h)
level_calculated VARCHAR(20), -- Calculated from NivelCurso: beginner, beginner_1, etc.
-- Metadata
is_active BOOLEAN NOT NULL DEFAULT true,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(organization_id, mysql_id)
);
-- Indexes for performance
CREATE INDEX idx_mysql_courses_study_plan ON mysql_courses(study_plan_id);
CREATE INDEX idx_mysql_courses_org ON mysql_courses(organization_id);
CREATE INDEX idx_mysql_plans_org ON mysql_study_plans(organization_id);
-- Function to update updated_at timestamp
CREATE OR REPLACE FUNCTION update_mysql_integration_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- Triggers for updated_at
CREATE TRIGGER update_mysql_study_plans_updated_at
BEFORE UPDATE ON mysql_study_plans
FOR EACH ROW
EXECUTE FUNCTION update_mysql_integration_updated_at();
CREATE TRIGGER update_mysql_courses_updated_at
BEFORE UPDATE ON mysql_courses
FOR EACH ROW
EXECUTE FUNCTION update_mysql_integration_updated_at();
-- Function to determine course level from NivelCurso
CREATE OR REPLACE FUNCTION calculate_course_level(nivel INTEGER)
RETURNS TEXT AS $$
BEGIN
IF nivel IS NULL THEN
RETURN 'intermediate';
ELSIF nivel <= 2 THEN
RETURN 'beginner';
ELSIF nivel <= 4 THEN
RETURN 'beginner_1';
ELSIF nivel <= 6 THEN
RETURN 'beginner_2';
ELSIF nivel <= 8 THEN
RETURN 'intermediate';
ELSIF nivel <= 10 THEN
RETURN 'intermediate_1';
ELSIF nivel <= 12 THEN
RETURN 'intermediate_2';
ELSE
RETURN 'advanced';
END IF;
END;
$$ LANGUAGE plpgsql;
-- Function to determine course type from plan name
CREATE OR REPLACE FUNCTION calculate_course_type(plan_name TEXT)
RETURNS TEXT AS $$
BEGIN
IF LOWER(plan_name) LIKE '%intensive%' OR LOWER(plan_name) LIKE '%intensivo%' THEN
RETURN 'intensive';
ELSE
RETURN 'regular';
END IF;
END;
$$ LANGUAGE plpgsql;