JSFiddle - React, Tailwind, and code Playground
by aaronheld
JavaScript
router.post(mixurl('/mixcart/addProduct'), async (req, res) => {
try {
if ((req.query && req.query.token && req.query.token != 'aa2a-a3c09b3b-3a31-4f7d--331d12dda258') && authOK_API(req, res) == false) return
var utok = await decodeClaim(req, req.session.mixclaim, req.query.mixcart_session_v1)
var namespace = utok ? utok.namespace : null
user = (utok ? utok.user_id : null) || req.query.user_id
if (!user) throw new Error('no user')
product_id = req.query.product_id
product_ids = req.query.product_ids
var device_id = req.query.device_id
if (!product_id && !product_ids) throw new Error('no product id')
let quantities
if (req.query.quantities) {
quantities = JSON.parse('[' + req.query.quantities + ']')
}
const location_id = req.query.location_id
if (!location_id) throw new Error('no location id')
let products = await getInventory(inventory_url(namespace),product_ids || product_id, location_id,device_id)
if (quantities && products.length != quantities.length) {
return res.status(404).send(`quantities ${quantities.length} vs product mismatch ${products.length}`)
}
const doc = await readDoc(user, req, mixcarts, utok)
const quantitiesWithCart = quantities.slice()
if (doc && doc.baskets && doc.baskets.basket && doc.baskets.basket.items) {
for (const pe of products.entries()) {
for (const item of doc.baskets.basket.items) {
const p = pe[1]
if (p.product_id === item.id) {
quantitiesWithCart[pe[0]] = item.quantity+quantities[pe[0]]
}
}
}
}
if (!haveInventory(products,quantitiesWithCart)) {
return res.status(404).send(`Insufficient quantity`)
}