2026-08-07 — marvelousdb: dashboard de cobertura + boton de reporte de imagen
Contexto: el usuario pidio una metrica visible de imagenes cubiertas/por cubrir en la web, una comparativa por universo, y un boton para marcar un personaje como “no cubierto”.
Implementacion
- API:
GET /api/stats: por universo (total/covered/missing/pct), totales,reported, ymissingCharacters(ids sin imagen).isCovered(id, raw): reportado? no | cache local? si | thumbnail usable en BD? si.POST /api/characters/:id/reportyDELETE .../report: Set persistente endata/reported-images.json(sobrevive reinicios y vive en el volumen de Fly).charThumbignora cache+DB url para reportados → placeholder.
- Web: proxy /api ahora reenvia POST/DELETE (express.json). Ruta
/coveragecon barra general + barras comparativas por universo (estilo cameradecision) + listado de pendientes. Link “Coverage” en el nav. - Vista character: boton “Image missing or wrong — mark as uncovered” (fetch POST via proxy, feedback “Marked!…”).
- cache-images.js: al arrancar poda del indice los ids reportados (se re-cachean); los reportados entran a la cola de faltantes aunque tengan thumbnail en BD; la pasada —wikia los excluye (no re-descargar lo reportado).
Verificacion
- 26/26 tests (nuevos: stats coherentes, report re-queue + placeholder + stats + undo).
- /coverage 200 con % por universo; POST report via proxy 200; unreport 200.
- reported-images.json queda vacio tras los tests.
Pendiente (usuario)
- Correr
npm run cache:images -- --browserrun(o la pasada que prefiera) para llenar los ~420 faltantes; los reportados se re-cachean solos en la siguiente corrida.