Examen del Curso (1, 2) - EXAMEN ATC - Agregar contacto - [preguntas]
🧾 Descripción
Obtiene todas las preguntas de un examen (Quiz) registrado en el ERP, junto con sus opciones, respuestas correctas y metadatos.
El servicio se encarga de:
-
Consultar el examen (Quiz) en la base ERP.
-
Traer todas las preguntas asociadas.
-
Traer todas las opciones de cada pregunta.
-
Reorganizar los resultados del SQL (que vienen aplanados) en una estructura jerárquica:
-
Pregunta
-
Opciones
-
-
-
Convertir el contenido HTML de la pregunta a texto plano.
-
Detectar si la pregunta incluye una imagen embebida.
-
Preparar la respuesta final en un formato limpio y listo para usar en la app.
🚀 Endpoint
POST /preguntas
📥 Request Body
Parámetros
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| examen | string | ✔️ | ID del cuestionario (Quiz.name) |
🔐 Seguridad
Este servicio requiere acceso a la API interna del ERP a través de:
-
dbErp()→ Consulta SQL interna
No usa token del usuario final. La autenticación es interna del servidor.
🧠 Flujo del Servicio (Explicación Real)
1. Construye consulta SQL
El servicio arma un query que une:
-
tabQuiz -
tabQuiz Question -
tabQuestion -
tabOptions
De esta manera obtiene:
-
Datos de la pregunta
-
Datos de cada opción
-
Datos del examen
2. Envía la consulta
Se ejecuta: POST method/send-query-database
3. Reorganiza la data
El ERP devuelve una fila por cada opción.
El servicio agrupa todo por: question.name
Generando esta estructura:
4. Convierte HTML → texto
Las preguntas vienen como HTML.
El servicio:
-
Analiza el HTML con
html_to_obj() -
Extrae texto plano (
strip_tags) -
Busca imágenes incrustadas y genera la URL completa.
5. Construye la respuesta final
Para cada pregunta:
-
name -
question(texto plano) -
imagen(si existe) -
options(lista de alternativas)
📤 Response 200 – Ejemplo
❗ Posibles Errores
1. Examen no encontrado
2. Error en consulta SQL
3. Examen sin preguntas
📚 Schemas Usados
🔸 Quiz
| Campo | Tipo |
|---|---|
| name | string |
🔸 Question
| Campo | Tipo |
|---|---|
| name | string |
| question | HTML |
| question_type | string |
🔸 Options
| Campo | Tipo |
|---|---|
| name | string |
| option | string |
| is_correct | int (0 o 1) |
| parent | question.name |