const mongoose = require('mongoose'); 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 }, 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); }; module.exports.getCartByUserId = async function (uid, idapp) { let query = { userId: uid, idapp } const mycart = await Cart.findOne(query); 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]._doc.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._doc.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 }) .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() }