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.

83 lines
2.4 KiB

5 years ago
5 years ago
  1. const express = require("express");
  2. /**
  3. * @param {import("../repositories/sqlite3")} repo
  4. */
  5. module.exports = function programRouter(repo) {
  6. const router = express.Router({caseSensitive: false});
  7. router.get("/", async(_, res) => {
  8. try {
  9. const programs = await repo.listPrograms();
  10. return res.status(200).json(programs);
  11. } catch (err) {
  12. return res.status(400).json({code: 400, message: err.message || err})
  13. }
  14. });
  15. router.get("/:id", async(req, res) => {
  16. try {
  17. const program = await repo.findProgram(req.params.id);
  18. if (program == null) {
  19. return res.status(404).json({code: 404, message: "program not found"})
  20. }
  21. return res.status(200).json(program);
  22. } catch (err) {
  23. return res.status(500).json({code: 500, message: err.message || err})
  24. }
  25. });
  26. router.post("/", async(req, res) => {
  27. try {
  28. const {name, cpm, warmupMin, warmupCpm} = req.body;
  29. const level = req.body.level || 18;
  30. const warmupLevel = req.body.warmupLevel || level;
  31. const cooldownCpm = req.body.cooldownCpm || cpm;
  32. const cooldownLevel = req.body.cooldownLevel || warmupLevel;
  33. const data = {name, cpm, warmupMin, warmupCpm, level, warmupLevel, cooldownCpm, cooldownLevel};
  34. const id = await repo.insertProgram(data)
  35. return res.status(200).json(
  36. {id, ...data}
  37. );
  38. } catch (err) {
  39. return res.status(400).json({code: 400, message: err.message || err})
  40. }
  41. });
  42. router.put("/:id", async(req, res) => {
  43. try {
  44. const program = await repo.findProgram(req.params.id);
  45. if (program == null) {
  46. return res.status(404).json({code: 404, message: "program not found"})
  47. }
  48. program.name = req.body.name || "";
  49. await repo.updateProgram(program);
  50. return res.status(200).json(program);
  51. } catch (err) {
  52. return res.status(400).json({code: 400, message: err.message || err})
  53. }
  54. });
  55. router.delete("/:id", async(req, res) => {
  56. try {
  57. const program = await repo.findProgram(req.params.id);
  58. if (program == null) {
  59. return res.status(404).json({code: 404, message: "program not found"})
  60. }
  61. await repo.deleteProgram(program);
  62. return res.status(200).json(program);
  63. } catch (err) {
  64. return res.status(500).json({code: 500, message: err.message || err})
  65. }
  66. });
  67. return router;
  68. }