Files
openccb/docs/QUESTION_BANK_UI.md

266 lines
6.5 KiB
Markdown

# Question Bank UI - Documentación
## Vista General
El Banco de Preguntas es una interfaz completa en Studio para gestionar preguntas reutilizables con soporte para audio generado por IA.
## Acceso
```
http://localhost:3000/question-bank
```
## Componentes
### 1. Página Principal (`/question-bank/page.tsx`)
**Características:**
- Lista todas las preguntas del banco
- Filtros por tipo, dificultad, origen, audio
- Búsqueda por texto
- Estadísticas rápidas (total, importadas, con audio, IA)
- Accesos rápidos para crear e importar
**Estadísticas mostradas:**
```
┌──────────────┬──────────────┬──────────────┬──────────────┐
│ Total │ MySQL │ Con Audio │ IA │
│ 150 │ 45 │ 32 │ 18 │
└──────────────┴──────────────┴──────────────┴──────────────┘
```
### 2. QuestionBankCard (`QuestionBankCard.tsx`)
Tarjeta individual de pregunta que muestra:
- Tipo de pregunta (badge)
- Dificultad (color-coded)
- Texto de la pregunta (truncado)
- Opciones preview (primeras 3)
- Estado del audio
- Origen (MySQL, IA, Manual)
- Uso (veces utilizada)
- Acciones: Editar, Eliminar, Audio
**Badges de tipo:**
- 🟦 Opción Múltiple
- 🟩 Verdadero/Falso
- 🟨 Respuesta Corta
- 🟪 Ensayo
- 🟧 Emparejamiento
- 🔵 Ordenar
- 🟫 Completar
- 🟣 Respuesta Audio
- 🔴 Hotspot
- ⬛ Código
**Badges de dificultad:**
- 🟢 Fácil (easy)
- 🟡 Media (medium)
- 🔴 Difícil (hard)
**Badges de origen:**
- 🌐 MySQL - Importado desde sistema legacy
- ✨ IA - Generado por Inteligencia Artificial
- Manual - Creado manualmente
### 3. QuestionBankEditor (`QuestionBankEditor.tsx`)
Modal para crear/editar preguntas con:
**Campos:**
- Tipo de pregunta (10 tipos soportados)
- Dificultad (easy/medium/hard)
- Texto de la pregunta (required)
- Opciones (para multiple-choice/true-false)
- Respuesta correcta (selector radial)
- Explicación/feedback
- Puntos
- Etiquetas (tags)
- Checkbox "Generar audio automáticamente"
**Características especiales:**
- Botón "Generar con IA" para opciones y explicación
- Agregar/remover opciones dinámicamente
- Tags con auto-complete
- Validación en tiempo real
### 4. MySQLImportModal (`MySQLImportModal.tsx`)
Modal para importar preguntas desde MySQL:
**Flujo:**
1. Selecciona curso de MySQL (carga dinámica)
2. Click en "Importar Preguntas"
3. Importa todas las preguntas activas del curso
4. Muestra cantidad importada
5. Redirige a la lista actualizada
**Información mostrada:**
- Lista de cursos disponibles (NombreCurso + NombrePlan)
- Explicación de qué se importará
- Progreso de importación
- Resultado (éxito/error)
## Flujos de Usuario
### Crear Pregunta Manualmente
```
1. Click "Nueva Pregunta"
2. Seleccionar tipo de pregunta
3. Completar texto de pregunta
4. Agregar opciones (si aplica)
5. Marcar respuesta correcta
6. Agregar explicación (opcional)
7. Configurar puntos y dificultad
8. Agregar etiquetas
9. ☑️ Marcar "Generar audio automáticamente"
10. Click "Guardar Pregunta"
```
### Importar desde MySQL
```
1. Click "Importar desde MySQL"
2. Seleccionar curso del dropdown
3. Click "Importar Preguntas"
4. Esperar confirmación (ej: "Se importaron 45 preguntas")
5. Las preguntas aparecen en la lista con badge 🌐 MySQL
```
### Generar Audio para Pregunta
```
1. Click ícono 🔊 en pregunta (si no tiene audio)
2. (Opcional) Personalizar texto para audio
3. Seleccionar voz
4. Ajustar velocidad
5. Click "Generar Audio"
6. Esperar generación (5-30 segundos)
7. Click "Reproducir" para preview
8. Click "Cerrar" cuando esté listo
```
### Filtrar Preguntas
```
1. Click "Filtros"
2. Seleccionar tipo de pregunta
3. Seleccionar dificultad
4. Seleccionar origen
5. Filtrar por audio (con/sin)
6. Results se actualizan automáticamente
```
### Buscar Preguntas
```
1. Escribir en barra de búsqueda
2. Presionar Enter
3. Results filtran por texto en question_text
```
## Integración con Test Templates
Las preguntas del banco se pueden usar en:
- Plantillas de pruebas (Test Templates)
- Lecciones tipo quiz directamente
- Ejercicios de práctica
**Próximamente:**
- Selector de preguntas desde banco al crear plantilla
- Bulk selection para agregar múltiples preguntas
- Vista previa de pregunta con audio
## API Endpoints Utilizados
```typescript
// Listar preguntas
GET /question-bank?question_type=multiple-choice&difficulty=medium&has_audio=true
// Crear pregunta
POST /question-bank
{
"question_text": "What is...?",
"question_type": "multiple-choice",
"options": ["A", "B", "C", "D"],
"correct_answer": 0,
"explanation": "Because...",
"points": 1,
"difficulty": "medium",
"tags": ["grammar", "past-tense"],
"generate_audio": true
}
// Actualizar pregunta
PUT /question-bank/{id}
// Eliminar pregunta
DELETE /question-bank/{id}
// Importar desde MySQL
POST /question-bank/import-mysql
{
"mysql_course_id": 30,
"import_all": true
}
// Generar audio
POST /question-bank/{id}/generate-audio
{
"text": "What color is the sky?",
"voice": "v2/en_speaker_1",
"speed": 1.0
}
// Listar cursos MySQL
GET /question-bank/mysql-courses
```
## Estilos y UX
**Tema:**
- Soporte completo dark mode
- Colores consistentes con el resto de Studio
- Animaciones suaves (hover, transitions)
**Responsive:**
- Grid adaptable (1/2/3 columnas)
- Modal con scroll interno
- Touch-friendly en móviles
**Accesibilidad:**
- Labels en todos los inputs
- Focus visible
- ARIA attributes
- Keyboard navigation
## Próximas Mejoras
- [ ] Bulk audio generation (múltiples preguntas)
- [ ] Exportar preguntas a CSV/JSON
- [ ] Importar desde CSV
- [ ] Vista previa de pregunta completa en card
- [ ] Historial de ediciones
- [ ] Comentarios/notas en preguntas
- [ ] Compartir preguntas entre organizaciones
- [ ] Analytics de uso por pregunta
- [ ] AI-powered tagging automático
- [ ] Detección de preguntas duplicadas
## Troubleshooting
**Error: "No se pudo cargar los cursos de MySQL"**
- Verificar que `MYSQL_DATABASE_URL` esté configurado en `.env`
- Verificar conectividad al servidor MySQL
**Audio no se reproduce**
- Verificar formato de audio (WAV soportado)
- Verificar permisos del navegador
- Probar en otro navegador
## Referencias
- [Question Bank Backend](../../services/cms-service/src/handlers_question_bank.rs)
- [Test Templates UI](./TestTemplates/)