Capstone 2 update resources [readme.md] for details
parent
a7656ebf9e
commit
fa386ce7c8
@ -1,72 +1,109 @@
|
|||||||
// userController.js
|
const Cart = require('../model/Cart');
|
||||||
const User = require('../model/Cart');
|
|
||||||
|
|
||||||
exports.addToCart = async (req, res) => {
|
exports.addToCart = async (req, res) => {
|
||||||
|
const { userId } = req.body;
|
||||||
|
const { productId, quantity } = req.body;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const { userId, productId, quantity } = req.body;
|
let cart = await Cart.findOne({ userId });
|
||||||
|
|
||||||
// Check if the user exists
|
if (!cart) {
|
||||||
const user = await User.findById(userId);
|
cart = new Cart({
|
||||||
if (!user) {
|
userId,
|
||||||
return res.status(404).json({ message: 'User not found.' });
|
items: [{ productId, quantity }],
|
||||||
}
|
});
|
||||||
|
} else {
|
||||||
|
const existingItem = cart.items.find(item => item.productId.toString() === productId);
|
||||||
|
|
||||||
// Check if the product exists
|
if (existingItem) {
|
||||||
const product = await Product.findById(productId);
|
existingItem.quantity += quantity;
|
||||||
if (!product) {
|
} else {
|
||||||
return res.status(404).json({ message: 'Product not found.' });
|
cart.items.push({ productId, quantity });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the product is active
|
|
||||||
if (!product.isActive) {
|
|
||||||
return res.status(400).json({ message: 'Product is not active.' });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the quantity is valid
|
await cart.save();
|
||||||
if (quantity <= 0) {
|
|
||||||
return res.status(400).json({ message: 'Invalid quantity.' });
|
res.json({ message: 'Item added to cart successfully' });
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.updateQuantity = async (req, res) => {
|
||||||
|
const { userId, productId, quantity } = req.body;
|
||||||
|
|
||||||
// Check if the user already has a cart
|
try {
|
||||||
let cart = await Cart.findOne({ userId });
|
let cart = await Cart.findOne({ userId });
|
||||||
|
|
||||||
// If the user doesn't have a cart, create a new one
|
|
||||||
if (!cart) {
|
if (!cart) {
|
||||||
cart = new Cart({ userId, products: [], totalAmount: 0 });
|
return res.status(404).json({ error: 'Cart not found for the user' });
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the product is already in the cart
|
const existingItem = cart.items.find(item => item.productId.toString() === productId);
|
||||||
const existingProduct = cart.products.find(
|
|
||||||
(cartProduct) => cartProduct.productId.toString() === productId
|
|
||||||
);
|
|
||||||
|
|
||||||
// If the product is already in the cart, update the quantity and subtotal
|
if (!existingItem) {
|
||||||
if (existingProduct) {
|
return res.status(404).json({ error: 'Product not found in the cart' });
|
||||||
existingProduct.quantity += quantity;
|
}
|
||||||
existingProduct.subtotal = existingProduct.quantity * existingProduct.price;
|
|
||||||
} else {
|
existingItem.quantity = quantity;
|
||||||
// If the product is not in the cart, add it
|
|
||||||
cart.products.push({
|
await cart.save();
|
||||||
productId,
|
|
||||||
productName: product.name,
|
res.json({ message: 'Quantity updated successfully' });
|
||||||
quantity,
|
} catch (error) {
|
||||||
price: product.price,
|
console.error(error);
|
||||||
subtotal: quantity * product.price,
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// Update the total amount in the cart
|
exports.removeFromCart = async (req, res) => {
|
||||||
cart.totalAmount = cart.products.reduce(
|
const { userId, productId } = req.body;
|
||||||
(total, product) => total + product.subtotal,
|
|
||||||
0
|
try {
|
||||||
);
|
let cart = await Cart.findOne({ userId });
|
||||||
|
|
||||||
|
if (!cart) {
|
||||||
|
return res.status(404).json({ error: 'Cart not found for the user' });
|
||||||
|
}
|
||||||
|
|
||||||
|
cart.items = cart.items.filter(item => item.productId.toString() !== productId);
|
||||||
|
|
||||||
// Save the updated cart
|
|
||||||
await cart.save();
|
await cart.save();
|
||||||
|
|
||||||
return res.status(200).json({ message: 'Product added to cart successfully.' });
|
res.json({ message: 'Product removed from cart successfully' });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
console.error(error);
|
||||||
return res.status(500).json({ message: 'Internal server error.' });
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.getCartDetails = async (req, res) => {
|
||||||
|
const { userId } = req.body;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const cart = await Cart.findOne({ userId }).populate('items.productId', 'name price');
|
||||||
|
|
||||||
|
if (!cart) {
|
||||||
|
return res.status(404).json({ error: 'Cart not found for the user' });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate subtotal for each item
|
||||||
|
const itemsWithSubtotal = cart.items.map(item => ({
|
||||||
|
...item.toObject(),
|
||||||
|
subtotal: item.quantity * item.productId.price,
|
||||||
|
}));
|
||||||
|
|
||||||
|
// Calculate total price for all items
|
||||||
|
const totalPrice = itemsWithSubtotal.reduce((total, item) => total + item.subtotal, 0);
|
||||||
|
|
||||||
|
res.json({
|
||||||
|
items: itemsWithSubtotal,
|
||||||
|
totalPrice,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
@ -1,10 +1,20 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const cart = require('../controllers/cart');
|
const cartController = require('../controllers/cart');
|
||||||
const auth = require("../auth")
|
const auth = require("../auth");
|
||||||
|
|
||||||
const { authenticateToken, } = auth
|
const { authenticateToken } = auth;
|
||||||
// Add route to handle adding a product to the cart
|
|
||||||
router.post('/add-to-cart', authenticateToken, cart.addToCart);
|
// Route to add an item to the cart
|
||||||
|
router.post('/add-to-cart', authenticateToken, cartController.addToCart);
|
||||||
|
|
||||||
|
// Route to update product quantity in the cart
|
||||||
|
router.put('/update-quantity', authenticateToken, cartController.updateQuantity);
|
||||||
|
|
||||||
|
// Route to remove a product from the cart
|
||||||
|
router.delete('/remove-from-cart', authenticateToken, cartController.removeFromCart);
|
||||||
|
|
||||||
|
// Route to get cart details
|
||||||
|
router.get('/cart-details', authenticateToken, cartController.getCartDetails);
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
Loading…
Reference in New Issue