diff --git a/src/server/models/cron.js b/src/server/models/cron.js index 97b6eab..5bb325d 100755 --- a/src/server/models/cron.js +++ b/src/server/models/cron.js @@ -1,17 +1,19 @@ -const mongoose = require('mongoose').set('debug', false) +const mongoose = require('mongoose').set('debug', false); const Schema = mongoose.Schema; const tools = require('../tools/general'); -mongoose.Promise = global.Promise; -mongoose.level = "F"; +const shared_consts = require('../tools/shared_nodejs'); +mongoose.Promise = global.Promise; +mongoose.level = 'F'; // Resolving error Unknown modifier: $pushAll -mongoose.plugin(schema => { - schema.options.usePushEach = true +mongoose.plugin((schema) => { + schema.options.usePushEach = true; }); +const CronMod = require('../modules/CronMod'); const CronSchema = new Schema({ idapp: { @@ -27,26 +29,45 @@ const CronSchema = new Schema({ nomeFunzioneDbOp: { type: String, }, - startTime: { // Orario iniziale (es. "08:30") + startTime: { + // Orario iniziale (es. "08:30") type: String, - default: "00:00" }, - everyXHours: { // Esegui ogni X ore + everyXMinutes: { + // Esegui ogni X ore + type: Number, + }, + quanteVolteEseguito: { + type: Number, + default: 0, + }, + quanteVolteEseguiAlGG: { + type: Number, + default: 1, + }, + lastJobStarted: { + type: Date, + }, + lastJobEnd: { + type: Date, + }, + log: { + type: String, + }, + status: { type: Number, - default: 24 }, date_created: { type: Date, - default: Date.now + default: Date.now, }, date_updated: { type: Date, }, }); - CronSchema.statics.getFieldsForSearch = function () { - return [{ field: 'descr', type: tools.FieldType.string }] + return [{ field: 'descr', type: tools.FieldType.string }]; }; CronSchema.statics.executeQueryTable = function (idapp, params, user) { @@ -54,6 +75,73 @@ CronSchema.statics.executeQueryTable = function (idapp, params, user) { return tools.executeQueryTable(this, idapp, params, user); }; +CronSchema.statics.startJobCron = async function (idapp) { + // Esegui un loop su tutti i cron job che trovi per l'idapp specificato + const Cron = this; + const cronJobs = await Cron.find({ idapp, active: true }); + + // console.log('Check startJobCron...', idapp); + + const mycronMod = new CronMod(); + + const currentDate = new Date(); + + for (const mycron of cronJobs) { + const jobTime = new Date(); + const [hours, minutes] = mycron.startTime.split(':'); + jobTime.setHours(hours, minutes, 0, 0); + + // Check if jobTime has passed and if 'everyXMinutes' have elapsed since last execution + if (!mycron.quanteVolteEseguito) mycron.quanteVolteEseguito = 0; + const timesPerDay = mycron.quanteVolteEseguiAlGG || 1; + const startDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate()); + const lastJobDate = new Date( + mycron.lastJobStarted.getFullYear(), + mycron.lastJobStarted.getMonth(), + mycron.lastJobStarted.getDate() + ); + const tempooltre = currentDate - mycron.lastJobStarted >= mycron.everyXMinutes * 60 * 1000; + if ( + ((mycron.quanteVolteEseguito < timesPerDay && startDate.getTime() === lastJobDate.getTime()) || + startDate.getTime() !== lastJobDate.getTime()) && + (!mycron.lastJobStarted || tempooltre) + ) { + if (currentDate >= jobTime) { + // Execute the function at the scheduled time + console.log(`Sto eseguendo il Cron Job: ${mycron.nomeFunzioneDbOp} alle ${currentDate.toLocaleTimeString()}`); + const status = shared_consts.STATUS_JOB.START; + if (startDate.getTime() !== lastJobDate.getTime()) { + mycron.quanteVolteEseguito = 0; + } + const quanteVolteEseguito = mycron.quanteVolteEseguito + 1; + await Cron.findOneAndUpdate( + { _id: mycron._id }, + { $set: { lastJobStarted: currentDate, status, quanteVolteEseguito } }, + { new: true } + ); + mycronMod + .eseguiDbOp(idapp, { dbop: mycron.nomeFunzioneDbOp }, null, null) + .then(async (ris) => { + console.log(`${currentDate.toLocaleTimeString()} LOG JOB: ${ris.mystr}`); + const myid = mycron._id; + const status = shared_consts.STATUS_JOB.FINISH; + const risupdate = await Cron.findOneAndUpdate( + { _id: myid }, + { $set: { lastJobEnd: new Date(), status } }, + { new: true } + ); + }) + .catch(async (err) => { + const log = "Errore durante l'esecuzione del job: " + err.message || err; + const status = shared_consts.STATUS_JOB.ERR; + await Cron.findOneAndUpdate({ _id: mycron._id }, { $set: { log, status } }, { new: true }); + console.error(log); + }); + } + } + } +}; + CronSchema.statics.findAllIdApp = async function (idapp) { const Cron = this; @@ -61,7 +149,6 @@ CronSchema.statics.findAllIdApp = async function (idapp) { return await Cron.find({ idapp }).then((arrrec) => { return arrrec; }); - } catch (err) { console.error('Errore: ', err); } @@ -70,8 +157,9 @@ CronSchema.statics.findAllIdApp = async function (idapp) { const Cron = mongoose.model('Cron', CronSchema); Cron.createIndexes() - .then(() => { }) - .catch((err) => { throw err; }); - + .then(() => {}) + .catch((err) => { + throw err; + }); module.exports = { Cron }; diff --git a/src/server/models/productInfo.js b/src/server/models/productInfo.js index a5186f6..c1edd8f 100755 --- a/src/server/models/productInfo.js +++ b/src/server/models/productInfo.js @@ -532,7 +532,7 @@ module.exports.removeProductInfoWithoutDateUpdatedFromGM = async function (idapp try { const arrproductInfo = await ProductInfo.find({ idapp, date_updated_fromGM: { $exists: false } }); - if (arrproductInfo.length > 0) { + if (arrproductInfo.length > 0 && arrproductInfo.length < 1000) { mylog = `Rimuovo ${arrproductInfo.length} productInfo senza date_updated_fromGM !!` console.log(mylog); diff --git a/src/server/modules/CronMod.js b/src/server/modules/CronMod.js new file mode 100644 index 0000000..2f77ee8 --- /dev/null +++ b/src/server/modules/CronMod.js @@ -0,0 +1,477 @@ +const { User } = require('../models/user'); + +const Hours = require('../models/hours'); +const { ObjectId } = require('mongodb'); + +const tools = require('../tools/general'); +const shared_consts = require('../tools/shared_nodejs'); + +const server_constants = require('../tools/server_constants'); + +const { Settings } = require('../models/settings'); +const { MyBot } = require('../models/bot'); +const { MyElem } = require('../models/myelem'); + +const telegrambot = require('../telegram/telegrambot'); + +const Cart = require('../models/cart'); +const CartClass = require('../modules/Cart'); +const Product = require('../models/product'); +const ProductInfo = require('../models/productInfo'); +const CatProd = require('../models/catprod'); +const SubCatProd = require('../models/subcatprod'); +const Order = require('../models/order'); +const OrdersCart = require('../models/orderscart'); +const Variant = require('../models/variant'); +const TypedError = require('../modules/ErrorHandler'); + +const { MyGroup } = require('../models/mygroup'); +const { Circuit } = require('../models/circuit'); +const { Province } = require('../models/province'); +const { City } = require('../models/city'); +const { Account } = require('../models/account'); + +const Macro = require('../modules/Macro'); + +class CronMod { + constructor() {} + + async eseguiDbOp(idapp, mydata, req, res) { + + + let ris = await User.DbOp(idapp, mydata); + + const populate = require("../populate/populate"); + + const globalTables = require("../tools/globalTables"); + const { Reaction } = require("../models/reaction"); + + let mystr = ""; + + try { + if (mydata.dbop === "") { + // } else if (mydata.dbop === 'rigeneraTutto') { + // await ListaIngresso.Esegui_CronTab(idapp, mydata); + } else if (mydata.dbop === "ReplaceAllCircuits") { + // ++ Replace All Circuitname with 'Circuito RIS %s' + await Circuit.replaceAllCircuitNames(idapp); + } else if (mydata.dbop === "eliminaCatProds") { + await CatProd.deleteMany({ idapp }); + await SubCatProd.deleteMany({ idapp }); + } else if (mydata.dbop === "removeProductInfoWithoutDateUpdatedFromGM") { + mystr = await ProductInfo.removeProductInfoWithoutDateUpdatedFromGM(idapp); + ris = { mystr }; + } else if (mydata.dbop === "StatMacro") { + const macro = new Macro(idapp, {}); + mystr = await macro.getStat(); + ris = { mystr }; + } else if (mydata.dbop === "updateAllBook") { + // chiama updateAllBook + const { updateAllBook } = require("../controllers/articleController"); + + mystr = await updateAllBook(idapp, mydata.options); + + ris = { mystr }; + } else if (mydata.dbop === "updateAllBooksAndRemoveCanc") { + // chiama updateAllBooksAndRemoveCanc + + const { updateAllBook } = require("../controllers/articleController"); + + mystr = await updateAllBook(idapp, {usaDBGMLocale: false, caricatutti: true, rimuovieventualiCancellati: true}); + + ris = { mystr }; + } else if (mydata.dbop === "creaUtentiTest") { + let num = 0; + lastrec = await User.find({ idapp }).sort({ _id: -1 }).limit(1); + let last = 1; + if (lastrec) { + last = lastrec[0].index; + } + if (!last) { + last = 1; + } + + for (let ind = 0; ind < 100; ind++) { + let myuser = new User(); + myuser._id = new ObjectId(); + myuser.index = last + ind + 1; + myuser.idapp = idapp; + myuser.password = "$2a$12$DEaX1h5saTUVC43f7kubyOAlah1xHDgqQTfSIux0.RFDT9WGbyCaG"; + myuser.lang = "it"; + myuser.email = "miaemail@email.it"; + myuser.name = "U" + myuser.index; + myuser.surname = "Ar" + myuser.index; + myuser.verified_email = true; + myuser.verified_by_aportador = true; + if (myuser.index < 2) myuser.perm = "3"; + myuser.username = "Userna_" + myuser.name; + myuser.profile.special_req = true; + myuser.profile.nationality = "IT"; + await myuser.save(); + num++; + } + + ris = { num }; + /*} else if (mydata.dbop === 'visuPlacca') { + + mystr = '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨\n' + + 'NAVI CHE SALPANO DALLA ' + mydata.riga + '.' + mydata.col + ' ALLA ' + mydata.riga + '.' + (parseInt(mydata.col) + 7) + '\n' + + 'AUGURI ALLA NUOVA SOGNATRICE !!!\n' + + '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨'; + + const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT'); + + for (let ind = 0; ind < 8; ind++) { + mystr += await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col) + ind, false); + mystr += tools.ACAPO; + if (visu_nave_Bot && ind === 3) { + await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true); + mystr = ''; + } + } + + if (visu_nave_Bot) + await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true); + + ris = { mystr }; + */ + } else if (mydata.dbop === "CorreggiTabHours") { + ris = await Hours.correggiHours(idapp); + } else if (mydata.dbop === "setVerifiedByAportadorToALL") { + ris = await User.setVerifiedByAportadorToALL(); + } else if (mydata.dbop === "RewriteContribType") { + ris = populate.rewriteTable("contribtypes"); + } else if (mydata.dbop === "ReplaceUsername") { + if (User.isAdmin(req.user.perm)) { + ris = globalTables.replaceUsername(req.body.idapp, mydata.search_username, mydata.replace_username); + } + } else if (mydata.dbop === "ExitFromAllCircuitWithZero") { + if (User.isAdmin(req.user.perm)) { + ris = globalTables.ExitFromAllCircuitWithZero(req.body.idapp, mydata.search_username); + } + } else if (mydata.dbop === "replaceAportadorSolidario") { + if (User.isAdmin(req.user.perm)) { + ris = globalTables.replaceAportadorSolidario(req.body.idapp, mydata.search_username, mydata.replace_username); + } + } else if (mydata.dbop === "SearchString") { + if (User.isAdmin(req.user.perm)) { + mystr = await globalTables.SearchString(req.body.idapp, mydata.search); + } + ris = { mystr }; + } else if (mydata.dbop === "UpdateCatDeleteEmpty") { + mystr = await CatProd.updateCatDeleteEmpty(req.body.idapp); + ris = { mystr }; + } else if (mydata.dbop === "UpdateStatFatturato") { + mystr = await ProductInfo.updateProductInfoByStats(req.body.idapp); + ris = { mystr }; + } else if (mydata.dbop === "MigrateMSSQLToMongoDb") { + const { mssqlmigrateTables } = require("../controllers/articleController"); + + mystr = await mssqlmigrateTables(req); + + ris = { mystr }; + } else if (mydata.dbop === "copyFrom1To14") { + const idapporig = 1; + const idappdest = 14; + if (!idapporig || !idappdest) return; + + const globalTables = require("../tools/globalTables"); + + //++ Todo: TO FIXIT ! + const mytablesstr = ["settings", "users", "templemail", "destnewsletter", "contribtypes", "bots", "cfgservers"]; + + try { + let numrectot = 0; + for (const table of mytablesstr) { + const mytable = globalTables.getTableByTableName(table); + + tools.mylogshow("copyfromapptoapp: ", table, mytable); + + await mytable.DuplicateAllRecords(idapporig, idappdest).then((numrec) => { + // tools.mylogshow(' REC TO MODIFY: ', rec); + if (numrec) numrectot += numrec; + }); + } + + ris = true; + } catch (e) { + console.log("e", e); + } + } else if (mydata.dbop === "removeRecordsFav") { + // Passa le tabelle da users sulle nuove tabelle: + await User.removerecordsFavorite(); + } else if (mydata.dbop === "updateReactionsCounts") { + await Reaction.updateReactionsCounts(); + } else if (mydata.dbop === "GeneraCSVOrdineProdotti") { + await Order.GeneraCSVOrdineProdotti(); + } else if (mydata.dbop === "RemoveDeletedOrdersInOrderscart") { + await Order.RemoveDeletedOrdersInOrderscart(); + } else if (mydata.dbop === "CheckTransazioniCircuiti") { + await Circuit.CheckTransazioniCircuiti(false); + } else if (mydata.dbop === "CorreggiTransazioniCircuiti") { + await Circuit.CheckTransazioniCircuiti(true); + } else if (mydata.dbop === "RemovePendentTransactions") { + ris = await SendNotif.RemovePendentTransactions(idapp); + } else if (mydata.dbop === "RemoveOldNotif90") { + await SendNotif.RemoveOldNotif90(idapp); + } else if (mydata.dbop === "RemoveOldNotif30") { + await SendNotif.RemoveOldNotif30(idapp); + } else if (mydata.dbop === "UpdateCoordProv") { + await Province.setCoordinatesOnDB(); + } else if (mydata.dbop === "insertGeojsonToMongoDB") { + await City.insertGeojsonToMongoDB("comuni_italia.geojson"); + } else if (mydata.dbop === "listCollectionsBySize") { + mystr = await tools.listCollectionsBySize(); + ris = { mystr }; + } else if (mydata.dbop === "EnableNewsOn_ToAll") { + mystr = await User.setNewsletterToAll(idapp); + } else if (mydata.dbop === "MyElemSetIdPageInsteadThePah") { + mystr = await MyElem.SetIdPageInsteadThePah(idapp); + ris = { mystr }; + } else if (mydata.dbop === "AbilitaNewsletterALL") { + await User.updateMany( + { + $or: [{ deleted: { $exists: false } }, { deleted: { $exists: true, $eq: false } }], + }, + { $set: { news_on: true } }, + { new: false } + ); + } else if (mydata.dbop === "SvuotaTuttiGliAccessiOnlineConToken") { + await User.SvuotaTuttiGliAccessiOnlineConToken(idapp); + } else if (mydata.dbop === "SettaAdTypeOffro_In_Hosps") { + const { MyHosp } = require("../models/myhosp"); + + await MyHosp.SettaAdTypeOffro_In_Hosps(idapp); + } else if (mydata.dbop === "removeRegulations") { + await Circuit.updateMany({}, { $set: { regulation: "" } }); + } else if (mydata.dbop === "newRecordsFav") { + // Passa le tabelle da users sulle nuove tabelle: + await User.moverecordsFavorite(1); + await User.moverecordsFavorite(2); + await User.moverecordsFavorite(3); + await User.moverecordsFavorite(4); + await User.moverecordsFavorite(5); + } else if (mydata.dbop === "emptyTabCatServiziBeni") { + const { Sector } = require("../models/sector"); + const { SectorGood } = require("../models/sectorgood"); + const { Skill } = require("../models/skill"); + const { Good } = require("../models/good"); + + await Sector.deleteMany({}); + await SectorGood.deleteMany({}); + await Skill.deleteMany({}); + ris = await Good.deleteMany({}); + } else if (mydata.dbop === "emptyDbSkill") { + // Svuota e Ricrea + + const { Sector } = require("../models/sector"); + const { SectorGood } = require("../models/sectorgood"); + const { Skill } = require("../models/skill"); + const { Good } = require("../models/good"); + const { SubSkill } = require("../models/subskill"); + const { Contribtype } = require("../models/contribtype"); + const { AdType } = require("../models/adtype"); + const { AdTypeGood } = require("../models/adtypegood"); + const { StatusSkill } = require("../models/statusSkill"); + const { CatGrp } = require("../models/catgrp"); + + await Sector.deleteMany({}); + await SectorGood.deleteMany({}); + await Skill.deleteMany({}); + await Good.deleteMany({}); + await SubSkill.deleteMany({}); + await Contribtype.deleteMany({}); + await AdType.deleteMany({}); + await AdTypeGood.deleteMany({}); + await StatusSkill.deleteMany({}); + await CatGrp.deleteMany({}); + + ris = await populate.popolaTabelleNuove(); + } else if (mydata.dbop === "ricreaTabCitiesProvinces") { + // Svuota e Ricrea + + const { City } = require("../models/city"); + const { Province } = require("../models/province"); + + await City.deleteMany({}); + await Province.deleteMany({}); + + ris = await populate.popolaTabelleNuove(); + } else if (mydata.dbop === "PopulateTables") { + ris = populate.popolaTabelleNuove(); + } else if (mydata.dbop === "dropProducts") { + if (idapp) { + const deleteProducts = await Product.deleteMany({ idapp }); + console.log(`Cancellati ${deleteProducts.deletedCount} record dalla collezione Product.`); + + // Cancellazione dei record nella collezione ProductInfo + const deleteProductInfo = await ProductInfo.deleteMany({ idapp }); + console.log(`Cancellati ${deleteProductInfo.deletedCount} record dalla collezione ProductInfo.`); + } + + ris = deleteProductInfo ? true : false; + } else if (mydata.dbop === "dropCatProd") { + const deleteCatProd = await CatProd.deleteMany({ idapp }); + } else if (mydata.dbop === "dropSubCatProd") { + const deleteSubCatProd = await SubCatProd.deleteMany({ idapp }); + } else if (mydata.dbop === "dropAllOrders") { + try { + const deleteOrder = await Order.deleteMany({ idapp }); + const deleteOrdersCart = await OrdersCart.deleteMany({ idapp }); + const deleteCart = await Cart.deleteMany({ idapp }); + + ris = deleteCart; + } catch (e) { + console.error("Err:", e); + } + } else if (mydata.dbop === "SistemaGasOrdine") { + const arrrec = await Product.find({}).lean(); + for (const rec of arrrec) { + if (tools.isArray(rec.idGasordines) && rec.idGasordines.length > 0) { + await Product.findByIdAndUpdate(rec._id, { $set: { idGasordine: rec.idGasordines[0] } }); + } else { + await Product.findByIdAndUpdate(rec._id, { $set: { idGasordine: null } }); + } + } + } else if (mydata.dbop === "CopyPriceToCalc") { + try { + const arrrec = await OrdersCart.find({}).lean(); + for (const rec of arrrec) { + await OrdersCart.findByIdAndUpdate(rec._id, { $set: { totalPriceCalc: rec.totalPrice } }); + } + + const arrrec2 = await Order.find({}).lean(); + for (const rec of arrrec2) { + await Order.findByIdAndUpdate(rec._id, { $set: { TotalPriceProductCalc: rec.TotalPriceProduct } }); + } + } catch (e) { + console.error("Err:", e); + } + } else if (mydata.dbop === "dropAllCarts") { + ris = await Cart.deleteMany({ idapp }); + } else if (mydata.dbop === "RewriteCitiesTable") { + ris = populate.rewriteTable("cities"); + } else if (mydata.dbop === "RewriteLevelsTable") { + ris = populate.rewriteTable("levels"); + } else if (mydata.dbop === "RewriteProvincesTable") { + ris = populate.rewriteTable("provinces"); + } else if (mydata.dbop === "emptyCityProvinces") { + const { City } = require("../models/city"); + const { Province } = require("../models/province"); + + await City.deleteMany({}); + await Province.deleteMany({}); + } else if (mydata.dbop === "ConvTablesFromIntToString") { + const { MySkill } = require("../models/myskill"); + const { MyBacheca } = require("../models/mybacheca"); + const { MyHosp } = require("../models/myhosp"); + const { MyGood } = require("../models/mygood"); + // const { MyGroup } = require('../models/mygroup'); + + console.log("INIZIO - Conversioni"); + // 'myskills', + // 'mybachecas', + // 'myhosps', + // 'mygoods', + // 'mygroups' + + await ConvertiDaIntAStr(MySkill); + await ConvertiDaIntAStr(MyBacheca); + await ConvertiDaIntAStr(MyHosp); + await ConvertiDaIntAStr(MyGood); + await ConvertiDaIntAStr(MyGroup); + + console.log("FINE - Conversioni"); + } else if (mydata.dbop === "Removeinteger") { + const { MySkill } = require("../models/myskill"); + const { MyBacheca } = require("../models/mybacheca"); + const { MyHosp } = require("../models/myhosp"); + const { MyGood } = require("../models/mygood"); + // const { MyGroup } = require('../models/mygroup'); + + console.log("INIZIO - Rimozione"); + + await RimuoviInteri(MySkill); + await RimuoviInteri(MyBacheca); + await RimuoviInteri(MyHosp); + await RimuoviInteri(MyGood); + await RimuoviInteri(MyGroup); + + console.log("FINE - Rimozione"); + } else if (mydata.dbop === "createAllCircuits") { + const { Province } = require("../models/province"); + + const arrProv = await Province.find({}); + for (const recprov of arrProv) { + await Circuit.createCircuitIfNotExist(req, idapp, recprov.prov); + } + } else if (mydata.dbop === "correggiProductTypes") { + await ProductInfo.correggiProductTypes(); + } else if (mydata.dbop === "replaceProductImgToImageFile") { + await ProductInfo.replaceProductImgToImageFile(true); + } else if (mydata.dbop === "removeUploadProducts_Path") { + await ProductInfo.replaceProductImgToImageFile(false); + } else if (mydata.dbop === "correggiCircuitiANull") { + await User.updateMany({}, { $pull: { "profile.mycircuits": { circuitname: null } } }); + } else if (mydata.dbop === "ImpostaMinMaxPersonali") { + await Account.SetMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, ""); + } else if (mydata.dbop === "ImpostaMinMaxPersonaliCircuito") { + await Account.SetMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, mydata.circuitId); + } else if (mydata.dbop === "ImpostaMinMaxComunitari") { + await Account.SetMinMaxComunitari(idapp, mydata.valmin, mydata.valmax); + } else if (mydata.dbop === "ImpostaMinMaxCollettivi") { + await Account.SetMinMaxCollettivi(idapp, mydata.valmin, mydata.valmax); + } else if (mydata.dbop === "ImpostaDefMinMaxPersonali") { + await Circuit.SetDefMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, mydata.circuitId); + } else if (mydata.dbop === "ImpostaDefMinMaxCollettivi") { + await Circuit.SetDefMinMaxCollettivi(idapp, mydata.valmin, mydata.valmax, mydata.circuitId); + } else if (mydata.dbop === "AbilitaTuttiCircuiti") { + await Circuit.AbilitaTuttiCircuiti(idapp); + } else if (mydata.dbop === "AzzeraRegolamentiTuttiCircuiti") { + await Circuit.AzzeraRegolamentiTuttiCircuiti(idapp); + } else if (mydata.dbop === "setstrProvByIdCityCircuits") { + await Circuit.setstrProvByIdCityCircuits(idapp); + } else if (mydata.dbop === "updateSaldoAndTransato_AllAccounts") { + await Account.updateSaldoAndTransato_AllAccounts(idapp); + } else if (mydata.dbop === "generateBotMenuRecords") { + await MyBot.generateBotMenuRecords(idapp); + } else if (mydata.dbop === "GenerateVapiKey") { + await tools.generateVapiKey(); + + /*} else if (mydata.dbop === 'visuNave') { + mystr = await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col)); + + const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT'); + if (visu_nave_Bot) + telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true); + + ris = { mystr }; + } else if (mydata.dbop === 'getnavibyuser') { + + let arrnavi = null; + + const user = await User.getUserShortDataByUsername(idapp, mydata.username); + if (user) { + arrnavi = await Nave.getArrPosizioniByUsername(idapp, user.username); + + for (let mynave of arrnavi) { + mynave._doc.rec = await Nave.getNaveByRigaCol(idapp, mynave.riga, mynave.col); + } + + } + + ris = { data: arrnavi }; + + */ + } + + // console.log('ris', ris); + + return ris; + } catch (e) { + console.log(e.message); + } + } +} + +module.exports = CronMod; diff --git a/src/server/modules/Macro.js b/src/server/modules/Macro.js index dbb4ea5..d52213e 100644 --- a/src/server/modules/Macro.js +++ b/src/server/modules/Macro.js @@ -435,7 +435,7 @@ class Macro { let count = 0; if (Array.isArray(recproducts)) { - if (recproducts.length > 10 && lavoromassivo) { + if (recproducts.length > 10 && lavoromassivo && options.rimuovieventualiCancellati) { // rimuovi dalla tabella productInfo tutti i campi date_updated_fromGM const result = await ProductInfo.updateMany({ idapp: options.idapp }, { $unset: { date_updated_fromGM: null } }); let quanti_rimossi = result.modifiedCount; @@ -461,7 +461,7 @@ class Macro { //} } - if (rimuoviTabellePerIniziare) { + if (rimuoviTabellePerIniziare && options.rimuovieventualiCancellati) { await ProductInfo.removeProductInfoWithoutDateUpdatedFromGM(options.idapp); } if (myjob) diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index d17bebb..2f61341 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -45,6 +45,7 @@ const { Contribtype } = require('../models/contribtype'); const { PaymentType } = require('../models/paymenttype'); const { Discipline } = require('../models/discipline'); const { MyElem } = require('../models/myelem'); +const { Cron } = require('../models/cron'); const { Skill } = require('../models/skill'); const { Good } = require('../models/good'); const { StatusSkill } = require('../models/statusSkill'); @@ -2028,6 +2029,7 @@ async function load(req, res, version = '0') { stati_prodotto: version >= 91 ? T_WEB_StatiProdotto.findAllIdApp() : Promise.resolve([]), tipologie: version >= 91 ? T_WEB_Tipologie.findAllIdApp() : Promise.resolve([]), tipoformato: version >= 91 ? T_WEB_TipiFormato.findAllIdApp() : Promise.resolve([]), + crons: version >= 91 ? Cron.findAllIdApp() : Promise.resolve([]), myuserextra: req.user ? User.addExtraInfo(idapp, req.user, version) : Promise.resolve(null) @@ -2144,6 +2146,7 @@ async function load(req, res, version = '0') { stati_prodotto: data.stati_prodotto, tipologie: data.tipologie, tipoformato: data.tipoformato, + crons: data.crons, }; } diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index 31b5f94..2bd9579 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -14,6 +14,7 @@ const { ObjectId } = require('mongodb'); const sendemail = require('../sendemail'); const { Settings } = require('../models/settings'); +const CronMod = require('../modules/CronMod'); const { SendNotif } = require('../models/sendnotif'); const { MyElem } = require('../models/myelem'); @@ -1051,546 +1052,6 @@ router.post('/circuits/cmd', authenticate, async (req, res) => { }); -async function eseguiDbOp(idapp, mydata, locale, req, res) { - - let ris = await User.DbOp(idapp, mydata); - - const populate = require('../populate/populate'); - - const globalTables = require('../tools/globalTables'); - const { Reaction } = require('../models/reaction'); - - let mystr = ''; - - try { - - if (mydata.dbop === '') { - - // } else if (mydata.dbop === 'rigeneraTutto') { - // await ListaIngresso.Esegui_CronTab(idapp, mydata); - } else if (mydata.dbop === 'ReplaceAllCircuits') { - // ++ Replace All Circuitname with 'Circuito RIS %s' - await Circuit.replaceAllCircuitNames(idapp); - } else if (mydata.dbop === 'eliminaCatProds') { - - await CatProd.deleteMany({ idapp }); - await SubCatProd.deleteMany({ idapp }); - } else if (mydata.dbop === 'removeProductInfoWithoutDateUpdatedFromGM') { - - mystr = await ProductInfo.removeProductInfoWithoutDateUpdatedFromGM(idapp); - ris = { mystr }; - - } else if (mydata.dbop === 'StatMacro') { - - const macro = new Macro(idapp, {}); - mystr = await macro.getStat(); - ris = { mystr }; - - } else if (mydata.dbop === 'updateAllBook') { - // chiama updateAllBook - const { updateAllBook } = require("../controllers/articleController"); - - mystr = await updateAllBook(idapp, mydata.options); - - ris = { mystr }; - - } else if (mydata.dbop === 'creaUtentiTest') { - - let num = 0; - lastrec = await User.find({ idapp }).sort({ _id: -1 }).limit(1); - let last = 1; - if (lastrec) { - last = lastrec[0].index; - } - if (!last) { - last = 1; - } - - for (let ind = 0; ind < 100; ind++) { - let myuser = new User(); - myuser._id = new ObjectId(); - myuser.index = last + ind + 1; - myuser.idapp = idapp; - myuser.password = '$2a$12$DEaX1h5saTUVC43f7kubyOAlah1xHDgqQTfSIux0.RFDT9WGbyCaG'; - myuser.lang = 'it'; - myuser.email = 'miaemail@email.it'; - myuser.name = 'U' + myuser.index; - myuser.surname = 'Ar' + myuser.index; - myuser.verified_email = true; - myuser.verified_by_aportador = true; - if (myuser.index < 2) - myuser.perm = '3'; - myuser.username = 'Userna_' + myuser.name; - myuser.profile.special_req = true; - myuser.profile.nationality = 'IT'; - await myuser.save(); - num++; - } - - ris = { num }; - /*} else if (mydata.dbop === 'visuPlacca') { - - mystr = '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨\n' + - 'NAVI CHE SALPANO DALLA ' + mydata.riga + '.' + mydata.col + ' ALLA ' + mydata.riga + '.' + (parseInt(mydata.col) + 7) + '\n' + - 'AUGURI ALLA NUOVA SOGNATRICE !!!\n' + - '✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨'; - - const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT'); - - for (let ind = 0; ind < 8; ind++) { - mystr += await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col) + ind, false); - mystr += tools.ACAPO; - if (visu_nave_Bot && ind === 3) { - await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true); - mystr = ''; - } - } - - if (visu_nave_Bot) - await telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true); - - ris = { mystr }; - */ - } else if (mydata.dbop === 'CorreggiTabHours') { - - ris = await Hours.correggiHours(idapp); - - } else if (mydata.dbop === 'setVerifiedByAportadorToALL') { - - ris = await User.setVerifiedByAportadorToALL(); - - } else if (mydata.dbop === 'RewriteContribType') { - - ris = populate.rewriteTable('contribtypes'); - - } else if (mydata.dbop === 'ReplaceUsername') { - - if (User.isAdmin(req.user.perm)) { - ris = globalTables.replaceUsername(req.body.idapp, mydata.search_username, mydata.replace_username); - } - } else if (mydata.dbop === 'ExitFromAllCircuitWithZero') { - - if (User.isAdmin(req.user.perm)) { - ris = globalTables.ExitFromAllCircuitWithZero(req.body.idapp, mydata.search_username); - } - } else if (mydata.dbop === 'replaceAportadorSolidario') { - - if (User.isAdmin(req.user.perm)) { - ris = globalTables.replaceAportadorSolidario(req.body.idapp, mydata.search_username, mydata.replace_username); - } - } else if (mydata.dbop === 'SearchString') { - - if (User.isAdmin(req.user.perm)) { - mystr = await globalTables.SearchString(req.body.idapp, mydata.search); - } - ris = { mystr }; - - } else if (mydata.dbop === 'UpdateCatDeleteEmpty') { - - mystr = await CatProd.updateCatDeleteEmpty(req.body.idapp); - ris = { mystr }; - - } else if (mydata.dbop === 'UpdateStatFatturato') { - - mystr = await ProductInfo.updateProductInfoByStats(req.body.idapp); - ris = { mystr }; - - } else if (mydata.dbop === 'MigrateMSSQLToMongoDb') { - const { mssqlmigrateTables } = require("../controllers/articleController"); - - mystr = await mssqlmigrateTables(req); - - ris = { mystr }; - - } else if (mydata.dbop === 'copyFrom1To14') { - const idapporig = 1; - const idappdest = 14; - if (!idapporig || !idappdest) - return; - - const globalTables = require('../tools/globalTables'); - - //++ Todo: TO FIXIT ! - const mytablesstr = [ - 'settings', - 'users', - 'templemail', - 'destnewsletter', - 'contribtypes', - 'bots', - 'cfgservers']; - - try { - let numrectot = 0; - for (const table of mytablesstr) { - const mytable = globalTables.getTableByTableName(table); - - tools.mylogshow('copyfromapptoapp: ', table, mytable); - - await mytable.DuplicateAllRecords(idapporig, idappdest). - then((numrec) => { - // tools.mylogshow(' REC TO MODIFY: ', rec); - if (numrec) - numrectot += numrec; - }); - } - - ris = true; - - } catch (e) { - console.log('e', e); - } - - } else if (mydata.dbop === 'removeRecordsFav') { - // Passa le tabelle da users sulle nuove tabelle: - await User.removerecordsFavorite(); - - } else if (mydata.dbop === 'updateReactionsCounts') { - await Reaction.updateReactionsCounts(); - } else if (mydata.dbop === 'GeneraCSVOrdineProdotti') { - await Order.GeneraCSVOrdineProdotti(); - } else if (mydata.dbop === 'RemoveDeletedOrdersInOrderscart') { - await Order.RemoveDeletedOrdersInOrderscart(); - } else if (mydata.dbop === 'CheckTransazioniCircuiti') { - await Circuit.CheckTransazioniCircuiti(false); - } else if (mydata.dbop === 'CorreggiTransazioniCircuiti') { - await Circuit.CheckTransazioniCircuiti(true); - } else if (mydata.dbop === 'RemovePendentTransactions') { - ris = await SendNotif.RemovePendentTransactions(idapp); - } else if (mydata.dbop === 'RemoveOldNotif90') { - await SendNotif.RemoveOldNotif90(idapp); - } else if (mydata.dbop === 'RemoveOldNotif30') { - await SendNotif.RemoveOldNotif30(idapp); - } else if (mydata.dbop === 'UpdateCoordProv') { - await Province.setCoordinatesOnDB(); - } else if (mydata.dbop === 'insertGeojsonToMongoDB') { - await City.insertGeojsonToMongoDB('comuni_italia.geojson'); - } else if (mydata.dbop === 'listCollectionsBySize') { - mystr = await tools.listCollectionsBySize(); - ris = { mystr }; - } else if (mydata.dbop === 'EnableNewsOn_ToAll') { - mystr = await User.setNewsletterToAll(idapp); - - } else if (mydata.dbop === 'MyElemSetIdPageInsteadThePah') { - mystr = await MyElem.SetIdPageInsteadThePah(idapp); - ris = { mystr }; - } else if (mydata.dbop === 'AbilitaNewsletterALL') { - await User.updateMany({ - $or: [ - { deleted: { $exists: false } }, - { deleted: { $exists: true, $eq: false } }], - - }, - { $set: { news_on: true } }, - { new: false }); - - } else if (mydata.dbop === 'SvuotaTuttiGliAccessiOnlineConToken') { - await User.SvuotaTuttiGliAccessiOnlineConToken(idapp); - } else if (mydata.dbop === 'SettaAdTypeOffro_In_Hosps') { - const { MyHosp } = require('../models/myhosp'); - - await MyHosp.SettaAdTypeOffro_In_Hosps(idapp); - } else if (mydata.dbop === 'removeRegulations') { - await Circuit.updateMany({}, { $set: { regulation: '' } }); - - } else if (mydata.dbop === 'newRecordsFav') { - // Passa le tabelle da users sulle nuove tabelle: - await User.moverecordsFavorite(1); - await User.moverecordsFavorite(2); - await User.moverecordsFavorite(3); - await User.moverecordsFavorite(4); - await User.moverecordsFavorite(5); - - } else if (mydata.dbop === 'emptyTabCatServiziBeni') { - - const { Sector } = require('../models/sector'); - const { SectorGood } = require('../models/sectorgood'); - const { Skill } = require('../models/skill'); - const { Good } = require('../models/good'); - - await Sector.deleteMany({}); - await SectorGood.deleteMany({}); - await Skill.deleteMany({}); - ris = await Good.deleteMany({}); - - } else if (mydata.dbop === 'emptyDbSkill') { - - // Svuota e Ricrea - - const { Sector } = require('../models/sector'); - const { SectorGood } = require('../models/sectorgood'); - const { Skill } = require('../models/skill'); - const { Good } = require('../models/good'); - const { SubSkill } = require('../models/subskill'); - const { Contribtype } = require('../models/contribtype'); - const { AdType } = require('../models/adtype'); - const { AdTypeGood } = require('../models/adtypegood'); - const { StatusSkill } = require('../models/statusSkill'); - const { CatGrp } = require('../models/catgrp'); - - await Sector.deleteMany({}); - await SectorGood.deleteMany({}); - await Skill.deleteMany({}); - await Good.deleteMany({}); - await SubSkill.deleteMany({}); - await Contribtype.deleteMany({}); - await AdType.deleteMany({}); - await AdTypeGood.deleteMany({}); - await StatusSkill.deleteMany({}); - await CatGrp.deleteMany({}); - - ris = await populate.popolaTabelleNuove(); - - } else if (mydata.dbop === 'ricreaTabCitiesProvinces') { - - // Svuota e Ricrea - - const { City } = require('../models/city'); - const { Province } = require('../models/province'); - - await City.deleteMany({}); - await Province.deleteMany({}); - - ris = await populate.popolaTabelleNuove(); - - } else if (mydata.dbop === 'PopulateTables') { - - ris = populate.popolaTabelleNuove(); - - } else if (mydata.dbop === 'dropProducts') { - - if (idapp) { - const deleteProducts = await Product.deleteMany({ idapp }); - console.log(`Cancellati ${deleteProducts.deletedCount} record dalla collezione Product.`); - - // Cancellazione dei record nella collezione ProductInfo - const deleteProductInfo = await ProductInfo.deleteMany({ idapp }); - console.log(`Cancellati ${deleteProductInfo.deletedCount} record dalla collezione ProductInfo.`); - } - - ris = deleteProductInfo ? true : false; - - } else if (mydata.dbop === 'dropCatProd') { - - const deleteCatProd = await CatProd.deleteMany({ idapp }); - - } else if (mydata.dbop === 'dropSubCatProd') { - - const deleteSubCatProd = await SubCatProd.deleteMany({ idapp }); - - } else if (mydata.dbop === 'dropAllOrders') { - - try { - const deleteOrder = await Order.deleteMany({ idapp }); - const deleteOrdersCart = await OrdersCart.deleteMany({ idapp }); - const deleteCart = await Cart.deleteMany({ idapp }); - - ris = deleteCart; - - } catch (e) { - console.error('Err:', e); - } - } else if (mydata.dbop === 'SistemaGasOrdine') { - const arrrec = await Product.find({}).lean(); - for (const rec of arrrec) { - if (tools.isArray(rec.idGasordines) && rec.idGasordines.length > 0) { - await Product.findByIdAndUpdate(rec._id, { $set: { idGasordine: rec.idGasordines[0] } }) - } else { - await Product.findByIdAndUpdate(rec._id, { $set: { idGasordine: null } }) - } - } - - } else if (mydata.dbop === 'CopyPriceToCalc') { - - try { - const arrrec = await OrdersCart.find({}).lean(); - for (const rec of arrrec) { - await OrdersCart.findByIdAndUpdate(rec._id, { $set: { totalPriceCalc: rec.totalPrice } }) - } - - const arrrec2 = await Order.find({}).lean(); - for (const rec of arrrec2) { - await Order.findByIdAndUpdate(rec._id, { $set: { TotalPriceProductCalc: rec.TotalPriceProduct } }) - } - - } catch (e) { - console.error('Err:', e); - } - - } else if (mydata.dbop === 'dropAllCarts') { - - ris = await Cart.deleteMany({ idapp }); - - } else if (mydata.dbop === 'RewriteCitiesTable') { - - ris = populate.rewriteTable('cities'); - } else if (mydata.dbop === 'RewriteLevelsTable') { - - ris = populate.rewriteTable('levels'); - - } else if (mydata.dbop === 'RewriteProvincesTable') { - - ris = populate.rewriteTable('provinces'); - - } else if (mydata.dbop === 'emptyCityProvinces') { - - const { City } = require('../models/city'); - const { Province } = require('../models/province'); - - await City.deleteMany({}); - await Province.deleteMany({}); - - } else if (mydata.dbop === 'ConvTablesFromIntToString') { - - const { MySkill } = require('../models/myskill'); - const { MyBacheca } = require('../models/mybacheca'); - const { MyHosp } = require('../models/myhosp'); - const { MyGood } = require('../models/mygood'); - // const { MyGroup } = require('../models/mygroup'); - - console.log('INIZIO - Conversioni'); - // 'myskills', - // 'mybachecas', - // 'myhosps', - // 'mygoods', - // 'mygroups' - - await ConvertiDaIntAStr(MySkill); - await ConvertiDaIntAStr(MyBacheca); - await ConvertiDaIntAStr(MyHosp); - await ConvertiDaIntAStr(MyGood); - await ConvertiDaIntAStr(MyGroup); - - console.log('FINE - Conversioni'); - - } else if (mydata.dbop === 'Removeinteger') { - - const { MySkill } = require('../models/myskill'); - const { MyBacheca } = require('../models/mybacheca'); - const { MyHosp } = require('../models/myhosp'); - const { MyGood } = require('../models/mygood'); - // const { MyGroup } = require('../models/mygroup'); - - console.log('INIZIO - Rimozione'); - - await RimuoviInteri(MySkill); - await RimuoviInteri(MyBacheca); - await RimuoviInteri(MyHosp); - await RimuoviInteri(MyGood); - await RimuoviInteri(MyGroup); - - console.log('FINE - Rimozione'); - - - } else if (mydata.dbop === 'createAllCircuits') { - const { Province } = require('../models/province'); - - const arrProv = await Province.find({}); - for (const recprov of arrProv) { - await Circuit.createCircuitIfNotExist(req, idapp, recprov.prov); - } - - } else if (mydata.dbop === 'correggiProductTypes') { - - await ProductInfo.correggiProductTypes(); - } else if (mydata.dbop === 'replaceProductImgToImageFile') { - - await ProductInfo.replaceProductImgToImageFile(true); - } else if (mydata.dbop === 'removeUploadProducts_Path') { - - await ProductInfo.replaceProductImgToImageFile(false); - - } else if (mydata.dbop === 'correggiCircuitiANull') { - - - await User.updateMany( - {}, - { $pull: { "profile.mycircuits": { "circuitname": null } } } - ); - - } else if (mydata.dbop === 'ImpostaMinMaxPersonali') { - - await Account.SetMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, ''); - - } else if (mydata.dbop === 'ImpostaMinMaxPersonaliCircuito') { - - await Account.SetMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, mydata.circuitId); - - } else if (mydata.dbop === 'ImpostaMinMaxComunitari') { - - await Account.SetMinMaxComunitari(idapp, mydata.valmin, mydata.valmax); - - } else if (mydata.dbop === 'ImpostaMinMaxCollettivi') { - - await Account.SetMinMaxCollettivi(idapp, mydata.valmin, mydata.valmax); - - } else if (mydata.dbop === 'ImpostaDefMinMaxPersonali') { - - await Circuit.SetDefMinMaxPersonali(idapp, mydata.valmin, mydata.valmax, mydata.circuitId); - - } else if (mydata.dbop === 'ImpostaDefMinMaxCollettivi') { - - await Circuit.SetDefMinMaxCollettivi(idapp, mydata.valmin, mydata.valmax, mydata.circuitId); - - } else if (mydata.dbop === 'AbilitaTuttiCircuiti') { - - await Circuit.AbilitaTuttiCircuiti(idapp); - - } else if (mydata.dbop === 'AzzeraRegolamentiTuttiCircuiti') { - - await Circuit.AzzeraRegolamentiTuttiCircuiti(idapp); - - } else if (mydata.dbop === 'setstrProvByIdCityCircuits') { - - await Circuit.setstrProvByIdCityCircuits(idapp); - - } else if (mydata.dbop === 'updateSaldoAndTransato_AllAccounts') { - - await Account.updateSaldoAndTransato_AllAccounts(idapp); - } else if (mydata.dbop === 'generateBotMenuRecords') { - - - await MyBot.generateBotMenuRecords(idapp); - - } else if (mydata.dbop === 'GenerateVapiKey') { - - await tools.generateVapiKey(); - - /*} else if (mydata.dbop === 'visuNave') { - mystr = await Nave.getNavePos(idapp, parseInt(mydata.riga), parseInt(mydata.col)); - - const visu_nave_Bot = await Settings.getValDbSettings(idapp, 'VISU_NAVE_BOT'); - if (visu_nave_Bot) - telegrambot.sendMsgTelegramToTheAdmin(idapp, mystr, true); - - ris = { mystr }; - } else if (mydata.dbop === 'getnavibyuser') { - - let arrnavi = null; - - const user = await User.getUserShortDataByUsername(idapp, mydata.username); - if (user) { - arrnavi = await Nave.getArrPosizioniByUsername(idapp, user.username); - - for (let mynave of arrnavi) { - mynave._doc.rec = await Nave.getNaveByRigaCol(idapp, mynave.riga, mynave.col); - } - - } - - ris = { data: arrnavi }; - - */ - } - - // console.log('ris', ris); - - return ris; - - } catch (e) { - console.log(e.message); - } -}; async function ConvertiDaIntAStr(mytable) { try { @@ -1717,9 +1178,10 @@ router.post('/dbop', authenticate, async (req, res) => { } try { - - const risOp = await eseguiDbOp(idapp, mydata, locale, req, res); + const cronMod = new CronMod(); + const risOp = await cronMod.eseguiDbOp(idapp, mydata, req, res); + return res.send({ code: server_constants.RIS_CODE_OK, data: risOp }); } catch (e) { diff --git a/src/server/server.js b/src/server/server.js index 29e4855..592863b 100755 --- a/src/server/server.js +++ b/src/server/server.js @@ -291,9 +291,6 @@ connectToDatabase(connectionUrl, options) } mycron(); - if (!process.env.VITE_DEBUG) { - mycron(); - } } @@ -342,12 +339,15 @@ connectToDatabase(connectionUrl, options) try { const sendemail = require('./sendemail'); - const arr = await tools.getApps(); + const { Cron } = require('./models/cron'); + const arr = await tools.getApps(); for (const app of arr) { await sendemail.checkifPendingNewsletter(app.idapp); await sendemail.checkifSentNewsletter(app.idapp); + await Cron.startJobCron(app.idapp); + } } catch (e) { console.error('Err mycron', e); @@ -413,7 +413,15 @@ connectToDatabase(connectionUrl, options) } - // Cron every X minutes + + // Esecuzione ogni 1 minuto (*/1 * * * *) + // La sintassi di cron è: + // 0 12 * * * comando + // che significa: esegui il comando ogni giorno alle 12:00 + // La sintassi di node-cron è: + // cron.schedule('0 12 * * *', () => { + // che significa: esegui il comando ogni giorno alle 12:00 + // La sintassi di node-cron con */1 esegue il comando ogni 1 minuto cron.schedule('*/1 * * * *', () => { // console.log('Running Cron Job'); // if (!process.env.VITE_DEBUG) { @@ -421,7 +429,8 @@ connectToDatabase(connectionUrl, options) // } }); - // Cron every X minutes + + // Cron every 1 HOUR cron.schedule('*/60 * * * *', async () => { if (!process.env.VITE_DEBUG) { mycron_30min(); diff --git a/src/server/tools/globalTables.js b/src/server/tools/globalTables.js index 56814e8..cf00835 100755 --- a/src/server/tools/globalTables.js +++ b/src/server/tools/globalTables.js @@ -47,6 +47,7 @@ const Pickup = require('../models/pickup'); const { Newstosent } = require('../models/newstosent'); const { MyPage } = require('../models/mypage'); const { MyElem } = require('../models/myelem'); +const { Cron } = require('../models/cron'); const { MyScheda } = require('../models/myscheda'); const { MyBot } = require('../models/bot'); const { CfgServer } = require('../models/cfgserver'); @@ -198,6 +199,8 @@ module.exports = { mytable = MyPage; else if (tablename === 'myelems') mytable = MyElem; + else if (tablename === 'crons') + mytable = Cron; else if (tablename === 'myschedas') mytable = MyScheda; else if (tablename === 'bots') diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 61f0a4a..f416e58 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -256,7 +256,7 @@ module.exports = { ], TABLES_USER_ID: ['mygroups', 'myskills', 'mybachecas', 'myhosps', 'mygoods'], TABLES_CREATEDBY: ['mygroups', 'circuits', 'attivitas'], - TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups', 'circuits', 'attivitas', 'myelems', 'mypages', 'productinfos', 'products', 'catalogs'], + TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups', 'circuits', 'attivitas', 'myelems', 'mypages', 'productinfos', 'products', 'catalogs', 'crons'], TABLES_FIELDS_DESCR_AND_CITY_AND_USER: ['myskills', 'mybachecas', 'myhosps', 'mygoods'], @@ -1210,6 +1210,7 @@ module.exports = { START: 1, FINISH: 10, PAUSE: 2, + ERR: -10, }, TERMINATED_WHY: { diff --git a/src/server/version.txt b/src/server/version.txt index f480e79..adf1ebc 100644 --- a/src/server/version.txt +++ b/src/server/version.txt @@ -1 +1 @@ -1.2.37 \ No newline at end of file +1.2.38 \ No newline at end of file