diff --git a/src/controller/index.js b/src/controller/index.js index 4d107f6..f11480f 100644 --- a/src/controller/index.js +++ b/src/controller/index.js @@ -6,6 +6,7 @@ const zoneRouter = require("./zone.router"); const areaRouter = require("./area.router"); const bayRouter = require("./bay.router"); const rowRouter = require("./row.router"); +const levelRouter = require("./level.router"); router.use("/user", userRouter); router.use("/company", companyRouter); @@ -14,6 +15,7 @@ router.use("/zone", zoneRouter); router.use("/area", areaRouter); router.use("/bay", bayRouter); router.use("/row", rowRouter); +router.use("/level", levelRouter); router.get("/", (req, res) => { res.send("Hello world"); diff --git a/src/controller/level.controller.js b/src/controller/level.controller.js new file mode 100644 index 0000000..60f1586 --- /dev/null +++ b/src/controller/level.controller.js @@ -0,0 +1,94 @@ +const Level = require("../models/Level"); +const mongoose = require("mongoose"); + +module.exports = { + /** + * Gets the level data by `id` + */ + getLevelByID: async (req, res, next) => { + const { id } = req.params; + + if (!id) { + res.status(400).send("Missing id param"); + return; + } + + try { + const levelData = await Level.findById(id); + if (!levelData) { + res.status(404); + return; + } + req.send(levelData); + } catch (error) { + next(error); + } + }, + + /** + * Create a level + */ + createLevel: async (req, res, next) => { + const { name, number, specs, bay_id } = req.body; + + if (!(name && number)) { + res.status(400).send("Missing params param"); + return; + } + + try { + const levelData = new Level({ + name, + number: parseInt(number), + specs, + bay_id: mongoose.Types.ObjectId(bay_id), + }); + + await levelData.save(); + if (!levelData) { + res.status(404); + return; + } + req.send(levelData); + } catch (error) { + next(error); + } + }, + + /** + * Update a levels detail + */ + updateLevelByID: async (req, res, next) => { + const { id } = req.params; + + if (!id) { + res.status(400).send("Missing id param"); + return; + } + + const { name, number, specs, bay_id } = req.body; + + if (!(name || number || specs || bay_id)) { + res.status(400).send("Missing data in body"); + return; + } + + try { + const levelData = await Level.findById(id); + if (!levelData) { + res.status(404); + return; + } + + if (name) levelData.name = name; + if (number) levelData.number = parseInt(number); + if (specs) levelData.specs = specs; + if (bay_id) levelData.bay_id = mongoose.Types.ObjectId(bay_id); + + await levelData.save(); + req.send(levelData); + } catch (error) { + next(error); + } + }, +}; diff --git a/src/controller/level.router.js b/src/controller/level.router.js new file mode 100644 index 0000000..5271ea6 --- /dev/null +++ b/src/controller/level.router.js @@ -0,0 +1,19 @@ +const router = require("express").Router(); +const controller = require("./level.controller"); + +/** + * @route /level/:id + */ +router.get("/:id", controller.getLevelByID); + +/** + * @route /level/ + */ +router.post("/", controller.createLevel); + +/** + * @route /level/ + */ +router.patch("/:id", controller.updateLevelByID); + +module.exports = router; diff --git a/src/models/Level.js b/src/models/Level.js index d3e6a9c..43b04c0 100644 --- a/src/models/Level.js +++ b/src/models/Level.js @@ -9,7 +9,7 @@ const schema = new mongoose.Schema( }, number: { required: true, - type: String, + type: Number, trim: true, }, specs: { @@ -17,6 +17,10 @@ const schema = new mongoose.Schema( type: String, trim: true, }, + bay_id: { + type: mongoose.Schema.Types.ObjectId, + ref: "Bay", + }, sub_levels: [ { type: {