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`)
    }