Ir al contenido principal

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:

  • URL del video (si el contenido es Video)

  • Texto o enlace procesado del artículo (si el contenido es Article)

  • Cantidad de intentos realizados en un quiz por un estudiante (si corresponde)

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:

  • Topic

  • Video

  • Article

  • Student

  • Quiz Activity


🚀 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}
  • Se extrae contenido sin HTML (strip_tags)

  • Si dentro del texto hay un link, se devuelve solo ese link

  • Se agrega:

"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