Files
freeplanet_serverside/src/server/router/cart_router.js

254 lines
7.4 KiB
JavaScript
Raw Normal View History

2021-01-18 00:48:17 +01:00
const shared_consts = require('../tools/shared_nodejs');
2020-12-25 03:54:16 +01:00
const express = require('express');
const router = express.Router();
2021-03-30 02:23:38 +02:00
const sendemail = require('../sendemail');
2020-12-25 03:54:16 +01:00
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');
2021-01-18 00:48:17 +01:00
const OrdersCart = require('../models/orderscart');
2020-12-25 03:54:16 +01:00
//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)
})
}
})
})
})
2021-01-18 00:48:17 +01:00
//POST cart
router.post('/:userId/cartstatus', authenticate, async function (req, res, next) {
let idapp = req.body.idapp;
let userId = req.params.userId;
let cart_id = req.body.cart_id;
2021-03-30 02:23:38 +02:00
const user = req.user;
2021-01-18 00:48:17 +01:00
let status = req.body.status;
const mycart = await Cart.getCartByUserId(userId, idapp);
2021-03-30 02:23:38 +02:00
const numorder = await OrdersCart.getNewNumOrder(userId, idapp);
2021-01-18 00:48:17 +01:00
try {
if (!!mycart) {
2021-03-30 02:23:38 +02:00
if (status === shared_consts.OrderStatus.CHECKOUT_SENT) {
2021-01-18 00:48:17 +01:00
// Porta tutto il Cart nell'Ordine
const newOrderCart = new OrdersCart({
idapp,
items: mycart.items,
totalQty: mycart.totalQty,
totalPrice: mycart.totalPrice,
userId,
status,
note: mycart.note,
2021-03-30 02:23:38 +02:00
numorder,
2021-01-18 00:48:17 +01:00
created_at: new Date(),
modify_at: new Date(),
})
2021-03-30 02:23:38 +02:00
return OrdersCart.updateOrdersCartById(-1, newOrderCart, function (err, ris) {
2021-01-18 00:48:17 +01:00
//if (err) return next(err)
if (err)
return res.send({ code: server_constants.RIS_CODE_ERR, status: 0 });
else {
const myris = ris;
// Cancella il Cart appena salvato in OrdersCart
2021-03-30 02:23:38 +02:00
2021-01-18 00:48:17 +01:00
Cart.deleteCartByCartId(mycart.id)
.then((ris) => {
2021-03-30 02:23:38 +02:00
const orders = OrdersCart.getOrdersCartByUserId(userId, idapp, numorder)
2021-01-18 00:48:17 +01:00
.then((orders) => {
2021-03-30 02:23:38 +02:00
if (!!orders) {
sendemail.sendEmail_OrderProduct(user.lang, idapp, orders[0], user)
.then((ris) => {
return res.send({
code: server_constants.RIS_CODE_OK,
status: myris.status,
orders: orders[0]
});
});
}
2021-01-18 00:48:17 +01:00
});
})
}
})
// mycart.numorder = await Cart.getNewNumOrder(userId, idapp);
// mycart.status = shared_consts.OrderStatus.CHECKOUT_CONFIRMED
/* const status = await Cart.findOneAndUpdate(
{ userId },
{
$set: {
status: mycart.status, numorder: mycart.numorder
}
},
{ new: false })
.then((rec) => {
return rec.status
}) */
}
2021-03-30 02:23:38 +02:00
return res.send({ code: server_constants.RIS_CODE_ERR, status: 0 });
2021-01-18 00:48:17 +01:00
}
} catch (e) {
return res.send({ code: server_constants.RIS_CODE_ERR, status: 0 });
}
});
2020-12-25 03:54:16 +01:00
module.exports = router;