7.6 KiB
Importación de Cursos desde MySQL
Descripción
OpenCCB ahora soporta la importación completa de cursos desde una base de datos MySQL externa. Esta funcionalidad permite:
- Importar metadatos de cursos y planes de estudio
- Importar preguntas del banco de preguntas MySQL
- Crear cursos completos con estructura básica (módulos y lecciones)
Endpoints Implementados
1. Importar Metadatos (Cursos y Planes)
POST /question-bank/import-mysql-all
Content-Type: application/json
Authorization: Bearer <TOKEN>
{
"import_metadata_only": true
}
Respuesta:
{
"success": true,
"message": "Metadatos importados exitosamente",
"metadata": {
"study_plans_imported": 5,
"courses_imported": 20,
"courses": [
{
"id_cursos": 1,
"nombre_curso": "Inglés Básico",
"nombre_plan": "Plan Regular",
"duracion": 40,
"nivel_curso": 2
}
]
}
}
2. Ver Cursos Disponibles
GET /question-bank/mysql-courses
Authorization: Bearer <TOKEN>
Respuesta:
[
{
"id_cursos": 1,
"nombre_curso": "Inglés Básico",
"nombre_plan": "Plan Regular",
"duracion": 40,
"nivel_curso": 2
},
{
"id_cursos": 2,
"nombre_curso": "Inglés Intermedio",
"nombre_plan": "Plan Intensivo",
"duracion": 80,
"nivel_curso": 6
}
]
3. Importar Curso Completo con Estructura
POST /question-bank/import-course-mysql
Content-Type: application/json
Authorization: Bearer <TOKEN>
{
"mysql_course_id": 1,
"title": "Opcional: Título personalizado",
"description": "Opcional: Descripción del curso",
"pacing_mode": "self_paced"
}
Respuesta:
{
"course_id": "uuid-del-curso",
"course_title": "Inglés Básico (Plan Regular)",
"mysql_course_id": 1,
"modules_created": 4,
"lessons_created": 20,
"message": "Curso 'Inglés Básico (Plan Regular)' importado exitosamente con 4 módulos y 20 lecciones"
}
Estructura del Curso Importado
Al importar un curso desde MySQL, se crea automáticamente una estructura básica basada en la duración del curso:
Cursos Regulares (40 horas)
- 4 módulos con 5 lecciones cada uno (20 lecciones total)
- Módulo 1: Introducción y Fundamentos
- Módulo 2: Gramática Básica
- Módulo 3: Vocabulario Esencial
- Módulo 4: Práctica Integradora
Cursos Intensivos (80 horas)
- 8 módulos con 4-6 lecciones cada uno (46 lecciones total)
- Módulo 1-2: Fundamentos Básicos y Gramática Esencial
- Módulo 3-4: Vocabulario Intermedio y Comprensión Auditiva
- Módulo 5-6: Expresión Oral y Lectura/Escritura
- Módulo 7-8: Práctica Avanzada y Proyecto Final
Tipos de Lecciones
Las lecciones se crean rotando entre diferentes tipos de contenido:
- video - Contenido de video
- document - Documentos de lectura (PDF, DOCX)
- interactive - Actividades interactivas
- quiz - Evaluaciones (cada 4ta lección es graded)
Scripts de Importación
Script Completo (Recomendado)
./scripts/import_courses_mysql.sh
Este script:
- Obtiene el token de autenticación
- Importa todos los metadatos de cursos y planes
- Muestra la lista de cursos disponibles
- Permite importar un curso específico o todos
Script Manual (Paso a Paso)
# 1. Obtener token
TOKEN=$(curl -s -X POST "http://localhost:3001/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"admin@norteamericano.cl","password":"Admin123!"}' \
| jq -r '.token')
# 2. Importar metadatos
curl -X POST "http://localhost:3001/question-bank/import-mysql-all" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"import_metadata_only": true}'
# 3. Ver cursos disponibles
curl -X GET "http://localhost:3001/question-bank/mysql-courses" \
-H "Authorization: Bearer $TOKEN" | jq .
# 4. Importar un curso específico
curl -X POST "http://localhost:3001/question-bank/import-course-mysql" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{"mysql_course_id": 1}'
Configuración Requerida
Variables de Entorno
Asegúrate de configurar las siguientes variables en tu .env:
# Conexión a MySQL externa
MYSQL_DATABASE_URL=mysql://usuario:contraseña@host:3306/base_de_datos
# Credenciales de admin para importación
EMAIL="admin@norteamericano.cl"
PASSWORD="Admin123!"
Estructura de la Base de Datos MySQL
La base de datos MySQL debe tener las siguientes tablas:
-- Planes de estudio
plandeestudios (
idPlanDeEstudios INT PRIMARY KEY,
Nombre VARCHAR(255),
Activo BOOLEAN
)
-- Cursos
curso (
idCursos INT PRIMARY KEY,
idPlanDeEstudios INT,
NombreCurso VARCHAR(255),
NivelCurso INT,
Duracion INT,
Activo BOOLEAN,
FOREIGN KEY (idPlanDeEstudios) REFERENCES plandeestudios(idPlanDeEstudios)
)
-- Banco de preguntas (opcional)
bancopreguntas (
idPregunta INT PRIMARY KEY,
idCursos INT,
idPlanDeEstudios INT,
idTipoPregunta INT,
descripcion TEXT,
activo BOOLEAN,
FOREIGN KEY (idCursos) REFERENCES curso(idCursos)
)
-- Respuestas (opcional)
bancorespuestas (
idRespuesta INT PRIMARY KEY,
idPregunta INT,
descripcion TEXT,
resultado INT,
activo BOOLEAN,
FOREIGN KEY (idPregunta) REFERENCES bancopreguntas(idPregunta)
)
Flujo de Importación Recomendado
-
Primera vez:
./scripts/import_courses_mysql.sh- Selecciona "all" para importar todos los cursos
-
Actualizaciones posteriores:
# Solo importar nuevos cursos ./scripts/import_courses_mysql.sh # Selecciona los cursos específicos que faltan -
Importar solo preguntas:
./scripts/import_mysql.sh
Solución de Problemas
Error: "MYSQL_DATABASE_URL not configured"
Solución: Agrega la variable MYSQL_DATABASE_URL en tu .env
Error: "Course with ID X not found in MySQL"
Solución: Verifica que el curso exista en la base de datos MySQL y que Activo = 1
Error: "Failed to connect to MySQL"
Solución:
- Verifica que la conexión a MySQL esté disponible
- Comprueba las credenciales en
MYSQL_DATABASE_URL - Asegúrate de que el firewall permita la conexión
Los cursos importados no tienen contenido
Solución: Esto es esperado. Los cursos se importan con una estructura básica (módulos y lecciones vacías). Debes completar el contenido de cada lección desde el Studio.
Notas Importantes
- Los cursos importados no sobrescriben existentes - Cada importación crea un nuevo curso
- El campo
imported_mysql_course_idse usa para rastrear el origen del curso - Las preguntas del banco de preguntas se importan por separado con
import_mysql.sh - La estructura generada es básica - Debes personalizar el contenido de las lecciones
Ejemplo de Uso con curl
# Login
RESPONSE=$(curl -s -X POST "http://localhost:3001/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"admin@norteamericano.cl","password":"Admin123!"}')
TOKEN=$(echo $RESPONSE | jq -r '.token')
# Importar curso ID 5
curl -X POST "http://localhost:3001/question-bank/import-course-mysql" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d '{
"mysql_course_id": 5,
"title": "Curso Personalizado",
"description": "Descripción personalizada del curso",
"pacing_mode": "instructor_led"
}' | jq .
Próximas Mejoras
- Importación de contenido específico desde MySQL (si existe)
- Mapeo de prerrequisitos entre cursos
- Importación de usuarios inscritos
- Sincronización automática de cambios en MySQL