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.

73 lines
2.1 KiB

5 years ago
3 years ago
5 years ago
  1. const express = require("express");
  2. /**
  3. * @param {import("../repositories/sqlite3")|SQLite3Repository} repo
  4. */
  5. module.exports = function bikeRouter(repo) {
  6. const router = express.Router({caseSensitive: false});
  7. router.get("/", async(_, res) => {
  8. try {
  9. const bikes = await repo.listBikes();
  10. return res.status(200).json(bikes);
  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 bike = await repo.findBike(req.params.id);
  18. if (bike == null) {
  19. return res.status(404).json({code: 404, message: "bike not found"})
  20. }
  21. return res.status(200).json(bike);
  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, driver, maxLevel, connect} = req.body;
  29. const id = await repo.insertBike({name, driver, maxLevel, connect})
  30. return res.status(200).json({id, name, driver, maxLevel, connect});
  31. } catch (err) {
  32. return res.status(400).json({code: 400, message: err.message || err})
  33. }
  34. });
  35. router.put("/:id", async(req, res) => {
  36. try {
  37. const bike = await repo.findBike(req.params.id);
  38. if (bike == null) {
  39. return res.status(404).json({code: 404, message: "bike not found"})
  40. }
  41. bike.name = req.body.name || "";
  42. await repo.updateBike(bike);
  43. return res.status(200).json(bike);
  44. } catch (err) {
  45. return res.status(400).json({code: 400, message: err.message || err})
  46. }
  47. });
  48. router.delete("/:id", async(req, res) => {
  49. try {
  50. const bike = await repo.findBike(req.params.id);
  51. if (bike == null) {
  52. return res.status(404).json({code: 404, message: "bike not found"})
  53. }
  54. await repo.deleteBike(bike);
  55. return res.status(200).json(bike);
  56. } catch (err) {
  57. return res.status(500).json({code: 500, message: err.message || err})
  58. }
  59. });
  60. return router;
  61. }