diff --git a/server/src/routes/campaigns.ts b/server/src/routes/campaigns.ts index ba04bff..6a0189a 100644 --- a/server/src/routes/campaigns.ts +++ b/server/src/routes/campaigns.ts @@ -1,50 +1,55 @@ import { Router } from "express"; +import type { RowDataPacket, ResultSetHeader } from "mysql2"; 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); +// GET /api/campaigns +router.get("/", async (_req, res) => { + const [rows] = await db.execute( + "SELECT * FROM campaigns ORDER BY created_at DESC" + ); + res.json(rows); }); -// POST /api/campaigns — create a campaign -router.post("/", (req, res) => { +// POST /api/campaigns +router.post("/", async (req, res) => { const { name } = req.body; - if (!name || !name.trim()) { + if (!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); + const [result] = await db.execute( + "INSERT INTO campaigns (name) VALUES (?)", + [name.trim()] + ); + const [rows] = await db.execute( + "SELECT * FROM campaigns WHERE id = ?", + [result.insertId] + ); + res.status(201).json(rows[0]); }); -// 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) { +// GET /api/campaigns/:id +router.get("/:id", async (req, res) => { + const [rows] = await db.execute( + "SELECT * FROM campaigns WHERE id = ?", + [req.params.id] + ); + if (rows.length === 0) { res.status(404).json({ error: "Campaign not found" }); return; } - res.json(campaign); + res.json(rows[0]); }); -// 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) { +// DELETE /api/campaigns/:id +router.delete("/:id", async (req, res) => { + const [result] = await db.execute( + "DELETE FROM campaigns WHERE id = ?", + [req.params.id] + ); + if (result.affectedRows === 0) { res.status(404).json({ error: "Campaign not found" }); return; } diff --git a/server/src/routes/game-items.ts b/server/src/routes/game-items.ts index 168881e..e718d10 100644 --- a/server/src/routes/game-items.ts +++ b/server/src/routes/game-items.ts @@ -1,13 +1,14 @@ import { Router } from "express"; +import type { RowDataPacket } from "mysql2"; import db from "../db.js"; const router = Router(); -router.get("/", (_req, res) => { - const items = db - .prepare("SELECT * FROM game_items ORDER BY type, name") - .all() as Array>; - const parsed = items.map((item) => ({ +router.get("/", async (_req, res) => { + const [rows] = await db.execute( + "SELECT * FROM game_items ORDER BY type, name" + ); + const parsed = rows.map((item) => ({ ...item, effects: JSON.parse(item.effects as string), properties: JSON.parse(item.properties as string), diff --git a/server/src/routes/game-talents.ts b/server/src/routes/game-talents.ts index 7d90cf1..b90f724 100644 --- a/server/src/routes/game-talents.ts +++ b/server/src/routes/game-talents.ts @@ -1,13 +1,14 @@ import { Router } from "express"; +import type { RowDataPacket } from "mysql2"; import db from "../db.js"; const router = Router(); -router.get("/", (_req, res) => { - const talents = db - .prepare("SELECT * FROM game_talents ORDER BY source, name") - .all() as Array>; - const parsed = talents.map((t) => ({ +router.get("/", async (_req, res) => { + const [rows] = await db.execute( + "SELECT * FROM game_talents ORDER BY source, name" + ); + const parsed = rows.map((t) => ({ ...t, effect: JSON.parse(t.effect as string), })); diff --git a/server/src/routes/rolls.ts b/server/src/routes/rolls.ts index b291a71..6ae6717 100644 --- a/server/src/routes/rolls.ts +++ b/server/src/routes/rolls.ts @@ -1,24 +1,22 @@ import { Router } from "express"; +import type { RowDataPacket } from "mysql2"; import db from "../db.js"; const router = Router({ mergeParams: true }); -router.get("/", (req, res) => { - const { campaignId } = req.params; - const rolls = db - .prepare( - "SELECT * FROM roll_log WHERE campaign_id = ? ORDER BY created_at DESC LIMIT 50", - ) - .all(campaignId) as Array>; - - const parsed = rolls.map((r) => ({ +router.get("/", async (req: any, res) => { + const { campaignId } = req.params as { campaignId: string }; + const [rows] = await db.execute( + "SELECT * FROM roll_log WHERE campaign_id = ? ORDER BY created_at DESC LIMIT 50", + [campaignId] + ); + const parsed = rows.map((r) => ({ ...r, rolls: JSON.parse(r.rolls as string), advantage: r.advantage === 1, disadvantage: r.disadvantage === 1, nat20: r.nat20 === 1, })); - res.json(parsed); });