mirror of
https://github.com/Pandipipas/scoreko-dev.git
synced 2026-06-06 03:32:06 +00:00
8.3 KiB
8.3 KiB
Refactor / Cleanup / Rework Audit
Este documento lista mejoras propuestas para scoreko-dev, priorizadas por impacto y esfuerzo.
1) Arquitectura y organización
Alta prioridad
- Definir capas explícitas (
domain,application,infra,ui) para separar reglas de negocio (scoreboard, players, commentary) de NodeCG/Pinia/Vue y reducir acoplamiento. - Extraer lógica de negocio fuera de componentes Vue (sobre todo de
ScoreboardPanel.vue) a composables/servicios dedicados. - Unificar contratos compartidos en un módulo
src/domainpara evitar que cada store redeclare defaults/normalizadores manuales. - Introducir un patrón de “casos de uso” (
swapPlayers,resetScores,savePlayer, etc.) para dejar de mezclar orquestación y estado reactivo. - Crear un sistema de módulos por feature (
features/scoreboard,features/players,features/commentary) para facilitar testeo y mantenimiento.
Media prioridad
- Consolidar helpers transversales (
filterOptions, normalizadores, parseo de storage) en utilidades versionadas. - Estandarizar convención de nombres (
left/right,player/commentator,override) y documentarla. - Introducir “barrels” (
index.ts) por feature para reducir imports relativos largos. - Separar claramente código “runtime NodeCG” (extension) de código “browser/dashboard”.
2) Stores y sincronización con Replicants
Alta prioridad
- Eliminar duplicación de normalización en
scoreboard.ts,players.tsycommentary.tsusando un validador común (zod/valibot o validadores propios centralizados). - Modelar una política única de snapshots en localStorage: actualmente algunos stores persisten y otros no; unificar criterio por feature.
- Tipar mejor
ReplicantLike<T>para contemplar estados de carga, errores y ausencia de datos, no solodata | undefined. - Agregar control anti-loop más robusto en
syncStateWithReplicant(versionado/cambios por hash) para evitar escrituras redundantes. - Introducir acciones atómicas para operaciones compuestas (ej. swap + persistencia) y facilitar test unitario.
Media prioridad
- Añadir métricas de latencia/frecuencia de
save()para detectar exceso de persistencia. - Exponer
dirty state/isSyncedpor store para feedback de UI y depuración. - Implementar estrategia de migración de snapshots al cambiar schema/version.
- Crear utilidades de actualización parcial (
patchScoreboard) en vez de reasignar objetos completos repetidamente.
3) Componentes Vue y UI (dashboard)
Alta prioridad
- Partir
ScoreboardPanel.vueen subcomponentes (jugador izquierdo/derecho, juego/personajes, score controls, overrides). - Mover filtros y autocompletado a composables (
usePlayerSearch,useCountrySearch,useCharacterSearch). - Reducir watchers y
watchEffectad-hoc sustituyéndolos por derivaciones computadas puras y acciones explícitas. - Crear componentes reutilizables para pares simétricos izquierda/derecha y eliminar lógica duplicada.
- Formalizar estados vacíos/errores/carga en paneles (players, bracket, commentary) para UX consistente.
Media prioridad
- Consolidar strings hardcodeados de juegos en una fuente única + i18n.
- Definir diseño de formularios con reglas de validación declarativas (Quasar rules reutilizables).
- Introducir navegación por teclado consistente en selects/inputs críticos para operación en vivo.
- Añadir micro-feedback visual de acciones críticas (swap/reset/save).
- Desacoplar assets de personajes de la lógica de presentación para soportar themes/skins.
4) Extensión NodeCG e integraciones externas
Alta prioridad
- Refactorizar
src/extension/index.tsa registro de módulos con manejo explícito de inicialización y fallos por integración. - Encapsular
startggychallongedetrás de puertos/adaptadores para que el dominio no dependa de APIs concretas. - Agregar retry/backoff/timeouts centralizados para llamadas externas.
- Registrar logs estructurados (nivel, contexto, correlación) en vez de logs dispersos.
- Definir feature flags/config para habilitar/deshabilitar integraciones sin tocar código.
Media prioridad
- Crear una capa de cache para respuestas repetidas de torneos.
- Tipar estrictamente respuestas externas y validar payloads de entrada/salida.
- Establecer límites de tasa por proveedor para evitar bloqueos.
- Agregar pruebas de contrato para integraciones.
5) Esquemas, tipos y contratos
Alta prioridad
- Alinear defaults de código con schemas JSON y evitar drift entre
schemas/*y stores. - Automatizar comprobación en CI de que
schema-typesestá actualizado. - Versionar schemas y definir estrategia de migración para datos persistidos.
- Introducir invariantes de dominio explícitas (scores >= 0, ids válidos, países válidos, etc.).
Media prioridad
- Centralizar tipos derivados repetidos en
src/typespara eliminar alias locales redundantes. - Definir
branded typespara IDs sensibles (PlayerId,GameId). - Crear tests de regresión de normalizadores contra casos borde.
6) Tooling, calidad y automatización
Alta prioridad
- Agregar pipeline CI completo (lint, typecheck, build, tests, schema drift check).
- Separar
lintdetypecheckcon scripts dedicados y fail-fast claro. - Incluir tests unitarios para stores, normalizadores y utilidades compartidas.
- Añadir tests de integración de replicants simulando cambios bidireccionales dashboard/extension.
- Incorporar pruebas E2E críticas para flujos de operación (swap players, update scores, reset).
Media prioridad
- Incorporar coverage mínimo y umbrales por carpeta.
- Añadir pre-commit hooks (lint-staged + prettier/eslint).
- Documentar comandos de release y versionado semántico.
- Introducir changelog automático.
7) Rendimiento y robustez
Alta prioridad
- Evitar recomputaciones costosas en cada render cacheando opciones derivadas grandes (jugadores, países, personajes).
- Reducir escrituras frecuentes a localStorage/replicant con debounce/throttle configurable.
- Optimizar payloads de replicants para enviar solo campos cambiados cuando sea viable.
Media prioridad
- Medir tiempos de montaje de paneles y establecer presupuesto de rendimiento.
- Revisar tamaño de bundle y lazy-load de vistas no críticas.
- Añadir fallback robusto para assets de personajes faltantes.
8) Seguridad operativa y resiliencia
Alta prioridad
- Sanitizar y validar inputs de usuario antes de persistir/renderizar (nombres, handles, textos libres).
- Definir límites de longitud por campo y truncado seguro para evitar overflows visuales.
- Manejar degradación controlada cuando APIs externas fallen durante directo.
Media prioridad
- Auditar dependencia y política de actualizaciones de seguridad.
- Añadir guía de incidentes operativos (qué hacer si falla startgg/challonge).
9) Limpieza y eliminación técnica
Alta prioridad
- Eliminar código muerto y utilidades no usadas tras dividir componentes/composables.
- Reducir duplicados izquierda/derecha mediante abstracciones reutilizables.
- Homogeneizar manejo de errores silenciosos (
catch {}) con reporte opcional de diagnóstico.
Media prioridad
- Revisar assets/imágenes huérfanas y limpiar peso innecesario del repo.
- Estandarizar comentarios y retirar comentarios obvios/desactualizados.
- Reorganizar carpetas de
graphicspara facilitar escalado a nuevas overlays.
10) Plan sugerido por fases
- Fase 1 (rápida, alto impacto): 10, 19, 29, 38, 45, 47, 54, 55, 60, 65.
- Fase 2 (estabilización): 11, 13, 20, 30, 31, 39, 46, 48, 56, 67.
- Fase 3 (escala y DX): 1, 4, 5, 24, 33, 40, 49, 50, 58, 70.
11) Quick wins (1–2 días)
- Añadir scripts
typecheckytestenpackage.json+ pipeline CI base. - Extraer filtros de
ScoreboardPanela composables (useFilterOptions,useCountryFilter). - Unificar normalizadores en
src/shared/normalize. - Añadir tests unitarios de
syncStateWithReplicanty normalizadores. - Convertir strings de juegos a una constante única internacionalizable.
- Agregar debounce a persistencia de storage/replicant.