Add Movement !

This commit is contained in:
Paolo Arena
2022-09-03 13:06:58 +02:00
parent 6bee366547
commit d262f94315
18 changed files with 599 additions and 323 deletions

View File

@@ -45,6 +45,13 @@ const AccountSchema = new Schema({
type: Boolean,
default: false,
},
date_created: {
type: Date,
default: Date.now,
},
date_updated: {
type: Date,
},
});
AccountSchema.statics.findAllIdApp = async function(idapp) {
@@ -86,6 +93,7 @@ AccountSchema.statics.executeQueryTable = function(idapp, params) {
return tools.executeQueryTable(this, idapp, params);
};
AccountSchema.statics.getAccountsByUsername = async function(idapp, username) {
const Account = this;
@@ -100,6 +108,99 @@ AccountSchema.statics.getAccountsByUsername = async function(idapp, username) {
return await Account.find(myquery).lean();
};
AccountSchema.statics.getUserAccounts = async function(idapp, username) {
try {
let aggr1 = [
{
$match: {idapp, username},
},
{
$lookup: {
from: 'circuits',
localField: 'circuitId',
foreignField: '_id',
as: 'circuit',
},
},
{
'$replaceRoot': {
'newRoot': {
'$mergeObjects': [
{
'$arrayElemAt': [
'$circuit',
0,
],
},
'$$ROOT',
],
},
},
},
{
$project: {
"circuit.name": 1,
},
},
];
ris = await this.aggregate(aggr1);
return ris;
}catch (e) {
console.error('e', e);
}
};
AccountSchema.statics.addtoSaldo = async function(id, amount) {
const Account = this;
if (!id)
return false;
const myaccount = await Account.findById(id);
if (myaccount) {
myaccount.saldo = myaccount.saldo + amount;
myaccount.date_updated = new Date();
return myaccount.save();
}
return null;
};
AccountSchema.statics.getAccountByUsernameAndCircuitId = async function(idapp, username, circuitId, createifnotexist) {
const Account = this;
if (username === undefined)
return false;
const myquery = {
'idapp': idapp,
'username': username,
circuitId,
};
let myaccount = await Account.findOne(myquery).lean();
if (!myaccount && createifnotexist) {
myaccount = new Account({
idapp,
username,
circuitId,
deperibile: false,
importo_iniziale: 0,
saldo: 0,
});
return myaccount.save();
}
return myaccount;
};
const Account = mongoose.model('Account', AccountSchema);

View File

@@ -47,7 +47,6 @@ const BotSchema = new Schema({
},
date_updated: {
type: Date,
default: Date.now,
},
});

View File

@@ -14,6 +14,9 @@ mongoose.plugin(schema => {
});
const CircuitSchema = new Schema({
_id: {
type: String,
},
Num: {
type: Number,
unique: true,
@@ -60,11 +63,11 @@ const CircuitSchema = new Schema({
},
symbol: {
type: String,
maxlength: 3,
maxlength: 7,
},
abbrev: {
type: String,
maxlength: 3,
maxlength: 7,
},
compara_valuta: {
type: Number,
@@ -142,11 +145,22 @@ const CircuitSchema = new Schema({
}], // username
deleted: {
type: Boolean,
default: false,
},
});
}, );
CircuitSchema.pre('save', async function(next) {
if (this.isNew) {
const myrec = await Circuit.findOne().limit(1).sort({_id: -1});
if (!!myrec) {
if (myrec._doc.Num === 0)
this.Num = 1;
else
this.Num = myrec._doc.Num + 1;
} else {
this.Num = 1;
}
this.date_created = new Date();
}
@@ -158,9 +172,11 @@ CircuitSchema.pre('save', async function(next) {
CircuitSchema.statics.findAllIdApp = async function(idapp) {
const Circuit = this;
const myfind = {idapp};
const myfind = {idapp, deleted: false};
return await Circuit.find(myfind, (err, arrrec) => {
const whatToShow = this.getWhatToShow(idapp, '');
return await Circuit.find(myfind, whatToShow, (err, arrrec) => {
return arrrec;
});
};
@@ -347,11 +363,50 @@ CircuitSchema.statics.getInfoCircuitByName = async function(idapp, name) {
};
CircuitSchema.statics.getCircuitByName = async function(idapp, name) {
const myfind = {
idapp,
name,
};
try {
return await Circuit.findOne(myfind).lean();
} catch (e) {
return null;
}
};
CircuitSchema.statics.deleteCircuit = async function(idapp, usernameOrig, name) {
console.log('Circuito ' + name + ' rimosso da ' + usernameOrig);
return Circuit.findOneAndRemove({idapp, name});
};
CircuitSchema.statics.sendCoins = async function(idapp, usernameOrig, extrarec) {
console.log('Aggiungi Monete');
const {Movement} = require('../models/movement');
const {Account} = require('../models/account');
try {
const reccircuit = Circuit.getCircuitByName(extrarec.circuitname);
const myqty = extrarec.qty;
const accountdest = await Account.getAccountByUsernameAndCircuitId(idapp, extrarec.dest, reccircuit._id, true);
const accountorig = await Account.getAccountByUsernameAndCircuitId(idapp, usernameOrig, reccircuit._id, true);
// Add a Transaction !
Movement.addMov(accountorig, accountdest, myqty, extrarec.causal);
}catch (e) {
console.error('Err sendCoins', e);
}
};
// Rimuovo la Richiesta del Circuito
CircuitSchema.statics.removeReqCircuit = async function(idapp, username, name) {

View File

@@ -85,6 +85,30 @@ MovementSchema.statics.executeQueryTable = function(idapp, params) {
return tools.executeQueryTable(this, 0, params);
};
MovementSchema.statics.addMov = async function(accountFromId, accountToId, amount, causal) {
const {Account} = require('../models/account');
let mymov = Movement(
{
transactionDate: new Date(),
accountFromId,
accountToId,
amount,
causal,
residual: 0,
// expiringDate:
}
);
// Update saldo dell'Account
Account.addtoSaldo(accountToId, amount);
Account.addtoSaldo(accountFromId, -amount);
return mymov.save();
};
const Movement = mongoose.model('Movement', MovementSchema);
module.exports = {Movement};

View File

@@ -83,7 +83,6 @@ const MyBachecaSchema = new Schema({
},
date_updated: {
type: Date,
default: Date.now,
},
});

View File

@@ -84,7 +84,6 @@ const MyGoodSchema = new Schema({
},
date_updated: {
type: Date,
default: Date.now,
},
});

View File

@@ -89,7 +89,6 @@ const MyHospSchema = new Schema({
},
date_updated: {
type: Date,
default: Date.now,
},
});

View File

@@ -87,7 +87,6 @@ const MySkillSchema = new Schema({
},
date_updated: {
type: Date,
default: Date.now,
},
});

View File

@@ -75,6 +75,9 @@ const sendNotifSchema = new Schema({
extrafield: {
type: String,
},
extrarec: {
type: Object,
},
tag: {
type: String,
},
@@ -295,12 +298,16 @@ sendNotifSchema.statics.getDescrAndLinkByRecNotif = function(recnotif) {
tag = 'addadmingrp';
} else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_REMOVED_ADMIN) {
if (userorig === recnotif.paramsObj.usernameDest) {
newdescr = i18n.__('CIRCUITS_REMOVED_ADMIN_YOU', recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action);
newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN_YOU', recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action);
} else {
newdescr = i18n.__('CIRCUITS_REMOVED_ADMIN', userorig, recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action);
newdescr = i18n.__('CIRCUIT_REMOVED_ADMIN', userorig, recnotif.paramsObj.circuitnameDest, recnotif.paramsObj.username_action);
recnotif.openUrl = '/my/' + userorig;
}
tag = 'removeadmincircuit';
} else if (recnotif.typeid === shared_consts.TypeNotifs.ID_CIRCUIT_SENDCOINSREQ) {
newdescr = i18n.__('CIRCUIT_SENDCOINSREQ', recnotif.paramsObj.username_action, recnotif.paramsObj.extrarec.qty, recnotif.paramsObj.extrarec.symbol);
tag = 'sendcoin';
recnotif.openUrl = '/circuit/' + recnotif.paramsObj.path; //++Todo: dove lo mando ?
}
}
@@ -543,6 +550,7 @@ sendNotifSchema.statics.getExtraParam = function(myrecnotif, paramsObj) {
out.paramsObj = paramsObj;
out.options = paramsObj.options ? paramsObj.options : [];
out.typesend = paramsObj.typesend ? paramsObj.typesend : 0;
out.extrarec = paramsObj.extrarec ? paramsObj.extrarec : {};
if (myrecnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_CIRCUITS) {
out.extrafield = paramsObj.circuitnameDest ? paramsObj.circuitnameDest : '';
} else if (myrecnotif.typedir === shared_consts.TypeNotifs.TYPEDIR_GROUPS) {

View File

@@ -1407,6 +1407,7 @@ UserSchema.statics.getUserProfileByUsername = async function(
verified_by_aportador: 1,
'profile.nationality': 1,
'profile.mygroups': 1,
'profile.mycircuits': 1,
'profile.qualifica': 1,
'profile.biografia': 1,
'profile.teleg_id': 1,
@@ -1446,6 +1447,7 @@ UserSchema.statics.getUserProfileByUsername = async function(
notask_verif: 1,
'profile.nationality': 1,
'profile.mygroups': 1,
'profile.mycircuits': 1,
'profile.qualifica': 1,
'profile.biografia': 1,
'profile.teleg_id': 1,
@@ -1928,7 +1930,7 @@ UserSchema.statics.countUsersInCircuit = async function(idapp, circuitname) {
return User.countDocuments({
idapp,
'profile.mycircuits': {
$elemMatch: {circuitname: {$eq: name}},
$elemMatch: {circuitname: {$eq: circuitname}},
},
});
@@ -2077,7 +2079,7 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD
return ris;
};
UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitname, cmd, value, username_action) {
UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitname, cmd, value, username_action, extrarec) {
let ris = null;
let update = {};
@@ -2108,7 +2110,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
}
if (ris) {
// Invia una notifica alla persona e agli Admin
tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action);
tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action, extrarec);
ris = await Circuit.getInfoCircuitByName(idapp, circuitname);
}
} else if (cmd === shared_consts.CIRCUITCMD.REQ) {
@@ -2135,14 +2137,14 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, true, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, true, true, username_action, extrarec);
}
} else {
if (foundIfAlreadyAskCircuit) {
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
}
}
@@ -2157,7 +2159,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
console.log('ris', ris);
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.DELETE) {
@@ -2165,7 +2167,7 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
if (ris) {
// Invia una notifica alla persona e agli Admin
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
}
ris = await Circuit.deleteCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
@@ -2184,13 +2186,23 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna
ris = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) {
ris = await Circuit.removeAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_REQ) {
// Invia una notifica di moneta alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
} else if (cmd === shared_consts.CIRCUITCMD.SENDCOINS_ACCEPT) {
ris = await Circuit.sendCoins(idapp, usernameOrig, extrarec);
// Invia una notifica di moneta alla persona
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec);
}
} catch (e) {
@@ -2216,6 +2228,7 @@ function getWhatToShow(idapp, username) {
notask_verif: 1,
'profile.nationality': 1,
'profile.mygroups': 1,
'profile.mycircuits': 1,
'profile.qualifica': 1,
'profile.biografia': 1,
'profile.username_telegram': 1,
@@ -3739,11 +3752,13 @@ UserSchema.statics.addExtraInfo = async function(idapp, recUser, req) {
? listManageGroups
: [];
// Circuit
// Circuit>
const circuitobj = await Circuit.getCircuitsByUsername(idapp, recUser.username, req);
recUser._doc.profile = {...recUser._doc.profile, ...circuitobj};
const useraccounts = await Account.getUserAccounts(idapp, recUser.username);
recUser._doc.profile = {...recUser._doc.profile, ...circuitobj, useraccounts};
return recUser._doc;