const express = require("express"); /** * @param {import("../repositories/sqlite3")|SQLite3Repository} repo */ module.exports = function bikeRouter(repo) { const router = express.Router({caseSensitive: false}); router.get("/", async(_, res) => { try { const bikes = await repo.listBikes(); return res.status(200).json(bikes); } catch (err) { return res.status(400).json({code: 400, message: err.message || err}) } }); router.get("/:id", async(req, res) => { try { const bike = await repo.findBike(req.params.id); if (bike == null) { return res.status(404).json({code: 404, message: "bike not found"}) } return res.status(200).json(bike); } catch (err) { return res.status(500).json({code: 500, message: err.message || err}) } }); router.post("/", async(req, res) => { try { const {name, driver, maxLevel, connect} = req.body; const id = await repo.insertBike({name, driver, maxLevel, connect}) return res.status(200).json({id, name, driver, maxLevel, connect}); } catch (err) { return res.status(400).json({code: 400, message: err.message || err}) } }); router.put("/:id", async(req, res) => { try { const bike = await repo.findBike(req.params.id); if (bike == null) { return res.status(404).json({code: 404, message: "bike not found"}) } bike.name = req.body.name || ""; await repo.updateBike(bike); return res.status(200).json(bike); } catch (err) { return res.status(400).json({code: 400, message: err.message || err}) } }); router.delete("/:id", async(req, res) => { try { const bike = await repo.findBike(req.params.id); if (bike == null) { return res.status(404).json({code: 404, message: "bike not found"}) } await repo.deleteBike(bike); return res.status(200).json(bike); } catch (err) { return res.status(500).json({code: 500, message: err.message || err}) } }); return router; }