const mongoose = require('mongoose').set('debug', process.env.DEBUG); const Schema = mongoose.Schema; const shared_consts = require('../tools/shared_nodejs'); const Order = require('../models/order'); const CartSchema = new Schema({ idapp: { type: String, }, userId: {type: Schema.Types.ObjectId, ref: 'User'}, totalQty: {type: Number, default: 0}, totalPrice: {type: Number, default: 0}, department: { type: String, ref: 'Department', }, items: [ { order: {type: Schema.Types.ObjectId, ref: 'Order'}, }, ], note: { type: String, }, modify_at: { type: Date, }, }); var Cart = module.exports = mongoose.model('Cart', CartSchema); module.exports.findAllIdApp = async function(idapp, userId) { const myfind = {idapp, userId}; return await Cart.findOne(myfind).lean(); }; module.exports.getCartByUserId = async function(uid, idapp) { let query = {userId: uid, idapp}; const mycart = await Cart.findOne(query).lean(); if (!!mycart) { for (const idkey in mycart.items) { try { idorder = mycart.items[idkey]._id.toString(); const myorder = mycart.items[idkey].order; if (!!myorder) { idorder = mycart.items[idkey].order._id.toString(); } const myord = await Order.getTotalOrderById(idorder); if (myord.length > 0) { mycart.items[idkey].order = myord[0]; } } catch (e) { console.log('err', e); } } return mycart; } return null; }; module.exports.updateCartByUserId = function(userId, newCart, callback) { let query = {userId: userId}; Cart.find(query, function(err, c) { if (err) throw err; //exist cart in databse if (c.length > 0) { Cart.findOneAndUpdate( {userId: userId}, { $set: { items: newCart.items, totalQty: newCart.totalQty, totalPrice: newCart.totalPrice, userId: userId, }, }, {new: true}, callback, ); } else { //no cart in database newCart.save(callback); } }); }; module.exports.updateCartByCartId = async function(cartId, newCart) { // delete newCart._doc._id; const items = newCart.items; const totalQty = newCart.totalQty; const totalPrice = newCart.totalPrice; const modify_at = new Date(); return await Cart.findOneAndUpdate({_id: cartId}, { $set: { items, totalPrice, totalQty, modify_at, }, }, {new: false}).lean().then((ris) => { return ris; }).catch(err => { console.log('err', err); return null; }); }; module.exports.deleteCartByCartId = async function(cartId) { return await Cart.remove({_id: cartId}); }; module.exports.createCart = async function(newCart) { return await newCart.save(); };