api/resources/ProductMannual/ProductManualController.js
2024-08-27 21:54:20 +05:30

233 lines
6.1 KiB
JavaScript

import ProductManual from "./ProductManualModel.js";
import cloudinary from "../../Utils/cloudinary.js";
import path from "path";
// Create a new product manual
export const createProductManual = async (req, res) => {
const { title } = req.body;
const pdfFile = req.files ? req.files.pdfFile : null;
// Check if title is provided
if (!title) {
return res.status(400).json({
success: false,
message: "Title is required",
});
}
// Check if a file is provided
if (!pdfFile) {
return res.status(400).json({
success: false,
message: "File is required",
});
}
try {
let productManualDetails = null;
let filename = "";
// Upload the file to Cloudinary
if (pdfFile) {
filename = pdfFile.name;
// console.log(pdfFile);
const originalFilename = path.basename(pdfFile.name, path.extname(pdfFile.name));
const result = await cloudinary.v2.uploader.upload(pdfFile.tempFilePath, {
folder: "chemiNova/ProductManuals",
public_id: originalFilename,
});
// console.log(result);
productManualDetails = {
public_id: result.public_id,
url: result.secure_url,
filename: filename,
};
}
// Create the product manual
const productManual = await ProductManual.create({
title,
product_manual: productManualDetails || {}, // Ensure product_manual is an empty object if no file is provided
});
res.status(201).json({
success: true,
productManual,
message: "Product manual created successfully",
});
} catch (error) {
console.error("Error creating product manual:", error);
res.status(500).json({
success: false,
message: error.message || "Internal server error",
});
}
};
// Get all product manuals
export const getAllProductManuals = async (req, res) => {
try {
const PAGE_SIZE = parseInt(req.query.show) || 10;
const page = parseInt(req.query.page) || 1;
const skip = (page - 1) * PAGE_SIZE;
let filter = {};
if (req.query.title) {
filter.title = {
$regex: new RegExp(req.query.title, "i"),
};
}
// Fetch total count of documents
const total = await ProductManual.countDocuments(filter);
// Fetch paginated data
const productManuals = await ProductManual.find(filter)
.limit(PAGE_SIZE)
.skip(skip)
.sort({ createdAt: -1 })
.exec();
// Send response
res.status(200).json({
success: true,
productManuals,
total,
});
} catch (error) {
console.error("Error fetching product manuals:", error);
res.status(500).json({
success: false,
message: error.message || "Internal server error",
});
}
};
// Get a single product manual by ID
export const getSingleProductManual = async (req, res) => {
const { id } = req.params;
try {
const productManual = await ProductManual.findById(id);
if (!productManual) {
return res.status(404).json({
success: false,
message: "Product manual not found",
});
}
res.status(200).json({
success: true,
productManual,
});
} catch (error) {
console.error("Error fetching product manual:", error);
res.status(500).json({
success: false,
message: error.message || "Internal server error",
});
}
};
// Update a product manual
export const updateProductManual = async (req, res) => {
const { id } = req.params;
const { title } = req.body;
try {
const productManual = await ProductManual.findById(id);
if (!productManual) {
return res.status(404).json({
success: false,
message: "Product manual not found",
});
}
let filename = "";
// Check if a new file is provided
if (req.files && req.files.pdfFile) {
// Delete the old file from Cloudinary
if (productManual.product_manual.public_id) {
await cloudinary.v2.uploader.destroy(
productManual.product_manual.public_id,
{
folder: "chemiNova/ProductManuals",
}
);
}
// Upload the new file to Cloudinary
const pdfFile = req.files.pdfFile;
// console.log(pdfFile);
filename = pdfFile.name;
const originalFilename = path.basename(pdfFile.name, path.extname(pdfFile.name));
const result = await cloudinary.v2.uploader.upload(pdfFile.tempFilePath, {
folder: "chemiNova/ProductManuals",
public_id: originalFilename,
});
// console.log(result);
// Update the product manual details
productManual.product_manual = {
public_id: result.public_id,
url: result.secure_url,
filename: filename,
};
}
// Update the title
productManual.title = title || productManual.title;
// console.log(productManual);
await productManual.save();
res.status(200).json({
success: true,
productManual,
message: "Product manual updated successfully",
});
} catch (error) {
console.error("Error updating product manual:", error);
res.status(500).json({
success: false,
message: error.message || "Internal server error",
});
}
};
// Delete a product manual
export const deleteProductManual = async (req, res) => {
const { id } = req.params;
try {
const productManual = await ProductManual.findById(id);
if (!productManual) {
return res.status(404).json({
success: false,
message: "Product manual not found",
});
}
// Delete the file from Cloudinary
if (productManual.product_manual.public_id) {
await cloudinary.v2.uploader.destroy(
productManual.product_manual.public_id,
{
folder: "chemiNova/ProductManuals",
});
}
// Delete the product manual from the database
await ProductManual.findByIdAndDelete(id);
res.status(200).json({
success: true,
message: "Product manual deleted successfully",
});
} catch (error) {
console.error("Error deleting product manual:", error);
res.status(500).json({
success: false,
message: error.message || "Internal server error",
});
}
};