diff --git a/app.js b/app.js index b76b028..2e40539 100644 --- a/app.js +++ b/app.js @@ -37,6 +37,8 @@ import StateRouter from "./resources/setting/state/state_routes.js"; import LanguageRoute from "./resources/setting/Language/language_routes.js"; //purpose import PurposeRoute from "./resources/setting/Purpose/Purpose_routes.js"; +// Design Router +import designRoute from "./resources/Design/designRouter.js"; // category Route import categoryRoute from "./resources/Category/categoryRoutes.js"; import ContentRoute from "./resources/Content/ContentRoutes.js"; @@ -59,6 +61,8 @@ app.use("/api/v1/", user); app.use("/api", ProductRouter); //businesses // app.use("/api/businesses", BusinessRoute); +// Design +app.use("/api/design", designRoute); // Category app.use("/api/category", categoryRoute); // Content diff --git a/resources/Design/designController.js b/resources/Design/designController.js new file mode 100644 index 0000000..6216102 --- /dev/null +++ b/resources/Design/designController.js @@ -0,0 +1,151 @@ +import mongoose from "mongoose"; + +import cloudinary from "../../Utils/cloudinary.js"; +import { DesignModel } from "./designModel.js"; + +// Add new Category +export const addDesign = async (req, res) => { + const { designName } = req.body; + const { designImage } = req.files; + // console.log(categoryName, categoryImage); + + if (!req?.user) return res.status(400).json({ message: "please login !" }); + try { + if (!mongoose.Types.ObjectId.isValid(req.user._id)) { + return res.status(400).json({ message: "please login again " }); + } + const result = await cloudinary.v2.uploader.upload( + designImage.tempFilePath, + { + folder: "jatinMor/design", + } + ); + + if (result) { + const design = await DesignModel.create({ + designName, + designImage: result, + addedBy: req.user._id, + }); + if (design) { + return res + .status(201) + .json({ success: true, design, message: "design Added" }); + } + } + } catch (error) { + res.status(500).json({ + success: false, + message: error.message ? error.message : "Something went Wrong", + }); + } +}; + +export const getDesign = async (req, res) => { + try { + if (!req?.user) return res.status(400).json({ message: "please login !" }); + const designs = await DesignModel.find({ addedBy: req.user._id }).sort({ + createdAt: -1, + }); + + if (!designs) { + return res.status(404).json({ message: "No design found" }); + } + + res.status(200).json({ success: true, designs }); + } catch (error) { + res.status(500).json({ + success: false, + message: error.message ? error.message : "Something went wrong", + }); + } +}; + +export const updateDesign = async (req, res) => { + try { + if (!req?.user) return res.status(400).json({ message: "please login !" }); + const { _id } = req.params; + const { designName } = req.body; + const olderImage = req.body?.olderImage; + const designImage = req.files?.designImage; + + if (!mongoose.Types.ObjectId.isValid(_id)) { + return res.status(404).json({ error: "Can not find the document " }); + } + + // find the document with the id to delete the image from cloudinary + if (JSON.parse(olderImage).length == 0) { + const deletefromCloudinary = await DesignModel.findOne({ _id: _id }); + + const deleteresponse = await cloudinary.v2.uploader.destroy( + deletefromCloudinary.designImage.public_id + ); + if (deleteresponse) { + const result = await cloudinary.v2.uploader.upload( + designImage.tempFilePath, + { + folder: "jatinMor/design", + } + ); + const update = await DesignModel.findOneAndUpdate( + { _id: _id }, + { designName: designName, designImage: result }, // Provide the updated categoryName + { new: true } // To return the updated document + ); + if (!update) { + return res + .status(404) + .json({ message: "Can not update document, something went wrong" }); + } else { + return res.status(200).json({ success: true, update }); + } + } + } else { + const update = await DesignModel.findOneAndUpdate( + { _id: _id }, + { designName: designName, designImage: JSON.parse(olderImage) }, // Provide the updated categoryName + { new: true } // To return the updated document + ); + if (update) { + return res.status(200).json({ success: true, update }); + } + } + } catch (error) { + res.status(500).json({ + success: false, + message: error.message ? error.message : "Something went wrong", + }); + } +}; + +export const deleteDesign = async (req, res) => { + try { + if (!req?.user) return res.status(400).json({ message: "please login !" }); + const { _id } = req.params; + if (!mongoose.Types.ObjectId.isValid(_id)) { + return res.status(404).json({ error: "Can not find the document " }); + } + + const deletefromCloudinary = await DesignModel.findOne({ _id: _id }); + + const deleteresponse = await cloudinary.v2.uploader.destroy( + deletefromCloudinary.designImage.public_id + ); + if (deleteresponse) { + const deleteDesign = await DesignModel.findOneAndDelete({ _id: _id }); + if (!deleteDesign) { + return res.status(404).json({ + error: "Can not find the document with the provided id to delete ", + }); + } + res.status(200).json({ success: true, deleteDesign }); + } else { + return res.status(404).json({ error: "can not delete the design " }); + } + } catch (error) { + res.status(500).json({ + success: false, + message: error.message ? error.message : "Something went wrong", + }); + } +}; diff --git a/resources/Design/designModel.js b/resources/Design/designModel.js new file mode 100644 index 0000000..0d0f034 --- /dev/null +++ b/resources/Design/designModel.js @@ -0,0 +1,19 @@ +import mongoose from "mongoose"; + +const DesignSchema = new mongoose.Schema( + { + designName: { + type: String, + required: [true, "Name of desing required "], + }, + designImage: {}, + addedBy: { + type: mongoose.Schema.ObjectId, + ref: "User", + required: true, + }, + }, + { timestamps: true } +); + +export const DesignModel = mongoose.model("DesignModel", DesignSchema); diff --git a/resources/Design/designRouter.js b/resources/Design/designRouter.js new file mode 100644 index 0000000..c8f1f16 --- /dev/null +++ b/resources/Design/designRouter.js @@ -0,0 +1,25 @@ +import express from "express"; +import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js"; + +import { + addDesign, + deleteDesign, + getDesign, + updateDesign, +} from "./designController.js"; +const router = express.Router(); + +router + .route("/add") + .post(isAuthenticatedUser, authorizeRoles("admin"), addDesign); +router + .route("/getDesigns") + .get(isAuthenticatedUser, authorizeRoles("admin"), getDesign); +router + .route("/update/:_id") + .patch(isAuthenticatedUser, authorizeRoles("admin"), updateDesign); +router + .route("/delete/:_id") + .delete(isAuthenticatedUser, authorizeRoles("admin"), deleteDesign); + +export default router;