Description: CdnService.invalidations and VirusScanService.results are both process-local Maps; GET /cdn/invalidations/:id and any future virus-scan-status endpoint return nothing after a restart, and in a horizontally-scaled deployment a request handled by one instance can never see the invalidation/scan state recorded by another, making CdnController.getInvalidation/listInvalidations unreliable in production.
Requirements:
- Add a
CdnInvalidationRequest Prisma model (id, paths JSON, status, requestedAt, completedAt, error) and a FileScanResult Prisma model (fileId, status, startedAt, completedAt, details, attempts).
- Replace the in-memory
invalidations Map in CdnService and results Map in VirusScanService with Prisma persistence.
- Add
GET /uploads/scans/:fileId (or fold into the new UploadsController) exposing VirusScanService.getScanStatus, which currently has no endpoint at all.
- Add migrations and tests verifying both stores survive across service instantiations.
Acceptance Criteria:
- CDN invalidation requests remain retrievable via
GET /cdn/invalidations/:id after an application restart.
- Virus scan results are queryable via a new endpoint and persist across restarts.
Technical Details:
Files: src/modules/uploads/cdn.service.ts, src/modules/uploads/virus-scan.service.ts, src/modules/uploads/cdn.controller.ts, prisma/schema.prisma
Libraries: prisma, @prisma/client
Description:
CdnService.invalidationsandVirusScanService.resultsare both process-localMaps;GET /cdn/invalidations/:idand any future virus-scan-status endpoint return nothing after a restart, and in a horizontally-scaled deployment a request handled by one instance can never see the invalidation/scan state recorded by another, makingCdnController.getInvalidation/listInvalidationsunreliable in production.Requirements:
CdnInvalidationRequestPrisma model (id, paths JSON, status, requestedAt, completedAt, error) and aFileScanResultPrisma model (fileId, status, startedAt, completedAt, details, attempts).invalidationsMap inCdnServiceandresultsMap inVirusScanServicewith Prisma persistence.GET /uploads/scans/:fileId(or fold into the newUploadsController) exposingVirusScanService.getScanStatus, which currently has no endpoint at all.Acceptance Criteria:
GET /cdn/invalidations/:idafter an application restart.Technical Details:
Files: src/modules/uploads/cdn.service.ts, src/modules/uploads/virus-scan.service.ts, src/modules/uploads/cdn.controller.ts, prisma/schema.prisma
Libraries: prisma, @prisma/client