Cursos Temas Contenido (1, 2, 3, 4, 5, 6, 7) - [temas_contenido]

🧾 Descripción

Obtiene todo el contenido asociado a un Tema de Capacitación, enriqueciendo la información con:

El servicio puede opcionalmente recibir el DNI del estudiante, para verificar su progreso (intentos de quiz).

Este servicio integra información desde varios recursos del ERP:


🚀 Endpoint

GET /temas-contenido

📌 Parámetros vía request:

Parámetro Tipo Obligatorio Descripción
tema string ✔️ Nombre del Topic a consultar
dni string DNI del estudiante para obtener intentos de quiz

🔐 Seguridad

Requiere autenticación interna vía:


$this->general->ServiceErp(...)

No necesita token del cliente, se usa credencial del backend.


🧠 Flujo del Servicio (Resumen real)

1️⃣ Si viene DNI → Obtener datos del estudiante

Consulta:

GET Student ?limit=None &fields=["name","puesto"] &filters=[["enabled","=",1],["dni","like","%{dni}%"]]

Guarda name del estudiante si existe.


2️⃣ Obtener el tema solicitado


GET Topic/{tema}

Debe existir; si no, devuelve: { "valor": false, "msn": "No se encontró el tema del curso" }


3️⃣ Recorrer cada elemento de “topic_content”

Para cada ítem:

📽 Si es Video:


GET Video/{content_id}

Agrega: "url": "<url del video>"


📄 Si es Article:


GET Article/{content_id}
"url": "<texto procesado o link>"


❓ Si es Quiz y hay estudiante:

GET Quiz Activity ?filters=[["quiz","=",content_id],["student","=", estudiante]]

Agrega: "quiz_attempts": <numero_de_intentos>

Si no hay estudiante o no es quiz: "quiz_attempts": 0


4️⃣ Retornar todos los contenidos enriquecidos


📥 Request Body (ejemplo)

{ "tema": "TOPIC-001", "dni": "12345678" }


📤 Response 200 – Ejemplo

{ "valor": true, "data": [ { "content_type": "Video", "content": "VID-01", "url": "https://erp/video1.mp4", "quiz_attempts": 0 }, { "content_type": "Article", "content": "ART-01", "url": "https://articulo.com/content", "quiz_attempts": 0 }, { "content_type": "Quiz", "content": "QUIZ-01", "quiz_attempts": 2 } ] }


❗ Posibles Errores

1. Tema no encontrado

{ "valor": false, "msn": "No se encontró el tema del curso" }

2. Estudiante no existe (cuando se envía DNI)

No genera error, simplemente no agrega intentos de quiz.

3. Contenido sin URL o datos incompletos

El servicio ignora valores faltantes y continúa procesando.

4. Error del servidor

{ "valor": false, "msn": "Error del servidor", "data": "<detalle>" }


📚 Recursos / Esquemas usados

Topic

{ "topic_content": [ { "content_type": "Video | Article | Quiz", "content": "string" } ] }

Video

{ "url": "string" }

Article

{ "content": "html|string" }

Student

{ "name": "string", "dni": "string", "puesto": "string" }

Quiz Activity

{ "quiz": "string", "student": "string" }


🗃 Pseudocódigo del servicio

if DNI: estudiante = GET Student by DNI topic = GET Topic/{tema} foreach content in topic.topic_content: if content_type == Video: obtener url del video if content_type == Article: obtener contenido, limpiar html, buscar link if content_type == Quiz and estudiante existe: obtener intentos realizados return lista enriquecida de contenidos


Revisión #6
Creado 2025-11-25 17:37:36 -05 por Elian
Actualizado 2025-11-26 11:04:03 -05 por Elian