feat: implement ROMs management UI (Phase 8)

Backend (Phase 8.1):
- Add ROMs endpoints: GET, GET/:id, PUT/:id/game, DELETE
- Add metadata search endpoint using IGDB/RAWG/TGDB
- Implement RomsController with ROM CRUD logic
- Add 12 comprehensive ROM endpoint tests
- Configure Vitest to run tests sequentially (threads: false)
- Auto-apply Prisma migrations in test setup

Frontend (Phase 8.2 + 8.3):
- Create ROM types: RomFile, Artwork, EnrichedGame
- Extend API client with roms and metadata namespaces
- Implement 5 custom hooks with TanStack Query
- Create ScanDialog, MetadataSearchDialog, RomCard components
- Rewrite roms.tsx page with table and all actions
- Add 37 comprehensive component and page tests

All 122 tests passing: 63 backend + 59 frontend
Lint: 0 errors, only unused directive warnings
This commit is contained in:
2026-02-12 19:52:59 +01:00
parent 630ebe0dc8
commit 571ac97f00
22 changed files with 2221 additions and 4 deletions

View File

@@ -5,6 +5,8 @@ import rateLimit from '@fastify/rate-limit';
import healthRoutes from './routes/health';
import importRoutes from './routes/import';
import gamesRoutes from './routes/games';
import romsRoutes from './routes/roms';
import metadataRoutes from './routes/metadata';
export function buildApp(): FastifyInstance {
const app: FastifyInstance = Fastify({
@@ -17,6 +19,8 @@ export function buildApp(): FastifyInstance {
void app.register(healthRoutes, { prefix: '/api' });
void app.register(importRoutes, { prefix: '/api' });
void app.register(gamesRoutes, { prefix: '/api' });
void app.register(romsRoutes, { prefix: '/api' });
void app.register(metadataRoutes, { prefix: '/api' });
return app;
}