feat: implementing embedding AI
This commit is contained in:
@@ -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;
|
||||
Reference in New Issue
Block a user