paperclip/server/src/routes/issues.ts

53 lines
1.4 KiB
TypeScript
Raw Normal View History

import { Router } from "express";
import type { Db } from "@paperclip/db";
import { createIssueSchema, updateIssueSchema } from "@paperclip/shared";
import { validate } from "../middleware/validate.js";
import { issueService } from "../services/issues.js";
export function issueRoutes(db: Db) {
const router = Router();
const svc = issueService(db);
router.get("/", async (_req, res) => {
const result = await svc.list();
res.json(result);
});
router.get("/:id", async (req, res) => {
const id = req.params.id as string;
const issue = await svc.getById(id);
if (!issue) {
res.status(404).json({ error: "Issue not found" });
return;
}
res.json(issue);
});
router.post("/", validate(createIssueSchema), async (req, res) => {
const issue = await svc.create(req.body);
res.status(201).json(issue);
});
router.patch("/:id", validate(updateIssueSchema), async (req, res) => {
const id = req.params.id as string;
const issue = await svc.update(id, req.body);
if (!issue) {
res.status(404).json({ error: "Issue not found" });
return;
}
res.json(issue);
});
router.delete("/:id", async (req, res) => {
const id = req.params.id as string;
const issue = await svc.remove(id);
if (!issue) {
res.status(404).json({ error: "Issue not found" });
return;
}
res.json(issue);
});
return router;
}