Fastify patterns — always apply schema-first validation, plugin encapsulation, structured error handling, hooks lifecycle, decorators, TypeScript type providers, production hardening (CORS, helmet, rate limiting), pino logging, graceful shutdown, and correct async handler patterns
89
89%
Does it follow best practices?
Impact
91%
2.75xAverage score across 5 eval scenarios
Passed
No known issues
Build a Fastify API that manages file upload metadata. The service tracks files uploaded by users -- it does not handle the actual binary upload, just the metadata records.
A file record has: id (UUID string), filename (string), mimeType (string), sizeBytes (integer), uploadedBy (string -- user ID), status ("pending", "processing", "ready", "failed"), and createdAt (ISO date string).
POST /api/files -- Register a new file upload. Accepts filename, mimeType, sizeBytes, and uploadedBy.GET /api/files -- List files. Accepts optional query params: uploadedBy (string), status (string), mimeType (string).GET /api/files/:id -- Get file details.PATCH /api/files/:id/status -- Update file processing status. Accepts status in the body.DELETE /api/files/:id -- Delete a file record.POST /api/files/webhook -- Receive processing completion webhooks from an external file processor. Accepts fileId, status ("ready" or "failed"), and optional error (string).Use an in-memory store.
Produce TypeScript files in a src/ directory:
src/app.ts -- Fastify app setupsrc/plugins/files.ts -- File management routessrc/plugins/webhook.ts -- Webhook receiver routessrc/services/fileService.ts -- File business logicsrc/server.ts -- Server startupDo not include test files or build configuration.
evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
skills
fastify-best-practices
verifiers