api/resources/Design/designController.js
2023-11-16 10:50:25 +05:30

308 lines
9.1 KiB
JavaScript

import mongoose from "mongoose";
import cloudinary from "../../Utils/cloudinary.js";
import { DesignModel } from "./designModel.js";
import multer from "multer";
import path from "path";
import fs from "fs/promises";
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
import { fileURLToPath } from "url";
const imageStorage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "public/uploades");
},
filename: function (req, file, cb) {
cb(null, file.originalname);
},
});
const imageUpload = multer({ storage: imageStorage }).any();
// const jsonUpload = multer({ storage: jsonStorage }).fields([
// { name: "designImageJson", maxCount: 1 },
// ]);
// Add new Category
// export const addDesign = async (req, res) => {
// const { designName, categoryName } = req.body;
// const { designImage } = req.files;
// const { designImageJson } = req.body;
// // 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,
// categoryName,
// designImage: result,
// designImageJson: JSON.parse(designImageJson),
// 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 addDesign = (req, res) => {
// const { designName, categoryName } = req.body;
// const { designImage, designImageJson } = req.files;
// const { designImageJson } = req.body;
// console.log(designImage, designImageJson);
// console.log(categoryName, designImage);
imageUpload(req, res, async (imageErr) => {
// jsonUpload(req, res, async (jsonErr) => {
if (imageErr) {
console.log(imageErr);
return res.status(500).json({
success: false,
message: "Error uploading files",
});
}
const { designName, categoryName } = req.body;
if (!req?.user) return res.status(400).json({ message: "please login !" });
try {
// Retrieve the uploaded image and JSON file information
const designImage = req.files[0];
const designImageJson = req.files[1];
console.log("designImage", designImage, "json", designImageJson);
// Create a new design in the database
console.log("came here");
const design = await DesignModel.create({
designName,
categoryName,
designImage: {
filename: designImage.filename,
path: designImage.path,
},
designImageJson: {
filename: designImageJson.filename,
path: designImageJson.path,
// Add any other necessary information from the JSON file
},
addedBy: req.user._id,
});
console.log("design", design);
if (design) {
return res.status(201).json({
success: true,
design,
message: "Design added successfully",
});
}
} 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().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, categoryName } = req.body;
const olderImage = req.body?.olderImage;
const designImage = req.files?.designImage;
const { designImageJson } = req.body;
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,
categoryName: categoryName,
designImage: result,
designImageJson: JSON.parse(designImageJson),
}, // 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,
categoryName: categoryName,
designImage: JSON.parse(olderImage),
designImageJson: designImageJson,
}, // 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",
// });
// }
// };
// import imagepath from "../../public/uploades";
export const deleteDesign = async (req, res) => {
const { _id } = req.params;
const {
designImageFilename,
designImagePath,
designImageJsonFilename,
designImageJsonPath,
} = req.body;
try {
// Construct absolute paths for the files
const imagePath = path.join(__dirname, "../../", designImagePath);
const jsonPath = path.join(
__dirname,
"../../",
designImageJsonPath
// designImageJsonFilename
);
// Check if the files exist before attempting deletion
const imageExists = await fs
.access(imagePath)
.then(() => true)
.catch(() => false);
const jsonExists = await fs
.access(jsonPath)
.then(() => true)
.catch(() => false);
if (imageExists) {
await fs.unlink(imagePath);
} else {
console.error(`Image file not found at path: ${imagePath}`);
}
if (jsonExists) {
await fs.unlink(jsonPath);
} else {
console.error(`JSON file not found at path: ${jsonPath}`);
}
const deleteDesign = await DesignModel.findOneAndDelete({ _id });
if (!deleteDesign) {
return res.status(404).json({
error: "Cannot find the document with the provided id to delete",
});
}
res.status(200).json({ success: true, deleteDesign });
} catch (error) {
console.error(error);
res.status(500).json({
success: false,
message: error.message ? error.message : "Something went wrong",
});
}
};