Files
plaidware-wms-core/src/controller/warehouse.controller.js
2022-02-09 19:17:16 +05:30

148 lines
3.7 KiB
JavaScript

const Warehouse = require("../models/Warehouse");
const mongoose = require("mongoose");
module.exports = {
/**
* Gets the warehouse data by `id`
*/
getWarehouseByID: async (req, res, next) => {
const { id } = req.params;
if (!id) {
res.status(400).send({ success: false, message: "Missing id param" });
return;
}
try {
const warehouseData = await Warehouse.findById(id);
if (!warehouseData) {
res.status(404).send({ success: false, message: "not found" });
return;
}
res.send({ success: true, data: warehouseData });
} catch (error) {
next(error);
}
},
/**
* Create a warehouse
*/
createWarehouse: async (req, res, next) => {
const { name, address, specs, company_id } = req.body;
if (!(name && address)) {
res.status(400).send("Missing params param");
return;
}
try {
const warehouseData = new Warehouse({
name,
address,
specs,
company_id: mongoose.Types.ObjectId(company_id),
});
await warehouseData.save();
if (!warehouseData) {
res.status(404).send({ success: false, message: "not found" });
return;
}
res.send({ success: true, message: warehouseData });
} catch (error) {
next(error);
}
},
/**
* Upload an image for the warehouse
*/
addWarehouseImage: async (req, res, next) => {
console.dir("Warehouse image uploaded:", { file: req.file });
const { id } = req.params;
try {
const warehouseDetails = await Warehouse.findById(id);
if (!warehouseDetails) {
res.send({ success: false, message: "ID not found" });
return;
}
warehouseDetails.imageUrl = req.file.path;
await warehouseDetails.save();
res.send({ success: true, data: warehouseDetails });
} catch (err) {
next(err);
}
},
/**
* Update a warehouses detail
*/
updateWarehouseByID: async (req, res, next) => {
const { id } = req.params;
if (!id) {
res.status(400).send({ success: false, message: "Missing ID param" });
return;
}
const { name, address, specs, company_id } = req.body;
if (!(name || address || specs || company_id)) {
res.status(400).send({ success: false, message: "Missing data in body" });
return;
}
try {
const warehouseData = await Warehouse.findById(id);
if (!warehouseData) {
res.status(404).send({ success: false, message: "not found" });
return;
}
if (name) warehouseData.name = name;
if (address) warehouseData.address = address;
if (specs) warehouseData.specs = specs;
if (company_id) warehouseData.company_id = mongoose.Types.ObjectId(company_id);
await warehouseData.save();
res.send({ success: true, data: warehouseData });
} catch (error) {
next(error);
}
},
getAllWarehouse: async (req, res, next) => {
try {
const { getAllWithPagination } = require("./utils/pagination");
const { page, perPage } = req.query;
const data = await getAllWithPagination(Warehouse, page, perPage);
res.send({ success: true, data: data });
} catch (error) {
next(error);
}
},
getWarehouseZonesByID: async (req, res, next) => {
const { id } = req.params;
if (!id) {
res.status(400).send({ success: false, message: "Missing id param" });
return;
}
try {
const warehouseData = await Warehouse.findById(id).populate("zones");
if (!warehouseData) {
res.status(404).send({ success: false, message: "not found" });
return;
}
res.send({ success: true, data: warehouseData.zones });
} catch (error) {
next(error);
}
},
};