|
|
|
const Product = require("../model/Product")
|
|
|
|
|
|
|
|
exports.createProduct = async (req, res) => {
|
|
|
|
try {
|
|
|
|
const { name, description, price } = req.body
|
|
|
|
|
|
|
|
const newProduct = new Product({ name, description, price })
|
|
|
|
await newProduct.save()
|
|
|
|
res.status(201).json(newProduct)
|
|
|
|
} catch (error) {
|
|
|
|
res.status(500).json({ error: error.message })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Controller function for retrieving all products (accessible to both admin and normal user)
|
|
|
|
exports.getAllProducts = async (req, res) => {
|
|
|
|
try {
|
|
|
|
const products = await Product.find()
|
|
|
|
|
|
|
|
res.status(200).json(products)
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error)
|
|
|
|
res.status(500).json({ message: "Internal server error" })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Controller function for retrieving all active products (accessible to both admin and normal user)
|
|
|
|
exports.getActiveProducts = async (req, res) => {
|
|
|
|
try {
|
|
|
|
const activeProducts = await Product.find({ isActive: true })
|
|
|
|
|
|
|
|
res.status(200).json(activeProducts)
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error)
|
|
|
|
res.status(500).json({ message: "Internal server error" })
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Controller to retrieve a single product by id
|
|
|
|
exports.getProductById = async (req, res) => {
|
|
|
|
const productId = req.params.id;
|
|
|
|
|
|
|
|
try {
|
|
|
|
const product = await Product.findById(productId);
|
|
|
|
|
|
|
|
if (!product) {
|
|
|
|
return res.status(404).json({ message: 'Product not found' });
|
|
|
|
}
|
|
|
|
|
|
|
|
res.status(200).json(product);
|
|
|
|
} catch (error) {
|
|
|
|
res.status(500).json({ message: 'Internal server error' });
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// Controller function to update product information
|
|
|
|
exports.updateProduct = async (req, res) => {
|
|
|
|
const productId = req.params.id;
|
|
|
|
const { name, description, price, isActive } = req.body;
|
|
|
|
|
|
|
|
try {
|
|
|
|
// Check if the product exists
|
|
|
|
const existingProduct = await Product.findById(productId);
|
|
|
|
if (!existingProduct) {
|
|
|
|
return res.status(404).json({ message: 'Product not found' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Update product information
|
|
|
|
existingProduct.name = name;
|
|
|
|
existingProduct.description = description;
|
|
|
|
existingProduct.price = price;
|
|
|
|
existingProduct.isActive = isActive;
|
|
|
|
|
|
|
|
// Save the updated product
|
|
|
|
const updatedProduct = await existingProduct.save();
|
|
|
|
|
|
|
|
res.status(200).json(updatedProduct);
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
res.status(500).json({ message: 'Internal Server Error' });
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.activateProduct = async (req, res) => {
|
|
|
|
const { productId } = req.params;
|
|
|
|
|
|
|
|
try {
|
|
|
|
// Find the product by ID
|
|
|
|
const product = await Product.findById(productId);
|
|
|
|
|
|
|
|
if (!product) {
|
|
|
|
return res.status(404).json({ message: 'Product not found' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if the product is already active
|
|
|
|
if (product.isActive) {
|
|
|
|
return res.status(400).json({ message: 'Product is already active' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Activate the product
|
|
|
|
product.isActive = true;
|
|
|
|
|
|
|
|
// Save the updated product
|
|
|
|
await product.save();
|
|
|
|
|
|
|
|
res.json({ message: 'Product activated successfully', product });
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
res.status(500).json({ message: 'Internal Server Error' });
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
exports.archiveProduct = async (req, res) => {
|
|
|
|
const { productId } = req.params;
|
|
|
|
|
|
|
|
try {
|
|
|
|
// Find the product by ID
|
|
|
|
const product = await Product.findById(productId);
|
|
|
|
|
|
|
|
if (!product) {
|
|
|
|
return res.status(404).json({ message: 'Product not found' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check if the product is already active
|
|
|
|
if (!product.isActive) {
|
|
|
|
return res.status(400).json({ message: 'Product is already in Archive' });
|
|
|
|
}
|
|
|
|
|
|
|
|
// Activate the product
|
|
|
|
product.isActive = false;
|
|
|
|
|
|
|
|
// Save the updated product
|
|
|
|
await product.save();
|
|
|
|
|
|
|
|
res.json({ message: 'Product successfuly archived', product });
|
|
|
|
} catch (error) {
|
|
|
|
console.error(error);
|
|
|
|
res.status(500).json({ message: 'Internal Server Error' });
|
|
|
|
}
|
|
|
|
};
|