You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.4 KiB
84 lines
2.4 KiB
const express = require("express");
|
|
|
|
/**
|
|
* @param {import("../repositories/sqlite3")} repo
|
|
*/
|
|
module.exports = function programRouter(repo) {
|
|
const router = express.Router({caseSensitive: false});
|
|
|
|
router.get("/", async(_, res) => {
|
|
try {
|
|
const programs = await repo.listPrograms();
|
|
return res.status(200).json(programs);
|
|
} catch (err) {
|
|
return res.status(400).json({code: 400, message: err.message || err})
|
|
}
|
|
});
|
|
|
|
router.get("/:id", async(req, res) => {
|
|
try {
|
|
const program = await repo.findProgram(req.params.id);
|
|
if (program == null) {
|
|
return res.status(404).json({code: 404, message: "program not found"})
|
|
}
|
|
|
|
return res.status(200).json(program);
|
|
} catch (err) {
|
|
return res.status(500).json({code: 500, message: err.message || err})
|
|
}
|
|
});
|
|
|
|
router.post("/", async(req, res) => {
|
|
try {
|
|
const {name, cpm, warmupMin, warmupCpm} = req.body;
|
|
|
|
const level = req.body.level || 18;
|
|
const warmupLevel = req.body.warmupLevel || level;
|
|
const cooldownCpm = req.body.cooldownCpm || cpm;
|
|
const cooldownLevel = req.body.cooldownLevel || warmupLevel;
|
|
|
|
const data = {name, cpm, warmupMin, warmupCpm, level, warmupLevel, cooldownCpm, cooldownLevel};
|
|
|
|
const id = await repo.insertProgram(data)
|
|
|
|
return res.status(200).json(
|
|
{id, ...data}
|
|
);
|
|
} catch (err) {
|
|
return res.status(400).json({code: 400, message: err.message || err})
|
|
}
|
|
});
|
|
|
|
router.put("/:id", async(req, res) => {
|
|
try {
|
|
const program = await repo.findProgram(req.params.id);
|
|
if (program == null) {
|
|
return res.status(404).json({code: 404, message: "program not found"})
|
|
}
|
|
|
|
program.name = req.body.name || "";
|
|
await repo.updateProgram(program);
|
|
|
|
return res.status(200).json(program);
|
|
} catch (err) {
|
|
return res.status(400).json({code: 400, message: err.message || err})
|
|
}
|
|
});
|
|
|
|
router.delete("/:id", async(req, res) => {
|
|
try {
|
|
const program = await repo.findProgram(req.params.id);
|
|
if (program == null) {
|
|
return res.status(404).json({code: 404, message: "program not found"})
|
|
}
|
|
|
|
await repo.deleteProgram(program);
|
|
|
|
return res.status(200).json(program);
|
|
} catch (err) {
|
|
return res.status(500).json({code: 500, message: err.message || err})
|
|
}
|
|
});
|
|
|
|
return router;
|
|
}
|