mirror of
https://github.com/Pandipipas/scoreko-dev.git
synced 2026-06-06 03:32:06 +00:00
8.0 KiB
8.0 KiB
Auditoría técnica integral (repositorio completo)
Objetivo: proponer una lista detallada de refactors, limpiezas, reworks y mejoras para todo el repositorio, con enfoque incremental y sin romper comportamiento.
Alcance revisado (full repo)
- Extension (backend NodeCG):
src/extension/* - Dashboard (UI panel):
src/dashboard/* - Graphics (overlays):
src/graphics/* - Shared (catálogos y utilidades):
src/shared/*ysrc/browser_shared/* - Schemas y tipos generados:
schemas/*,src/types/*,configschema.json - Tooling y build:
package.json,vite.config.ts,tsconfig*.json,eslint*.js - Docs y metadatos:
README.md,LICENSE,.vscode/*
1) Refactorización de arquitectura (backend + frontend)
- Separar módulos grandes de integración (
startgg.ts,challonge.ts) en capas:oauth/(sesiones, callback server, token exchange),api/(requests, retries, parsing),mappers/(normalización a modelo interno),listeners/(registronodecg.listenFor).
- Crear una capa de dominio compartida (
src/domain/):- Tipos como
Tournament,ImportedPlayer,OAuthSession,IntegrationError. - Evita duplicidad de interfaces entre extension/dashboard.
- Tipos como
- Aislar la lógica de sincronización de stores:
- Mantener
store-sync.tscomo base, pero separar responsabilidades:- snapshot local,
- sincronización replicant,
- normalización.
- Mantener
2) Limpieza y unificación de integraciones externas
- Eliminar duplicación StartGG/Challonge:
- Actualmente hay utilidades repetidas (
getStringProp,sendAck, OAuth session lifecycle, callback HTML). - Crear utilidades comunes en
src/extension/util/integrations.ts.
- Actualmente hay utilidades repetidas (
- Estandarizar respuestas de listeners:
- Contrato único:
{ ok: boolean, data?: T, error?: string, code?: string }. - Mejora manejo de errores en dashboard.
- Contrato único:
- Timeout + retry con backoff para
fetch:- Abortar peticiones lentas, reintentar
429y5xx.
- Abortar peticiones lentas, reintentar
- Logging estructurado:
- Añadir
requestId,integration,operation,durationMs,status.
- Añadir
3) Endurecimiento de seguridad
- Escapar contenido HTML en callbacks OAuth (
renderCallbackHtml). - Minimizar exposición de secretos:
- Nunca serializar client secrets en logs/acks.
- Validación defensiva de payloads de listeners:
- Evitar aceptar estructuras parciales no esperadas.
- Cleanup de sesiones OAuth más robusto:
- Barrido periódico + límite de sesiones en memoria.
4) Tipado y calidad TypeScript
- Sustituir casts amplios (
as unknown as Record<string, unknown>) por parsers tipados. - Centralizar normalizadores (
normalizeX) por dominio enshared/normalizers/. - Discriminated unions para eventos:
- Listeners de extension y acciones de dashboard más seguros.
- Endurecer
tsconfigprogresivamente:- revisar
noUncheckedIndexedAccess,exactOptionalPropertyTypesy flags estrictos adicionales.
- revisar
5) Dashboard: UX, estructura y deuda técnica
- Descomponer
ScoreboardPanel.vueen subcomponentes:- Selectores de jugador,
- Selectores de personaje,
- Bloque de score/round/game,
- Acciones rápidas.
- Extraer lógica repetida de filtros/autocomplete a composables:
useFilteredOptions,useCountryFilter,useCharacterFilter.
- Unificar persistencia local:
commentaryno persiste snapshot local yplayers/scoreboardsí.- Definir política única.
- Accesibilidad:
- Labels explícitos, foco visible, atajos de teclado básicos.
- I18n completo:
- Detectar cadenas hardcodeadas en componentes y moverlas a
i18n.ts.
- Detectar cadenas hardcodeadas en componentes y moverlas a
6) Graphics: mantenibilidad y consistencia visual
- Crear una base compartida de render para
scoreboard,scoreboard-2xko,commentary:- formato de nombre/equipo,
- fallback de banderas,
- truncado/ellipsis,
- placeholders de assets.
- Normalizar fuentes y assets:
- directorio por overlay + convención de naming.
- Modo degradado (“safe render”):
- Cuando faltan datos del replicant, render estable sin romper layout.
- Pruebas visuales smoke:
- snapshots por estado base (vacío / datos completos / datos parciales).
7) Shared data: países, personajes e imágenes
- Separar catálogo de personajes de lógica de presentación:
- JSON/TS puro para data,
- utilidades aparte para slug, placeholder, imagen.
- Detectar drift catálogo vs assets:
- script que valide personaje declarado pero imagen inexistente (y viceversa).
- Optimización de imágenes:
- convertir PNG grandes a WebP/AVIF (mantener fallback si hace falta).
- Consolidar reglas de slugificado para evitar inconsistencias por juego.
8) Schemas, replicants y migraciones
- Versionar schemas de replicants:
- incluir
schemaVersiony migraciones compatibles.
- incluir
- Contrato de migración al iniciar extension:
- migrar datos viejos antes de exponerlos al dashboard/graphics.
- Validación runtime adicional tras importaciones externas.
- Automatizar verificación de tipos generados (
schema-types) en CI.
9) Testing (deuda principal del repo)
- Unit tests extension:
- parsers de payload,
- normalizadores de torneos/jugadores,
- utilidades OAuth.
- Unit tests shared:
- países, personaje por juego, slug/imagen fallback.
- Tests de stores Pinia:
- sincronización replicants,
- swap/reset,
- persistencia local.
- E2E smoke dashboard + graphics:
- editar datos en panel y verificar overlays.
- Contract tests de integraciones con respuestas mockeadas.
10) Build, tooling y CI/CD
- Pipeline mínima obligatoria:
npm cinpm run lintnpm run schema-typesnpm run build
- Script
devestándar (mantenerwatchcomo alias). - Checks de tamaño de bundle/assets para detectar regresiones.
- Renovación de
.vscodesettings para alinearse con lint/format del repo.
11) Naming, convenciones y limpieza general
- Unificar branding
scoreko-dev/Scorekoen UI y docs. - Convención de nombres consistente:
- archivos Vue en
PascalCase, utilidades enkebab-caseocamelCasesegún regla definida.
- archivos Vue en
- Depurar archivos de ejemplo:
- mantener
examplesolo si aporta onboarding real.
- mantener
- Eliminar dead code / imports no usados de módulos grandes en cada iteración.
12) Documentación que crearía o ampliaría
docs/architecture.md(flujo completo NodeCG).docs/integrations/startgg.mdydocs/integrations/challonge.md.docs/replicants-and-schemas.md(versionado + migraciones).docs/testing-strategy.md(unit/integration/e2e).docs/release-checklist.md(build, smoke, rollback).
13) Roadmap por fases (sin romper producción)
- Fase 1 (bajo riesgo): tests unitarios shared + extension, utilidades comunes de integración, documentación base.
- Fase 2 (riesgo medio): refactor interno de StartGG/Challonge sin cambiar contratos externos.
- Fase 3 (riesgo medio): descomposición de paneles dashboard y composables reutilizables.
- Fase 4 (riesgo medio/alto): migraciones de schemas + endurecimiento TypeScript.
- Fase 5 (continuo): optimización de assets, tests visuales y budget de performance.
Inventario inspeccionado para esta auditoría global
- Configuración y tooling:
package.json,vite.config.ts,tsconfig*.json,eslint*.js,README.md,configschema.json. - Extension:
src/extension/index.ts,src/extension/startgg.ts,src/extension/challonge.ts,src/extension/util/*,src/extension/example.ts. - Dashboard:
src/dashboard/scoreko-dev/*,src/dashboard/loading/*,src/dashboard/template.html,src/dashboard/quasar-variables.sass. - Graphics:
src/graphics/scoreboard/*,src/graphics/scoreboard-2xko/*,src/graphics/commentary/*,src/graphics/template.html. - Shared/browser_shared:
src/shared/countries.ts,src/shared/fighting-characters.ts,src/shared/character-images/*,src/browser_shared/replicants.ts. - Schemas y tipos:
schemas/*,src/types/*.