Tesis
Mejoras de la aplicación web estadística HTArgStats
Resumen
Resumen Este trabajo continúa y mejora una aplicación web estadística, desarrollada como trabajo de graduación previo, que complementa al videojuego de gestión futbolística en línea Hattrick recolectando y presentando estadísticas de la comunidad argentina de jugadores en distintos rankings. El sistema heredado, en uso real, presentaba problemas de mantenibilidad, errores reportados por sus usuarios y una integración con el servicio externo de datos que la evolución de ese servicio había vuelto frágil. El objetivo fue evolucionarlo hacia un sistema más mantenible, estable y completo: se reescribió por completo su componente de servidor sobre una arquitectura modular, se migró su capa de datos a un esquema gestionado de forma declarativa, se corrigieron los errores detectados, se incorporaron nuevas funcionalidades, y se reorganizó su infraestructura, dejando el producto desplegado y en funcionamiento.
Descripción
Índice general Resumen III 1. Introducción y objetivos 1 1.1. Contexto: el videojuego Hattrick . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2. La problemática: limitaciones de las estadísticas nativas . . . . . . . . . . . . . 2 1.3. Acceso a los datos: la API CHPP . . . . . . . . . . . . . . . . . . . . . . . . 2 1.4. El sistema base: HTArgStats (2020) . . . . . . . . . . . . . . . . . . . . . . . 2 1.5. Motivación: por qué retomar el sistema . . . . . . . . . . . . . . . . . . . . . 3 1.6. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.7. Alcance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.8. Gestión y planificación del proyecto . . . . . . . . . . . . . . . . . . . . . . . 4 2. Situación inicial: análisis del sistema heredado 7 2.1. Metodología del análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2. Relevamiento del sistema existente . . . . . . . . . . . . . . . . . . . . . . . . 7 2.3. Problemas detectados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3.1. Deuda técnica de arquitectura . . . . . . . . . . . . . . . . . . . . . . 8 2.3.2. Errores funcionales en producción . . . . . . . . . . . . . . . . . . . . 8 2.3.3. Problemas de infraestructura y operación . . . . . . . . . . . . . . . . 9 2.4. Cambios en la API de Hattrick . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.5. Conclusión del análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3. Especificación de requisitos 11 3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.1. Funcionalidades heredadas . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.2. Correcciones de errores . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2.3. Nuevas funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.4. Funcionalidades de administración . . . . . . . . . . . . . . . . . . . . 12 3.3. Requisitos no funcionales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.4. Requisitos de despliegue y operación . . . . . . . . . . . . . . . . . . . . . . . 13 3.5. Restricciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4. Arquitectura y tecnologías 15 4.1. Elección del lenguaje y el framework . . . . . . . . . . . . . . . . . . . . . . . 15 4.2. Principios de diseño: SOLID . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.3. Tecnologías de persistencia: PostgreSQL y Prisma . . . . . . . . . . . . . . . 16 4.4. Frontend y contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.5. Arquitectura del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.6. Comparación con la implementación anterior . . . . . . . . . . . . . . . . . . 17 4.6.1. Distribución del código . . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.6.2. Lenguaje y framework . . . . . . . . . . . . . . . . . . . . . . . . . . 18 VIII 4.6.3. Acceso a datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.6.4. Reglas de negocio: de código a datos . . . . . . . . . . . . . . . . . . 18 4.6.5. Asincronía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4.6.6. Autenticación y dependencias . . . . . . . . . . . . . . . . . . . . . . 18 5. Modelo de datos 21 5.1. Tablas conservadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.2. Rediseño de tablas existentes . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 5.3. Tablas nuevas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.4. Observación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.5. Diagramas entidad–relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 6. Implementación 25 6.1. Organización del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 6.2. Módulos del backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 6.3. Acceso a datos con Prisma . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.4. Comunicación frontend/backend . . . . . . . . . . . . . . . . . . . . . . . . . 27 6.5. Motor de rankings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.5.1. Ranking de trofeos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 6.5.2. Esquema de puntajes de trofeos . . . . . . . . . . . . . . . . . . . . . 29 6.5.3. Ranking de logros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 6.5.4. Ranking por provincias . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.5.5. Ordenamiento y posición oficial . . . . . . . . . . . . . . . . . . . . . 30 6.6. Ingesta y actualizaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.6.1. Flujo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 6.6.2. Descubrimiento dinámico de ligas . . . . . . . . . . . . . . . . . . . . 31 6.6.3. Detección de equipos que dejan la liga . . . . . . . . . . . . . . . . . . 31 6.6.4. Manejo de la asincronía . . . . . . . . . . . . . . . . . . . . . . . . . . 31 6.6.5. Tipos de actualización . . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.6.6. Programación persistente . . . . . . . . . . . . . . . . . . . . . . . . . 32 6.6.7. Control de concurrencia y cooldown . . . . . . . . . . . . . . . . . . . 32 6.7. OAuth y CHPP configurable . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.7.1. Credenciales configurables . . . . . . . . . . . . . . . . . . . . . . . . 33 6.7.2. Flujo de autorización . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 6.7.3. Firma de las peticiones de datos . . . . . . . . . . . . . . . . . . . . . 34 6.7.4. Comparación con la implementación anterior . . . . . . . . . . . . . . 35 6.8. Panel de administración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.8.1. Autenticación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.8.2. Secciones del panel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 6.8.3. Comparación con la implementación anterior . . . . . . . . . . . . . . 36 6.9. Frontend y mejoras de experiencia de usuario . . . . . . . . . . . . . . . . . . 36 6.10. Multilenguaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 6.11. Seguridad en la codificación . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7. Infraestructura y despliegue 43 7.1. Estrategia de contenedores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.2. Configuración por entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.3. Reverse proxy y HTTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 7.4. Persistencia y respaldos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 7.5. Estado del despliegue y trabajo pendiente . . . . . . . . . . . . . . . . . . . . 45 IX 8. Testing 47 8.1. Pruebas unitarias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 8.2. Validación funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 8.3. Realimentación de la comunidad . . . . . . . . . . . . . . . . . . . . . . . . . 48 9. Conclusiones y trabajo futuro 49 9.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 9.2. Conclusiones académicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 9.3. Trabajo futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 9.3.1. Operación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 9.3.2. Internacionalización del alcance . . . . . . . . . . . . . . . . . . . . . 50 9.3.3. Autofinanciamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 9.3.4. Mejoras funcionales sobre equipos y rankings . . . . . . . . . . . . . . 50 9.3.5. Nuevos rankings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 A. Especificación C: modelado de casos de uso 53 A.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 A.2. Actores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 A.2.1. Visitante / usuario público . . . . . . . . . . . . . . . . . . . . . . . . 54 A.2.2. Administrador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 A.2.3. Sistema HTArgStats . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 A.2.4. API externa Hattrick CHPP . . . . . . . . . . . . . . . . . . . . . . . 55 A.3. Diagrama de contexto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 A.4. Listado de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 A.5. Diagramas de casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 A.6. Descripción de los casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . 57 A.6.1. Consulta pública . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 A.6.2. Actualización e ingesta . . . . . . . . . . . . . . . . . . . . . . . . . . 68 A.6.3. Administración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Bibliografía 79

