// Auto-generated Item routes import type { FastifyInstance } from "fastify"; import { authenticate } from "../middleware/auth.js"; import { ItemService } from "../services/item.js"; import type { CreateItemInput, UpdateItemInput } from "../types/index.js"; const service = new ItemService(); export async function itemsRoutes(app: FastifyInstance): Promise { // All routes require authentication app.addHook("onRequest", authenticate); // GET /api/items — list app.get("/", async (request, reply) => { const items = service.list(); return { data: items }; }); // GET /api/items/:id — get by id app.get<{ Params: { id: string } }>("/:id", async (request, reply) => { const item = service.getById(request.params.id); if (!item) { return reply.status(404).send({ error: "Not Found", message: "Item not found", statusCode: 404 }); } return { data: item }; }); // POST /api/items — create app.post<{ Body: CreateItemInput }>("/", async (request, reply) => { const item = service.create(request.body); return reply.status(201).send({ data: item }); }); // PUT /api/items/:id — update app.put<{ Params: { id: string }; Body: UpdateItemInput }>("/:id", async (request, reply) => { const item = service.update(request.params.id, request.body); if (!item) { return reply.status(404).send({ error: "Not Found", message: "Item not found", statusCode: 404 }); } return { data: item }; }); // DELETE /api/items/:id — delete app.delete<{ Params: { id: string } }>("/:id", async (request, reply) => { const deleted = service.delete(request.params.id); if (!deleted) { return reply.status(404).send({ error: "Not Found", message: "Item not found", statusCode: 404 }); } return reply.status(204).send(); }); }