diff --git a/src/controller/warehouse.controller.js b/src/controller/warehouse.controller.js index 53e27e9..6e819bb 100644 --- a/src/controller/warehouse.controller.js +++ b/src/controller/warehouse.controller.js @@ -1,5 +1,6 @@ const Warehouse = require("../models/Warehouse"); const mongoose = require("mongoose"); +const { S3 } = require("./../config/aws"); module.exports = { /** @@ -49,6 +50,18 @@ module.exports = { res.status(404).send({ success: false, message: "not found" }); return; } + + const images = req.files; + + for (let i = 0; i < images.length; i++) { + const url = await S3.uploadFile( + `warehouse/${warehouseData._id.toString()}-${Date.now()}-${i}.${images[i].originalname.split(".").slice(-1).pop()}`, + images[i].path + ); + warehouseData.images ||= []; + warehouseData.images.push({ url }); + } + warehouseData.save(); res.send({ success: true, message: warehouseData }); } catch (error) { next(error); @@ -144,4 +157,48 @@ module.exports = { next(error); } }, + addImageToWarehouse: async (req, res, next) => { + const { id } = req.params; + if (!mongoose.isValidObjectId(id)) { + res.status(400).send({ success: false, error: "invalid id" }); + } + + const warehouse = await Warehouse.findById(id); + if (!warehouse) { + res.status(404).send({ success: false, error: "warehouse not found" }); + } + + const image = req.file; + const url = await S3.uploadFile( + `warehouse/${warehouse._id.toString()}-${Date.now()}-0.${image.originalname.split(".").slice(-1).pop()}`, + image.path + ); + warehouse.images ||= []; + warehouse.images.push({ url }); + await warehouse.save(); + + res.send({ success: true, data: warehouse }); + }, + + removeImageFromWarehouse: async (req, res, next) => { + const { id, image_id } = req.params; + if (!mongoose.isValidObjectId(id)) { + res.status(400).send({ success: false, error: "invalid id" }); + } + if (!mongoose.isValidObjectId(image_id)) { + res.status(400).send({ success: false, error: "invalid image_id" }); + } + + const warehouse = await Warehouse.findById(id); + if (!warehouse) { + res.status(404).send({ success: false, error: "warehouse not found" }); + } + + warehouse.images = warehouse.images.filter((warehouseImage) => { + return warehouseImage._id.toString() != image_id; + }); + + await warehouse.save(); + res.send({ success: true, data: warehouse }); + }, }; diff --git a/src/controller/warehouse.router.js b/src/controller/warehouse.router.js index 776121a..7fbca01 100644 --- a/src/controller/warehouse.router.js +++ b/src/controller/warehouse.router.js @@ -20,7 +20,18 @@ router.get("/:id/zones", controller.getWarehouseZonesByID); /** * @route /warehouse/ */ -router.post("/", controller.createWarehouse); +router.post("/", upload.any("images"), controller.createWarehouse); + +/** + * @route /warehouse/:id/image + */ +router.post("/:id/image", upload.single("image"), controller.addImageToWarehouse); + +/** + * @route /warehouse/:id/image/:image_id + */ +router.delete("/:id/image/:image_id", controller.removeImageFromWarehouse); + /** * @route /warehouse/add-image diff --git a/src/models/Warehouse.js b/src/models/Warehouse.js index 519fa84..6ed6b9d 100644 --- a/src/models/Warehouse.js +++ b/src/models/Warehouse.js @@ -1,5 +1,12 @@ const mongoose = require("mongoose"); +const WarehouseImage = new mongoose.Schema({ + url: { + type: String, + trim: true, + }, +}); + const schema = new mongoose.Schema( { name: { @@ -16,6 +23,7 @@ const schema = new mongoose.Schema( type: String, trim: true, }, + images: [WarehouseImage], company_id: { type: mongoose.Schema.Types.ObjectId, ref: "Company",