- Statistiche
- Menu e Sottomenu - Lista ultimi Movimenti
This commit is contained in:
181
src/server/models/stat.js
Executable file
181
src/server/models/stat.js
Executable file
@@ -0,0 +1,181 @@
|
||||
const mongoose = require('mongoose').set('debug', false);
|
||||
const Schema = mongoose.Schema;
|
||||
|
||||
mongoose.Promise = global.Promise;
|
||||
mongoose.level = 'F';
|
||||
|
||||
const tools = require('../tools/general');
|
||||
|
||||
const { User } = require('../models/user');
|
||||
const { Movement } = require('../models/movement');
|
||||
const { Circuit } = require('../models/circuit');
|
||||
const { MyGroup } = require('../models/mygroup');
|
||||
const { Settings } = require('../models/settings');
|
||||
|
||||
const shared_consts = require('../tools/shared_nodejs');
|
||||
const { ObjectID } = require('mongodb');
|
||||
|
||||
// Resolving error Unknown modifier: $pushAll
|
||||
mongoose.plugin(schema => {
|
||||
schema.options.usePushEach = true;
|
||||
});
|
||||
|
||||
const StatSchema = new Schema({
|
||||
...{
|
||||
_id: {
|
||||
type: String,
|
||||
},
|
||||
idapp: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
num_reg: {
|
||||
type: Number,
|
||||
},
|
||||
date_created: {
|
||||
type: Date,
|
||||
default: Date.now,
|
||||
},
|
||||
num_reg: Number,
|
||||
num_reg_today: Number,
|
||||
online_today: Number,
|
||||
activeusers: Number,
|
||||
num_teleg_attivo: Number,
|
||||
num_autorizzati: Number,
|
||||
num_autorizzare: Number,
|
||||
num_teleg_pending: Number,
|
||||
arr_nations: [],
|
||||
numreg_untilday: Number,
|
||||
reg_daily: [],
|
||||
reg_weekly: [],
|
||||
lastsreg: [],
|
||||
lastsonline: [],
|
||||
lastssharedlink: [],
|
||||
diffusorilist: [],
|
||||
receiveRislist: [],
|
||||
receiveRislistgroup: [],
|
||||
strettelist: [],
|
||||
num_transaz_tot: Number,
|
||||
tot_RIS_transati: Number,
|
||||
num_circuiti: Number,
|
||||
num_circuiti_attivi: Number,
|
||||
num_annunci: Number,
|
||||
last_transactions: [],
|
||||
},
|
||||
});
|
||||
|
||||
StatSchema.statics.updateStats = async function (datastat) {
|
||||
|
||||
datastat.last_transactions.forEach(function (mov) {
|
||||
let ris = tools.getStringaConto(mov)
|
||||
mov.myfrom = ris.myfrom
|
||||
mov.myto = ris.myto
|
||||
mov.tipocontofrom = ris.tipocontofrom
|
||||
mov.tipocontoto = ris.tipocontoto
|
||||
});
|
||||
|
||||
|
||||
return datastat;
|
||||
};
|
||||
|
||||
StatSchema.statics.calculateStats = async function (idapp) {
|
||||
const Stat = this;
|
||||
|
||||
try {
|
||||
|
||||
let datastat = {
|
||||
idapp,
|
||||
num_reg: await User.getUsersRegistered(idapp),
|
||||
num_reg_today: await User.getUsersRegisteredToday(idapp),
|
||||
online_today: await User.getUsersOnLineToday(idapp),
|
||||
activeusers: await User.getUsersOnLineActive(idapp),
|
||||
num_teleg_attivo: await User.getUsersTelegramAttivo(idapp),
|
||||
num_autorizzati: await User.getUsersAutorizzati(idapp),
|
||||
num_autorizzare: await User.getUsersAutorizzare(idapp),
|
||||
num_teleg_pending: await User.getUsersTelegramPending(idapp),
|
||||
arr_nations: await User.findAllDistinctNationality(idapp),
|
||||
numreg_untilday: await User.calcnumRegUntilDay(idapp),
|
||||
reg_daily: await User.calcRegDaily(idapp),
|
||||
reg_weekly: await User.calcRegWeekly(idapp),
|
||||
lastsreg: await User.getLastUsers(idapp),
|
||||
lastsonline: await User.getLastOnlineUsers(idapp),
|
||||
lastssharedlink: await User.getLastSharedLink(idapp),
|
||||
diffusorilist: await User.getDiffusoriUsers(idapp),
|
||||
receiveRislist: await User.getReceiveRISUsers(idapp),
|
||||
receiveRislistgroup: await MyGroup.getReceiveRISGroups(idapp),
|
||||
strettelist: await User.getBestStretteDiManoUsers(idapp),
|
||||
num_transaz_tot: await Movement.getTotal_Transactions(idapp),
|
||||
tot_RIS_transati: await Movement.getTot_RIS_Transati(idapp),
|
||||
num_circuiti: await Circuit.getnumCircuits(idapp),
|
||||
num_circuiti_attivi: await Circuit.getnumActiveCircuits(idapp),
|
||||
num_annunci: await User.getnumAnnunci(idapp),
|
||||
last_transactions: await Movement.getLastN_Transactions(idapp, 10),
|
||||
};
|
||||
|
||||
// Trova il record di oggi:
|
||||
const trova_se_oggi = await Stat.findOne({ idapp, date_created: { $gte: new Date(new Date().setHours(0, 0, 0, 0)) } });
|
||||
|
||||
if (trova_se_oggi) {
|
||||
// Aggiorna il record di oggi:
|
||||
await Stat.updateOne({ _id: trova_se_oggi._id }, { $set: datastat });
|
||||
} else {
|
||||
// Aggiungi un nuovo record:
|
||||
await Stat.insertMany([datastat]);
|
||||
}
|
||||
|
||||
return datastat;
|
||||
|
||||
} catch (e) {
|
||||
console.error('Error', e);
|
||||
return null;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
StatSchema.statics.getStats = async function (idapp) {
|
||||
const Stat = this;
|
||||
|
||||
const minuti = await Settings.getValDbSettings(idapp, 'NUMMINUTI_STAT', 30);
|
||||
|
||||
// Ottieni l'ultimo record salvato:
|
||||
const rec = await Stat.findOne({ idapp })
|
||||
.sort({ date_created: -1 })
|
||||
.lean();
|
||||
|
||||
let isOld = true;
|
||||
|
||||
if (rec) {
|
||||
// se rec.date_created è più vecchio di minuti fa, allora ricalcola.
|
||||
const dateCreated = new Date(rec.date_created);
|
||||
const now = new Date();
|
||||
|
||||
// Calcola la differenza in millisecondi
|
||||
const difference = now - dateCreated; // Differenza in millisecondi
|
||||
|
||||
// Controlla se la differenza è maggiore di 10 minuti (10 * 60 * 1000 ms)
|
||||
isOld = (difference > minuti * 60 * 1000);
|
||||
}
|
||||
|
||||
let datastat = null;
|
||||
|
||||
if (isOld) {
|
||||
datastat = await Stat.calculateStats(idapp);
|
||||
|
||||
} else {
|
||||
datastat = rec;
|
||||
}
|
||||
|
||||
datastat = await Stat.updateStats(datastat);
|
||||
|
||||
return datastat;
|
||||
|
||||
};
|
||||
|
||||
|
||||
const Stat = mongoose.model('Stat', StatSchema);
|
||||
|
||||
Stat.createIndexes((err) => {
|
||||
if (err) throw err;
|
||||
});
|
||||
|
||||
module.exports = { Stat };
|
||||
Reference in New Issue
Block a user