# Requisitos — Fase 2: Requisitos y criterios de aceptación ## Resumen breve del propósito (MVP) Quasar es una aplicación **local-first** y **self‑hosted** para gestionar una colección personal de videojuegos: escanear ROMs locales, registrar juegos físicos y digitales, enriquecer metadata (portadas, géneros, fechas) desde APIs públicas, y permitir exportación/importación de la colección. El MVP debe ser utilizable en un entorno de una única máquina/usuario con opción de evolucionar a despliegues multiusuario. --- ## Requisitos funcionales (priorizados) | # | Requisito | Prioridad | Criterio mínimo de aceptación | | --- | ------------------------------------------------- | --------: | ------------------------------------------------------------------------------------------------------------------------------------------- | | 1 | Escaneo e importación de ROMs locales (recursivo) | **P0** | Detecta archivos en directorio configurado, calcula checksum y crea entrada `RomFile` con metadata básica (nombre, tamaño, ruta, checksum). | | 2 | CRUD de juegos y vinculación de ROMs | **P0** | Crear/editar/eliminar juegos; vincular/desvincular archivos ROM a un juego. | | 3 | Enriquecimiento de metadata (IGDB / RAWG) | **P0** | Buscar por título y aplicar metadata seleccionada (cover, géneros, fecha). | | 4 | Gestión de artwork local | **P0** | Descargar portada al almacenamiento local optimizado y servirla desde el backend. | | 5 | Exportar/Importar (CSV/JSON) | **P0** | Exportar la lista de juegos con campos clave; importar (básico) para recuperación. | | 6 | Registro de compras y precios | **P1** | Añadir registro de compra con precio, moneda, fecha y opcionalmente recibo. | | 7 | Dedupe y verificación por checksum | **P1** | Detectar duplicados por checksum y ofrecer opciones (fusionar, ignorar). | | 8 | Filtrado, búsqueda y etiquetado | **P1** | Búsqueda por título, plataforma, etiquetas y filtros básicos. | | 9 | Backups y restauración básicos | **P1** | Exportar DB y assets; restaurar desde exportación. | | 10 | Configuración de carpetas y preferencias | **P2** | Interfaz para configurar rutas de escaneo, límites y opciones de importación. | --- ## Requisitos no funcionales - **Seguridad**: No almacenar credenciales en el repositorio; variables sensibles en `.env` y GitHub Secrets en CI; saneamiento y validación de inputs en backend. - **Privacidad**: Local-first por defecto; telemetría deshabilitada. - **Rendimiento**: Escaneos y enriquecimiento deben ejecutarse como trabajos asíncronos; hashing con streaming para archivos grandes. - **Escalabilidad y portabilidad**: Arquitectura preparada para migrar de SQLite (dev/local) a Postgres (producción). - **Disponibilidad**: Backups regulares y endpoint de salud; tolerar fallos de APIs externas con retries y cola. --- ## Casos de uso principales y flujos de usuario ### 1) Importar ROMs (escaneo automático) 1. Usuario configura ruta(s) de escaneo. 2. Backend inicia job de escaneo (worker). 3. Para cada archivo: calcular checksum, extraer tamaño/fecha, crear `RomFile`. 4. Si hay duplicados por checksum, marcar y notificar al usuario. 5. Ofrecer emparejado automático con juegos existentes o sugerir búsqueda externa. ### 2) Crear juego manual 1. Usuario abre formulario "Nuevo juego". 2. Rellenar título, plataforma, fecha, tags, descripción. 3. Guardar y opcionalmente vincular ROM(s) existentes. ### 3) Buscar / enriquecer metadata 1. Usuario busca por título en la UI -> backend consulta IGDB/RAWG. 2. Mostrar resultados con mini-previsualización (cover, plataformas, fecha). 3. Usuario selecciona resultado y aplica metadata al registro local. ### 4) Registrar compra 1. Desde la ficha del juego, usuario añade una compra (precio, moneda, tienda, fecha). 2. Opcionalmente adjunta imagen del recibo. ### 5) Exportar CSV / JSON 1. Usuario elige formato y filtros (plataforma, tags). 2. Backend genera el archivo y lo descarga. --- ## Criterios de aceptación del MVP (ejemplos testables) - Escanear un directorio y listar ROMs con nombre, tamaño y checksum. - Crear/leer/editar/eliminar un juego y vincular al menos un `RomFile`. - Buscar en una API externa y aplicar metadata a un juego. - Descargar y servir una portada optimizada localmente. - Exportar colección en CSV y JSON. --- ## Fuentes - IGDB, RAWG, TheGamesDB (documentación pública). - Buenas prácticas: Documentación de Prisma, Fastify, React y TanStack Query/Router. --- **Metadatos** Autor: Quasar (investigación automatizada) Última actualización: 2026-02-07