diff --git a/backend/controllers/cartController.js b/backend/controllers/cartController.js index c5865b9..3e447f9 100644 --- a/backend/controllers/cartController.js +++ b/backend/controllers/cartController.js @@ -6,7 +6,7 @@ const addToCart = async (req, res) => { const productId = req.params.product; const { type } = req.body; - if (!userId || !productId) { + if (!userId || !productId || !type) { return res.status(400).json({ error: "Error al añadir producto" }); } @@ -42,20 +42,34 @@ const removeFromCart = async (req, res) => { try { const userId = req.params.userid; const productId = req.params.product; - const { type } = req.body; + const { type } = req.query; + + if (!userId || !productId || !type) { + return res.status(400).json({ error: "Error al añadir producto" }); + } + + let cart = await Cart.findOne({ userId }); + + if (!cart) { + return res.status(404).json({ error: "Carrito no encontrado" }); + } - const cart = await Cart.findOne({ userId }); + let productIndex = cart.products.findIndex( + (item) => item.product.toString() === productId && item.type === type + ); - const productInCart = cart.products.find((item) => { - item.product.toString() === productId && item.type === type; - }); + if (productIndex === -1) { + return res + .status(404) + .json({ error: "Producto no encontrado en el carrito" }); + } + + let productInCart = cart.products[productIndex]; - if (productInCart && productInCart.quantity > 1) { + if (productInCart.quantity > 1) { productInCart.quantity -= 1; - } else if (productInCart.quantity <= 1) { - productInCart.deleteOne(); } else { - return res.json({ error: "No se ha podido eliminar el producto" }); + cart.products.splice(productIndex, 1); } await cart.save(); @@ -84,13 +98,9 @@ const getCartProducts = async (req, res) => { const removeAllProducts = async (req, res) => { try { const userId = req.params.userid; - const cart = await Cart.findOne({ userId: userId }); + await Cart.findOneAndDelete({ userId }); - if (cart) { - cart.products = []; - await cart.save(); - res.status(200).json({ message: "Carrito eliminado" }); - } + return res.status(200).json({ message: "Carrito eliminado" }); } catch (error) { res.status(500).json({ error: "Error al borrar el carrito" }); } diff --git a/backend/controllers/orderController.js b/backend/controllers/orderController.js index 4341113..8482885 100644 --- a/backend/controllers/orderController.js +++ b/backend/controllers/orderController.js @@ -29,9 +29,9 @@ const checkoutOrder = async (req, res) => { const registerOrder = async (req, res) => { try { const userId = req.params.userid; - const products = req.body.products; + const { products, totalPrice, itemsQuantity } = req.body; - if (!userId || !products || !products.length) { + if (!userId || !products || !products.length || !totalPrice) { return res.status(400).json({ error: "Faltan datos necesarios para realizar el pedido", }); @@ -42,7 +42,10 @@ const registerOrder = async (req, res) => { items: products.map((product) => ({ product: product.productId, quantity: product.quantity, + type: product.type, })), + totalPrice: totalPrice, + itemsQuantity: itemsQuantity, }); await newOrder.save(); @@ -59,7 +62,28 @@ const getOrders = async (req, res) => { if (orders) { return res.json(orders); } - } catch (error) {} + } catch (error) { + console.log(error); + } +}; + +const changeOrderState = async (req, res) => { + try { + const orderId = req.params.orderid; + const { orderState } = req.body; + + const order = await Order.findById(orderId); + + if (order) { + order.status = orderState; + await order.save(); + return res.status(200).json({ message: "Estado cambiado" }); + } else { + return res.json({ error: "No se ha encontrado ningún pedido" }); + } + } catch (error) { + console.error("Change order state: ", error); + } }; -module.exports = { checkoutOrder, registerOrder, getOrders }; +module.exports = { checkoutOrder, registerOrder, getOrders, changeOrderState }; diff --git a/backend/controllers/userController.js b/backend/controllers/userController.js index 294d792..84ab52d 100644 --- a/backend/controllers/userController.js +++ b/backend/controllers/userController.js @@ -96,7 +96,7 @@ const getShippingAddress = async (req, res) => { const getUser = async (req, res) => { try { - const userId = req.params.userid; + const userId = req.params.id; const user = await User.findById(userId); if (user) { diff --git a/backend/models/orderModel.js b/backend/models/orderModel.js index 9f6e233..77d9b78 100644 --- a/backend/models/orderModel.js +++ b/backend/models/orderModel.js @@ -29,6 +29,9 @@ const orderSchema = new Schema( totalPrice: { type: Number, }, + itemsQuantity: { + type: Number, + }, }, { timestamps: true } ); diff --git a/backend/routes/cartRoutes.js b/backend/routes/cartRoutes.js index dab3764..8149211 100644 --- a/backend/routes/cartRoutes.js +++ b/backend/routes/cartRoutes.js @@ -1,10 +1,15 @@ const express = require("express"); const router = express.Router(); -const { addToCart, removeFromCart, getCartProducts, removeAllProducts } = require("../controllers/cartController") +const { + addToCart, + removeFromCart, + getCartProducts, + removeAllProducts, +} = require("../controllers/cartController"); router.post("/add-to-cart/:userid/:product", addToCart); -router.delete("/remove-from-cart/:userid/:product", removeFromCart) -router.get("/get-cart-products/:userid", getCartProducts) -router.delete("/remove-all-cart/:userid", removeAllProducts) +router.delete("/remove-from-cart/:userid/:product", removeFromCart); +router.get("/get-cart-products/:userid", getCartProducts); +router.delete("/remove-all-cart/:userid", removeAllProducts); -module.exports = router \ No newline at end of file +module.exports = router; diff --git a/backend/routes/orderRoutes.js b/backend/routes/orderRoutes.js index bc37163..fc06cc6 100644 --- a/backend/routes/orderRoutes.js +++ b/backend/routes/orderRoutes.js @@ -4,10 +4,12 @@ const { checkoutOrder, registerOrder, getOrders, + changeOrderState, } = require("../controllers/orderController"); router.post("/checkout-order", checkoutOrder); router.post("/register-order/:userid", registerOrder); router.get("/get-orders", getOrders); +router.post("/change-order-state/:orderid", changeOrderState); module.exports = router; diff --git a/frontend/src/components/ShopMenuComponent.jsx b/frontend/src/components/ShopMenuComponent.jsx index ec8410c..4352491 100644 --- a/frontend/src/components/ShopMenuComponent.jsx +++ b/frontend/src/components/ShopMenuComponent.jsx @@ -1,20 +1,25 @@ import { Link } from "react-router-dom"; -import { memo } from "react"; +import { memo, useState } from "react"; const ShopMenuComponent = (props) => { + const [menuOpen, setMenuOpen] = useState(false); + return (