Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
129 changes: 86 additions & 43 deletions backend/src/controllers/product.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,60 +2,103 @@ import { Request, Response } from "express";
import Product from "../models/product.model";

export const createProduct = async (req: Request, res: Response) => {
try {
const { name, description, price, category, stock } = req.body;

if (!name || !description || !price) {
return res.status(400).json({ message: "Missing required fields" });
}

const product = await Product.create({ name, description, price, category, stock });
return res.status(201).json(product);
} catch (error) {
console.error("Create Product Error:", error);
res.status(500).json({ message: "Server error" });
try {
const { name, description, price, category, stock } = req.body;

if (!name || !description || !price) {
return res.status(400).json({ message: "Missing required fields" });
}

const product = await Product.create({
name,
description,
price,
category,
stock,
});
return res.status(201).json(product);
} catch (error) {
console.error("Create Product Error:", error);
res.status(500).json({ message: "Server error" });
}
};

export const getProducts = async (_req: Request, res: Response) => {
try {
const products = await Product.find().sort({ createdAt: -1 });
res.status(200).json(products);
} catch (error) {
console.error("Get Products Error:", error);
res.status(500).json({ message: "Server error" });
export const getProducts = async (req: Request, res: Response) => {
try {
const { search, category, minPrice, maxPrice, sort } = req.query;

const query: any = {};

// 🔍 Search by name or description
if (search) {
query.$or = [
{ name: { $regex: search, $options: "i" } },
{ description: { $regex: search, $options: "i" } },
];
}

// 🏷️ Filter by category
if (category && category !== "all") {
query.category = category;
}

// 💰 Filter by price range
if (minPrice || maxPrice) {
query.price = {};
if (minPrice) query.price.$gte = Number(minPrice);
if (maxPrice) query.price.$lte = Number(maxPrice);
}

// 🧾 Build base query
let mongoQuery = Product.find(query);

// 📊 Sorting
if (sort === "asc" || sort === "lowToHigh")
mongoQuery = mongoQuery.sort({ price: 1 });
else if (sort === "desc" || sort === "highToLow")
mongoQuery = mongoQuery.sort({ price: -1 });
else mongoQuery = mongoQuery.sort({ createdAt: -1 });

const products = await mongoQuery;

res.status(200).json(products);
} catch (error) {
console.error("Get Products Error:", error);
res.status(500).json({ message: "Server error" });
}
};

export const getProductById = async (req: Request, res: Response) => {
try {
const product = await Product.findById(req.params.id);
if (!product) return res.status(404).json({ message: "Product not found" });
res.status(200).json(product);
} catch (error) {
console.error("Get Product Error:", error);
res.status(500).json({ message: "Server error" });
}
try {
const product = await Product.findById(req.params.id);
if (!product) return res.status(404).json({ message: "Product not found" });
res.status(200).json(product);
} catch (error) {
console.error("Get Product Error:", error);
res.status(500).json({ message: "Server error" });
}
};

export const updateProduct = async (req: Request, res: Response) => {
try {
const product = await Product.findByIdAndUpdate(req.params.id, req.body, { new: true });
if (!product) return res.status(404).json({ message: "Product not found" });
res.status(200).json(product);
} catch (error) {
console.error("Update Product Error:", error);
res.status(500).json({ message: "Server error" });
}
try {
const product = await Product.findByIdAndUpdate(req.params.id, req.body, {
new: true,
});
if (!product) return res.status(404).json({ message: "Product not found" });
res.status(200).json(product);
} catch (error) {
console.error("Update Product Error:", error);
res.status(500).json({ message: "Server error" });
}
};

export const deleteProduct = async (req: Request, res: Response) => {
try {
const product = await Product.findByIdAndDelete(req.params.id);
if (!product) return res.status(404).json({ message: "Product not found" });
res.status(200).json({ message: "Product deleted successfully" });
} catch (error) {
console.error("Delete Product Error:", error);
res.status(500).json({ message: "Server error" });
}
try {
const product = await Product.findByIdAndDelete(req.params.id);
if (!product) return res.status(404).json({ message: "Product not found" });
res.status(200).json({ message: "Product deleted successfully" });
} catch (error) {
console.error("Delete Product Error:", error);
res.status(500).json({ message: "Server error" });
}
};
Loading
Loading