import { Elysia, t } from "elysia"; import prisma from "../lib/prisma"; export const rawMaterialsRoute = new Elysia({ prefix: "/raw-materials" }) .get("/", async () => { const rawMaterials = await prisma.rawMaterial.findMany({ orderBy: { name: "asc" }, }); return rawMaterials; }) .get("/:id", async ({ params, status }) => { const id = parseInt(params.id); if (isNaN(id)) return status(400, { message: "Invalid ID" }); const rawMaterial = await prisma.rawMaterial.findUnique({ where: { id }, }); if (!rawMaterial) return status(404, { message: "Raw material not found" }); return rawMaterial; }) .post("/", async ({ body, status }) => { try { const rawMaterial = await prisma.rawMaterial.create({ data: body, }); return status(201, rawMaterial); } catch (err) { console.error(err); return status(500, { message: "Failed to create raw material" }); } }, { body: t.Object({ name: t.String(), unit: t.String(), pricePerUnit: t.Number(), }), detail: { tags: ["raw-materials"] } }) .put("/:id", async ({ params, body, status }) => { const id = parseInt(params.id); if (isNaN(id)) return status(400, { message: "Invalid ID" }); try { const rawMaterial = await prisma.rawMaterial.update({ where: { id }, data: body, }); return rawMaterial; } catch (err) { console.error(err); return status(500, { message: "Failed to update raw material" }); } }, { body: t.Object({ name: t.String(), unit: t.String(), pricePerUnit: t.Number(), }), detail: { tags: ["raw-materials"] } }) .delete("/:id", async ({ params, status }) => { const id = parseInt(params.id); if (isNaN(id)) return status(400, { message: "Invalid ID" }); try { await prisma.rawMaterial.delete({ where: { id }, }); return { success: true }; } catch (err) { console.error(err); return status(500, { message: "Failed to delete raw material" }); } }, { detail: { tags: ["raw-materials"] } });