const express = require('express'); const router = express.Router(); const tools = require('../tools/general'); var server_constants = require('../tools/server_constants'); var { Project } = require('../models/project'); var { authenticate, auth_default } = require('../middleware/authenticate'); var mongoose = require('mongoose'); const Subscription = mongoose.model('subscribers'); const _ = require('lodash'); const { ObjectID } = require('mongodb'); const Product = require('../models/product'); const Order = require('../models/order'); const Variant = require('../models/variant'); /*const Department = require('../models/Department') const Category = require('../models/Category') const TypedError = require('../modules/ErrorHandler') const paypal_config = require('../configs/paypal-config') const paypal = require('paypal-rest-sdk') */ const CartClass = require('../modules/Cart') const Cart = require('../models/cart'); //GET cart router.get('/:userId', authenticate, function (req, res, next) { let userId = req.body.userId let idapp = req.body.idapp Cart.getCartByUserId(userId, idapp, function (err, cart) { if (err) return next(err) if (cart) res.send({ code: server_constants.RIS_CODE_OK, cart }); else res.status(400).send(e); }) }) //POST cart router.post('/:userId', authenticate, async function (req, res, next) { let idapp = req.body.idapp; let userId = req.params.userId; let addqty = req.body.addqty; let subqty = req.body.subqty; let order = req.body.order; const mycart = await Cart.getCartByUserId(userId, idapp); // const myorder = Order.getOrderByID(order._id); if (!addqty && !subqty) order._id = await Order.createOrder(order); let cart = null; // no cart save empty cart to database then return response let myqty = 0; if (!mycart) { let oldCart = new CartClass(order) cart = await Cart.createCart(oldCart.generateModel()); } else { let newCart = CartClass.constructByCart(mycart); if (addqty) { myqty = await newCart.addqty(order); } else if (subqty) { myqty = await newCart.subqty(order); } else { const ind = newCart.addItem(order); } cart = await Cart.updateCartByCartId(mycart._id, newCart.generateModel()); } if (cart) { const carttot = await Cart.getCartByUserId(userId, idapp); return res.send({ code: server_constants.RIS_CODE_OK, cart: carttot, qty: myqty }); } else { return res.send({ code: server_constants.RIS_CODE_ERR, cart: null }); } /* Cart.updateCartByUserId( userId, newCart, function (err, result) { if (err) return next(err) return res.status(200).json({ cart: result }) }) */ }) router.delete('/:userId', authenticate, async function (req, res) { console.log('DELETE Item'); let idapp = req.query.idapp; let userId = req.params.userId; let orderId = req.query.orderId; const mycart = await Cart.getCartByUserId(userId, idapp); // Rimuovere l'Ordine const recremoved = await Order.findByIdAndRemove(orderId); if (recremoved) { // Rimuovere l'id sul Carrello let newCart = CartClass.constructByCart(mycart); newCart.removeItem(orderId); let carttot = null; const cart = await Cart.updateCartByCartId(mycart._id, newCart.generateModel()); carttot = await Cart.getCartByUserId(userId, idapp); console.log('carttot', carttot) return res.send({ code: server_constants.RIS_CODE_OK, cart: carttot }); } return res.send({ code: server_constants.RIS_CODE_ERR, cart: null }); }); //PUT cart router.put('/:userId', authenticate, function (req, res, next) { let userId = req.params.userId let requestProduct = req.body let { productId, color, size } = requestProduct.product Cart.getCartByUserId(userId, function (err, c) { if (err) return next(err) let oldCart = new CartClass(c[0] || {}) Product.getProductByID(productId, function (err, p) { if (err) return next(err) let newCart = oldCart.add(p, productId, { color, size }) //exist cart in databse if (c.length > 0) { Cart.updateCartByUserId( userId, { items: newCart.items, totalQty: newCart.totalQty, totalPrice: newCart.totalPrice, userId: userId }, function (err, result) { if (err) return next(err) res.json(result) }) } else { //no cart in database newCart = new Cart({ items: newCart.items, totalQty: newCart.totalQty, totalPrice: newCart.totalPrice, userId: userId }) Cart.createCart(newCart, function (err, resultCart) { if (err) return next(err) res.status(201).json(resultCart) }) } }) }) }) module.exports = router;