const express = require('express'); const router = express.Router(); const mongoose = require('mongoose').set('debug', false); const { CfgServer } = require('../models/cfgserver'); const shared_consts = require('../tools/shared_nodejs'); const tools = require('../tools/general'); const { City } = require('../models/city'); const Product = require('../models/product'); const ProductInfo = require('../models/productInfo'); const CatProd = require('../models/catprod'); var { authenticate } = require('../middleware/authenticate'); router.post('/updateval', authenticate, async (req, res) => { console.log('/updateval', req.body.pairval); idapp = req.body.idapp; pair = req.body.pairval; return await CfgServer.findOneAndUpdate( { chiave: pair.chiave, idapp, userId: pair.userId }, { $set: pair }, { new: false }).then((item) => { // CfgServer.find({ chiave: pair.chiave }, (err, item) => { if (!!item) { res.status(200).send(); } else { res.status(400).send(); } }).catch(err => { console.log('ERR:', err); res.status(400).send(); }); }); router.post('/import', authenticate, async (req, res) => { const cmd = req.body.cmd; const idapp = req.body.idapp; const data = req.body.data; try { const liste = require('../data/liste'); if (cmd === shared_consts.Cmd.CITIES_SERVER) { return await City.insertMany(liste.Comuni).then((ris) => { return res.status(200).send(true); }); } else if (cmd === shared_consts.Cmd.PRODUCTS) { let dataObjects = JSON.parse(`[${data}]`); let updated = 0; let imported = 0; let errors = 0; for (const product of dataObjects) { let isnuovo = false let setta = false let productInfo = { idapp: product.idapp, code: product.code, name: product.name, link: product.link, idCatProds: [], img: 'upload/products/' + product.code + '.jpg', weight: product.weight, unit: tools.getIdUnitsByText(product.unit), } if (product.cat_name) { // Cerca la Categoria let reccateg = await CatProd.findOne({ idapp, name: product.cat_name }).lean(); if (!reccateg) { // Non esiste questo produttore, quindi lo creo ! reccateg = new CatProd({ idapp, name: product.cat_name }); ris = await reccateg.save(); reccateg = await CatProd.findOne({ idapp, name: product.cat_name }).lean(); } if (reccateg) { productInfo.idCatProds.push(reccateg._id); } } if (!product.hasOwnProperty('active')) { product.active = true; } delete product.code; delete product.name; delete product.link; // Update ProductInfo let risrecInfo = await ProductInfo.findOneAndUpdate({ code: productInfo.code }, { $set: productInfo }, { new: true, upsert: true }); if (risrecInfo) { product.idProductInfo = risrecInfo._id; recnewInfo = await ProductInfo.findOne({ code: productInfo.code }).lean(); if (risrecInfo._id) { // Record existed, so it was updated let arrfieldchange = tools.differentObjects(productInfo, recnewInfo); if (arrfieldchange && arrfieldchange.length > 0) { // updated++; console.log('Changed: ', recnewInfo.name + ': ' + arrfieldchange); } } let recProductExist = await Product.findOne({ idProductInfo: product.idProductInfo }).lean(); if (!recProductExist) { isnuovo = true; } let risrec = await Product.findOneAndUpdate({ idProductInfo: product.idProductInfo }, { $set: product }, { new: true, upsert: true }); let recnew = await Product.findOne({ idProductInfo: product.idProductInfo }).lean(); if (risrec) { if (risrec._id) { // Record existed, so it was updated let arrfieldchange = tools.differentObjects(product, recnew); if (arrfieldchange.length > 0) { updated++; console.log('Changed: ', product.idProductInfo + ': ' + arrfieldchange); } } else { // Record didn't exist, so it was created imported++; } } else { // risrec is null or undefined, indicating an error console.error('Error: ', product.productInfo.name); errors++; } await Product.singlerecconvert_AfterImport(idapp, recnew, isnuovo); } else { console.error('Error ProductInfo: ', product.code); errors++; } } // L'opzione ordered: false gestisce gli errori senza interrompere l'inserimento /*return await Product.insertMany(dataObjects, { ordered: false }) .then((ris) => { Product.convertAfterImport(idapp, dataObjects).then((ris) => { return res.status(200).send(true); }); }) .catch((errors) => { console.error(errors); Product.convertAfterImport(idapp).then((ris) => { return res.status(200).send(true); }); });*/ return res.status(200).send({ updated, imported, errors }); } } catch (e) { console.error('e', e); res.status(400).send(); } res.status(400).send(); }); module.exports = router;