Este proyecto es una aplicación web completa que consta de dos partes principales: un formulario de inscripción online para OpositaTCAE y una plataforma de exámenes.
- Formulario Completo: Permite a los usuarios rellenar un formulario de inscripción con sus datos personales, académicos y de pago.
- Firma Digital: Incluye un campo para que los usuarios puedan firmar digitalmente el formulario.
- Generación de PDF Optimizada: El backend (Go) genera eficientemente documentos PDF con toda la información y la firma, optimizado para bajo consumo de memoria.
- Confirmación por Email: El usuario y el administrador reciben una copia del PDF de inscripción por correo electrónico.
- Integración con Moodle: Crea y sincroniza automáticamente cuentas de usuario en Moodle.
- Rate Limiting: Protegido contra abusos mediante límites de petición por IP (Redis).
- Gestión de Exámenes: Panel de administración completo para crear/editar exámenes, revisar intentos y gestionar resultados.
- Importación de Resultados Streaming: Importación eficiente de ficheros Excel masivos con resultados oficiales, utilizando procesamiento por streams (sin carga completa en RAM).
- Sincronización Moodle: Servicio dedicado para mantener los usuarios sincronizados con el curso de Moodle correspondiente.
- Resultados y Percentiles: Cálculo en tiempo real de puntuaciones y percentiles.
- Caché de Alto Rendimiento: Uso de Redis para cachear preguntas y resultados públicos, reduciendo la carga en base de datos.
- Concurrencia Avanzada (Go 1.26): Actualización del backend a Go 1.26. Implementación de worker pools con canales y goroutines para optimizar drásticamente el envío de emails, sincronización con Moodle e importación masiva de Excel.
- Protección y Caché Redis: Nueva capa de seguridad usando Redis para cachear intentos fallidos de login de administradores, protegiendo la base de datos de ataques y sobrecargas.
- Sistema de Penalizaciones de Exámenes: Soporte completo (API y Panel Admin) para configurar penalizaciones dinámicas (ej. 0.25, 0.33, 0.5 puntos por respuesta incorrecta) y visualización de notas sobre bases secundarias.
- Buscador Avanzado de Resultados: Nueva funcionalidad de filtrado multicriterio (DNI, Nombre, Apellidos, Tipo de Inscripción) para gestionar cómodamente los Resultados Oficiales publicados.
- Sincronización Inteligente de Usuarios Moodle: Mejora sustancial en la lógica de emparejamiento y sincronización asíncrona de usuarios entre los sistemas, contemplando nombres parciales, apellidos y DNI para evitar duplicados.
- Carga Diferida (Lazy Loading): Optimización masiva en
/admin/results. Las respuestas de los estudiantes ahora se cargan solo bajo demanda al editar, reduciendo el tamaño de la respuesta inicial y mejorando la velocidad. - Exportación Excel: Solucionados problemas en el reporte de fallos y respuestas correctas para un análisis más preciso.
- Configuración: Manejo dinámico del remitente SMTP en los mensajes de error.
- Identidad Visual: Actualización de estilos, destacando los méritos con el color
brand-pink. - Usabilidad: Implementación global de
cursor-pointeren todos los elementos interactivos para una navegación más intuitiva. - Feedback: Nuevas pantallas de "estado vacío" que comunican claramente cuando no hay resultados o intentos registrados.
inscripcion-moodle/
│
├── backend/ # Nuevo backend en Go
│ ├── cmd/ # Puntos de entrada (api)
│ ├── internal/ # Código privado de la aplicación
│ │ ├── config/ # Configuración
│ │ ├── controllers/ # Handlers HTTP (Admin, Public, Register)
│ │ ├── models/ # Modelos GORM
│ │ ├── services/ # Lógica de negocio (Excel, PDF, Moodle, Auth)
│ │ └── cache/ # Capa de caché Redis
│ ├── go.mod # Definición de módulo y dependencias
│ └── ...
│
├── frontend-exam/ # Aplicación de exámenes (Astro + React)
│ ├── src/
│ ├── package.json
│ └── astro.config.mjs
│
├── frontend-inscripcion/ # Formulario de inscripción (Vanilla JS)
│ ├── index.html
│ ├── main.js
│ └── style.css
│
├── .gitignore
├── LICENSE
└── README.md
- Backend:
- Go 1.26+
- Redis (para caché y rate limiting)
- Servidor SMTP (para envío de correos)
- Frontend (Exams):
- Node.js y npm
- Base de Datos:
- MySQL / MariaDB
- Moodle (MySQL) para la integración
-
Clona el repositorio:
git clone https://github.com/tuusuario/inscripcion-moodle.git cd inscripcion-moodle -
Configura el Backend (Go):
- Navega a la carpeta
backend:cd backend - Crea un archivo
.envbasado en la configuración requerida (verconfigpackage). - Instala dependencias:
go mod download
- Navega a la carpeta
-
Configura el Frontend de Exámenes:
- Navega a la carpeta
frontend-exam:cd ../frontend-exam - Instala las dependencias:
npm install
- Navega a la carpeta
-
Backend:
- Desde la carpeta
backend:go run ./cmd/api
- La API estará disponible en el puerto configurado (ej.
8080).
- Desde la carpeta
-
Frontend de Exámenes:
- Desde la carpeta
frontend-exam:npm run dev
- Disponible en
http://localhost:4321.
- Desde la carpeta
-
Frontend de Inscripción:
- Sirve el archivo
frontend-inscripcion/index.htmlcon cualquier servidor web estático.
- Sirve el archivo
Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.