From ed5eeed9edd958b1e96b006151c8b66e4c484242 Mon Sep 17 00:00:00 2001 From: Llewellyn Dsouza Date: Sun, 27 Feb 2022 16:49:13 +0530 Subject: [PATCH] Added: Deleted by type and id --- src/controller/dashboard.controller.js | 57 ++++++++++++++++++++++---- src/controller/dashboard.router.js | 5 +++ 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/controller/dashboard.controller.js b/src/controller/dashboard.controller.js index f7c65f4..6b1f4cc 100644 --- a/src/controller/dashboard.controller.js +++ b/src/controller/dashboard.controller.js @@ -10,6 +10,7 @@ const Sublevel = require("../models/Sublevel"); const Inventory = require("../models/Inventory"); const WidgetFamily = require("../models/WidgetFamily"); const Item = require("../models/Item"); +const { deleteSubLevelTreeFromRoot } = require("./utils/sublevel"); const createWarehouse = async ({ name, address, specs, company_id }) => { if (!(name && address)) { @@ -251,20 +252,20 @@ const createWidgetFamilies = async (widgetFamilies, inventory, parent = undefine return widgetFamiliesData; }; -const getChildModel = (parentType) => { - switch (parentType) { +const getLocationTypeModel = (type) => { + switch (type) { case "warehouse": - return Zone; + return Warehouse; case "zone": - return Area; + return Zone; case "area": - return Row; + return Area; case "row": - return Bay; + return Row; case "bay": - return Level; + return Bay; case "level": - return Sublevel; + return Level; case "sublevel": return Sublevel; default: @@ -272,6 +273,26 @@ const getChildModel = (parentType) => { } }; +const getChildType = (parentType) => { + switch (parentType) { + case "warehouse": + return "zone"; + case "zone": + return "area"; + case "area": + return "row"; + case "row": + return "bay"; + case "bay": + return "level"; + case "level": + case "sublevel": + return "sublevel"; + default: + throw new Error("Invalid model type"); + } +}; + module.exports = { createWarehouseSchema: async (req, res, next) => { try { @@ -369,7 +390,7 @@ module.exports = { break; } - let childrenData = await getChildModel(type).find(query); + let childrenData = await getLocationTypeModel(getChildType(type)).find(query); // populate locations to sublevel if (childrenData && ["level", "sublevel"].includes(type)) { @@ -387,4 +408,22 @@ module.exports = { next(error); } }, + deleteByIdAndLocationType: async (req, res, next) => { + const { id, type } = req.body; + let removedIDs; + try { + switch (type) { + case "sublevel": + removedIDs = await deleteSubLevelTreeFromRoot(id); + break; + + default: + removedIDs = await getLocationTypeModel(type).deleteOne({ _id: id }); + break; + } + res.send({ success: true, data: { removedIDs, deleted: { id, type } } }); + } catch (error) { + next(error); + } + }, }; diff --git a/src/controller/dashboard.router.js b/src/controller/dashboard.router.js index 91a5945..a9a123a 100644 --- a/src/controller/dashboard.router.js +++ b/src/controller/dashboard.router.js @@ -16,4 +16,9 @@ router.post("/create-inventory-schema", controller.createInventorySchema); */ router.post("/get-children-from-parent", controller.getChildrenFromParent); +/** + * @route /dashboard/location + */ +router.post("/delete-location", controller.deleteByIdAndLocationType); + module.exports = router;