darkwatch/server/dist/routes/campaigns.js

48 lines
1.5 KiB
JavaScript

import { Router } from "express";
import db from "../db.js";
const router = Router();
// GET /api/campaigns — list all campaigns
router.get("/", (_req, res) => {
const campaigns = db
.prepare("SELECT * FROM campaigns ORDER BY created_at DESC")
.all();
res.json(campaigns);
});
// POST /api/campaigns — create a campaign
router.post("/", (req, res) => {
const { name } = req.body;
if (!name || !name.trim()) {
res.status(400).json({ error: "Campaign name is required" });
return;
}
const result = db
.prepare("INSERT INTO campaigns (name) VALUES (?)")
.run(name.trim());
const campaign = db
.prepare("SELECT * FROM campaigns WHERE id = ?")
.get(result.lastInsertRowid);
res.status(201).json(campaign);
});
// GET /api/campaigns/:id — get a single campaign
router.get("/:id", (req, res) => {
const campaign = db
.prepare("SELECT * FROM campaigns WHERE id = ?")
.get(req.params.id);
if (!campaign) {
res.status(404).json({ error: "Campaign not found" });
return;
}
res.json(campaign);
});
// DELETE /api/campaigns/:id — delete a campaign (cascades to characters)
router.delete("/:id", (req, res) => {
const result = db
.prepare("DELETE FROM campaigns WHERE id = ?")
.run(req.params.id);
if (result.changes === 0) {
res.status(404).json({ error: "Campaign not found" });
return;
}
res.status(204).end();
});
export default router;