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'); 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) { if (!product.hasOwnProperty('active')) { product.active = true; } let risrec = await Product.findOneAndUpdate({ code: product.code }, { $set: product }, { new: true, upsert: true }); let recnew = await Product.findOne({ code: product.code }).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.name + ': ' + arrfieldchange); } } else { // Record didn't exist, so it was created imported++; } } else { // risrec is null or undefined, indicating an error console.error('Error: ', product.name); errors++; } await Product.singlerecconvert_AfterImport(idapp, recnew); } // 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;