From 671a39e51cd23be52e713a32a47634d7aab31ced Mon Sep 17 00:00:00 2001 From: Paolo Arena Date: Fri, 16 Sep 2022 17:38:49 +0200 Subject: [PATCH] fix Saldo when press refuse coins. fix Risolvere problema del ritardo quando si fa il primo login... --- ecosystem.config.js | 2 +- src/server/locales/en.json | 2 - src/server/locales/it.json | 4 +- src/server/models/circuit.js | 8 +- src/server/models/user.js | 109 +++++++++++++++++--------- src/server/router/index_router.js | 20 +++++ src/server/router/sendnotif_router.js | 40 ++++++++-- src/server/router/subscribe_router.js | 1 + src/server/router/users_router.js | 15 ++-- src/server/server.js | 15 +++- src/server/tools/shared_nodejs.js | 8 ++ 11 files changed, 162 insertions(+), 62 deletions(-) diff --git a/ecosystem.config.js b/ecosystem.config.js index 2d0f518..44c2279 100755 --- a/ecosystem.config.js +++ b/ecosystem.config.js @@ -7,7 +7,7 @@ module.exports = { watch: false, env: { "PORT": 3000, - "NODE_ENV": "development" + "NODE_ENV": "development", }, env_test: { "PORT": 3001, diff --git a/src/server/locales/en.json b/src/server/locales/en.json index 92de6b2..22f99fb 100755 --- a/src/server/locales/en.json +++ b/src/server/locales/en.json @@ -54,8 +54,6 @@ "ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "%s %s accettati da %s.", "ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s.", "ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s.", - "CIRCUIT_AMOUNT_EXCEED_FIDO": "L'importo supera la quantità massima concessa", - "CIRCUIT_AMOUNT_EXCEED_QTAMAX": "L'importo supera la quantità massima che il destinatario può accumulare", "CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s", "STATUS_SENT": "Inviato", "STATUS_REFUSED": "Rifiutato" diff --git a/src/server/locales/it.json b/src/server/locales/it.json index 4846465..00a8e13 100644 --- a/src/server/locales/it.json +++ b/src/server/locales/it.json @@ -57,8 +57,8 @@ "ID_CIRCUIT_COINS_ACCEPTED_TO_ME": "%s %s sono stati accettati da %s.", "ID_CIRCUIT_COINS_REFUSED": "%s %s rifiutati da %s.", "ID_CIRCUIT_COINS_REFUSED_TO_ME": "%s %s rifiutati da %s.", - "CIRCUIT_AMOUNT_EXCEED_FIDO": "L'importo supera la quantità massima concessa", - "CIRCUIT_AMOUNT_EXCEED_QTAMAX": "L'importo supera la quantità massima che il destinatario può accumulare", + "CIRCUIT_AMOUNT_EXCEED_FIDO": "L'importo supera la quantità massima concessa per %s", + "CIRCUIT_AMOUNT_EXCEED_QTAMAX": "L'importo supera la quantità massima che il destinatario (%s) può accumulare", "CIRCUIT_COINS_ALREADY_PROCESSED": "La richiesta è stata già processata. Stato %s", "STATUS_SENT": "Inviato", "STATUS_REFUSED": "Rifiutato" diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index c94e962..a2184ec 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -485,16 +485,18 @@ CircuitSchema.statics.sendCoins = async function(onlycheck, idapp, usernameOrig, // Check if Sender has enough money if (accountorigTable.saldo - myqty < -accountorigTable.fidoConcesso) { ris.cansend = false; - ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO'); + ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_FIDO', usernameOrig); } if (accountdestTable.saldo + myqty > accountorigTable.qta_maxConcessa) { ris.cansend = false; - ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX'); + ris.errormsg = i18n.__('CIRCUIT_AMOUNT_EXCEED_QTAMAX', extrarec.dest); } if (!onlycheck) { // Add a Transaction ! - ris.rec = await Movement.addMov(idapp, accountorigTable, accountdestTable, myqty, extrarec.causal); + if (ris.cansend) { + ris.rec = await Movement.addMov(idapp, accountorigTable, accountdestTable, myqty, extrarec.causal); + } if (ris.cansend && ris.rec) { diff --git a/src/server/models/user.js b/src/server/models/user.js index 0fefa2d..67bc70c 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -1375,6 +1375,9 @@ UserSchema.statics.getUserProfileByUsername = async function( lang: 1, index: 1, username: 1, + aportador_solidario: 1, + name: 1, + surname: 1, deleted: 1, sospeso: 1, reported: 1, @@ -1382,12 +1385,28 @@ UserSchema.statics.getUserProfileByUsername = async function( username_who_report: 1, verified_email: 1, verified_by_aportador: 1, - aportador_solidario: 1, - date_reg: 1, + 'profile.nationality': 1, + 'profile.mygroups': 1, + 'profile.mycircuits': 1, + 'profile.qualifica': 1, + 'profile.biografia': 1, + 'profile.teleg_id': 1, 'profile.username_telegram': 1, + 'profile.firstname_telegram': 1, + 'profile.lastname_telegram': 1, + 'profile.intcode_cell': 1, + 'profile.cell': 1, + 'profile.website': 1, 'profile.img': 1, - "useraport.username": 1, - "useraport.profile.img": 1, + 'profile.sex': 1, + 'profile.dateofbirth': 1, + 'profile.born_city_id': 1, + 'profile.born_province': 1, + 'profile.born_country': 1, + email: 1, + date_reg: 1, + 'useraport.username': 1, + 'useraport.profile.img': 1, }; } else if (perm === tools.Perm.PERM_FRIEND) { @@ -1425,8 +1444,8 @@ UserSchema.statics.getUserProfileByUsername = async function( 'profile.born_country': 1, email: 1, date_reg: 1, - "useraport.username": 1, - "useraport.profile.img": 1, + 'useraport.username': 1, + 'useraport.profile.img': 1, }; } else if (perm === tools.Perm.PERM_ALL) { @@ -1467,8 +1486,8 @@ UserSchema.statics.getUserProfileByUsername = async function( 'comune': 1, email: 1, date_reg: 1, - "useraport.username": 1, - "useraport.profile.img": 1, + 'useraport.username': 1, + 'useraport.profile.img': 1, }; } @@ -1488,28 +1507,33 @@ UserSchema.statics.getUserProfileByUsername = async function( }, }, { - "$lookup": { - "from": 'users', + '$lookup': { + 'from': 'users', let: { - "idapp": "$idapp", - "user_name": "$aportador_solidario" + 'idapp': '$idapp', + 'user_name': '$aportador_solidario', }, pipeline: [ - { "$match": { - "$expr": { + { + '$match': { + '$expr': { $and: [ - { $eq: ['$username', '$$user_name'] }, - { $eq: ['$idapp','$$idapp'] } - ] - } - } - } + {$eq: ['$username', '$$user_name']}, + {$eq: ['$idapp', '$$idapp']}, + ], + }, + }, + }, ], - as: 'useraport' - } + as: 'useraport', + }, }, { - $unwind:'$useraport' + $unwind: + { + path: '$useraport', + preserveNullAndEmptyArrays: true, + }, }, { @@ -1833,17 +1857,20 @@ UserSchema.statics.setFriendsCmd = async function(req, idapp, usernameOrig, user if (ris) { // Send a notification to the DESTINATION! // Sei stato segnalato da %s per comportamenti non idonei. Contatta %s per chiarimenti - await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest, username_action}, false, shared_consts.TypeNotifs.TYPEDIR_FRIENDS, + await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest, username_action}, false, + shared_consts.TypeNotifs.TYPEDIR_FRIENDS, shared_consts.TypeNotifs.ID_FRIENDS_REPORTED); // Send a notification to the SENDER ! // Hai segnalato %s da %s per comportamenti non idonei. - await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest: username_action, username_action}, false, shared_consts.TypeNotifs.TYPEDIR_FRIENDS, + await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest: username_action, username_action}, false, + shared_consts.TypeNotifs.TYPEDIR_FRIENDS, shared_consts.TypeNotifs.ID_FRIENDS_REPORTED); if (usernameOrig !== telegrambot.ADMIN_USER_SERVER) { // Send a notification to the Admin - await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest: telegrambot.ADMIN_USER_SERVER, username_action, isAdmin: true}, false, + await SendNotif.createNewNotifToSingleUser(req, null, + {username_worked, usernameDest: telegrambot.ADMIN_USER_SERVER, username_action, isAdmin: true}, false, shared_consts.TypeNotifs.TYPEDIR_FRIENDS, shared_consts.TypeNotifs.ID_FRIENDS_REPORTED); } @@ -1862,7 +1889,8 @@ UserSchema.statics.setFriendsCmd = async function(req, idapp, usernameOrig, user if (ris) { // Send a notification to the DESTINATION! - await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest, username_action}, false, shared_consts.TypeNotifs.TYPEDIR_FRIENDS, + await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest, username_action}, false, + shared_consts.TypeNotifs.TYPEDIR_FRIENDS, shared_consts.TypeNotifs.ID_FRIENDS_UNBLOCKED); // Send a notification to the SENDER ! @@ -1873,7 +1901,8 @@ UserSchema.statics.setFriendsCmd = async function(req, idapp, usernameOrig, user if (usernameOrig !== telegrambot.ADMIN_USER_SERVER) { // Send a notification to the Admin - await SendNotif.createNewNotifToSingleUser(req, null, {username_worked, usernameDest: telegrambot.ADMIN_USER_SERVER, username_action, isAdmin: true}, false, + await SendNotif.createNewNotifToSingleUser(req, null, + {username_worked, usernameDest: telegrambot.ADMIN_USER_SERVER, username_action, isAdmin: true}, false, shared_consts.TypeNotifs.TYPEDIR_FRIENDS, shared_consts.TypeNotifs.ID_FRIENDS_UNBLOCKED); } @@ -1936,7 +1965,6 @@ UserSchema.statics.countUsersInCircuit = async function(idapp, circuitname) { }; - UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameDest, cmd, value, username_action) { let ris = null; @@ -2212,7 +2240,8 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna if (outres.cansend) { // Invia una notifica di moneta alla persona - outres.result = await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); + outres.result = await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, + extrarec); } else { outres.cansend = false; } @@ -2239,10 +2268,8 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitna outres.cansend = true; } - if (outres.cansend) { - // Invia una notifica di moneta alla persona - await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); - } + // Invia una notifica di moneta (accettata o rifiutata) alla persona + await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action, extrarec); outres.recnotif = await SendNotif.getRecNotif(extrarec.notifId); @@ -3772,9 +3799,13 @@ UserSchema.statics.addExtraInfo = async function(idapp, recUser) { try { - if (recUser._doc.profile.notifs.length <= 0) { - recUser._doc.profile.notifs = shared_consts.DEFAULT_NOTIFS_USER; - await recUser.save(); + try { + if (recUser._doc.profile && recUser._doc.profile.notifs && recUser._doc.profile.notifs.length <= 0) { + recUser._doc.profile.notifs = shared_consts.DEFAULT_NOTIFS_USER; + await recUser.save(); + } + } catch (e) { + console.error('Err addExtraInfo notifs ', e); } const listSentMyRequestFriends = await User.find({ @@ -3841,10 +3872,12 @@ UserSchema.statics.addExtraInfo = async function(idapp, recUser) { recUser._doc.profile = {...recUser._doc.profile, ...circuitobj, useraccounts}; + recUser._doc.calcstat = await User.calculateStat(idapp, recUser.username); + return recUser._doc; } catch (e) { - console.error('Err', e); + console.error('Err addExtraInfo', e); } return recUser; diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 1d6a25a..a946915 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -218,6 +218,26 @@ router.post('/testServer', authenticate_noerror, async (req, res) => { }); +router.get('/test1', authenticate_noerror, async (req, res) => { + + try { + const test = req.query.test; + let ris = {test}; + + if (req.user) { + await tools.sendNotificationToUser(req.user._id, 'Test Server', + 'Test Server OK', + '/', '', 'server', []); + } + + return res.send(ris); + } catch (e) { + console.error('testServer', e.message); + return res.status(400).send(e); + } + +}); + router.post('/settable', authenticate, async (req, res) => { const params = req.body; const mytable = globalTables.getTableByTableName(params.table); diff --git a/src/server/router/sendnotif_router.js b/src/server/router/sendnotif_router.js index feb8a82..27c2326 100755 --- a/src/server/router/sendnotif_router.js +++ b/src/server/router/sendnotif_router.js @@ -1,3 +1,4 @@ + const express = require('express'); const router = express.Router(); @@ -7,6 +8,9 @@ const server_constants = require('../tools/server_constants'); const {authenticate} = require('../middleware/authenticate'); const {SendNotif} = require('../models/sendnotif'); +const {User} = require('../models/user'); + +const shared_consts = require('../tools/shared_nodejs'); const _ = require('lodash'); @@ -27,20 +31,29 @@ router.post('/', authenticate, async (req, res) => { }); -router.get('/setall/:username/:idapp', authenticate, async (req, res) => { +router.get('/setall/:username/:qualinotif/:idapp', authenticate, async (req, res) => { const idapp = req.params.idapp; const username = req.params.username; + const qualinotif = req.params.qualinotif; const username_call = req.user.username; try { if (username === username_call) { - const arrNotifs = await SendNotif.find({idapp, dest: username, read: false}).lean(); + let query = {idapp, dest: username, read: false}; + + if (qualinotif === shared_consts.QualiNotifs.CIRCUITS) { + query.typedir = {$eq: shared_consts.TypeNotifs.TYPEDIR_CIRCUITS}; + } else if (qualinotif === shared_consts.QualiNotifs.OTHERS) { + query.typedir = {$neq: shared_consts.TypeNotifs.TYPEDIR_CIRCUITS}; + } + const arrNotifs = await SendNotif.find(query).lean(); if (arrNotifs) { for (const rec of arrNotifs) { await SendNotif.setNotifAsRead(idapp, username_call, rec._id); } } + res.send(true); } } catch (e) { @@ -58,6 +71,7 @@ router.get('/del/:username/:id/:idapp', authenticate, async (req, res) => { try { if (username === username_call) { + await SendNotif.findOneAndRemove({idapp, _id: myid}); return res.send(true); } @@ -69,15 +83,23 @@ router.get('/del/:username/:id/:idapp', authenticate, async (req, res) => { }); -router.get('/delall/:username/:idapp', authenticate, async (req, res) => { +router.get('/delall/:username/:qualinotif/:idapp', authenticate, async (req, res) => { const idapp = req.params.idapp; const username = req.params.username; + const qualinotif = req.params.qualinotif; const username_call = req.user.username; try { if (username === username_call) { - const ris = await SendNotif.deleteMany({idapp, dest: username}); + let query = {idapp, dest: username}; + + if (qualinotif === shared_consts.QualiNotifs.CIRCUITS) { + query.typedir = {$eq: shared_consts.TypeNotifs.TYPEDIR_CIRCUITS}; + } else if (qualinotif === shared_consts.QualiNotifs.OTHERS) { + query.typedir = {$neq: shared_consts.TypeNotifs.TYPEDIR_CIRCUITS}; + } + const ris = await SendNotif.deleteMany(query); if (ris) return res.send(true); } @@ -101,12 +123,14 @@ router.get('/:username/:lastdataread/:idapp', authenticate, (req, res) => { return res.status(404).send({code: server_constants.RIS_CODE_NOT_MY_USERNAME}); } - return SendNotif.findAllNotifByUsernameIdAndIdApp(username, lastdataread, idapp).then((arrnotif) => { + return SendNotif.findAllNotifByUsernameIdAndIdApp(username, lastdataread, idapp).then( async (arrnotif) => { // const wait = new Promise((resolve, reject) => { // setTimeout(() => { - return res.send({arrnotif}); - // }, 2000); - // }); + + //++Todo: Ottimizzare ! Non occorre inviare tutti questi dati !!! Solo per il Circuito ?! + const user = await User.getExtraInfoByUsername(idapp, req.user.username); + + return res.send({arrnotif, user } ); }).catch((e) => { console.log(e.message); diff --git a/src/server/router/subscribe_router.js b/src/server/router/subscribe_router.js index b09d021..009d33a 100755 --- a/src/server/router/subscribe_router.js +++ b/src/server/router/subscribe_router.js @@ -76,6 +76,7 @@ router.post('/', authenticate, async (req, res) => { if (req.body.options !== null) { tools.sendBackNotif(subscription, req.body.options); } + console.log('Subscription saved... ') return res.send({data: 'Subscription saved.'}); } }); diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index b1d63ee..705ce65 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -387,11 +387,12 @@ router.post('/profile', authenticate, (req, res) => { //++Todo: controlla che tipo di dati ha il permesso di leggere - // Check if ìs a Notif to read - const idnotif = req.body['idnotif'] ? req.body['idnotif'] : ''; - SendNotif.setNotifAsRead(idapp, usernameOrig, idnotif); try { + // Check if ìs a Notif to read + const idnotif = req.body['idnotif'] ? req.body['idnotif'] : ''; + SendNotif.setNotifAsRead(idapp, usernameOrig, idnotif); + return User.getUserProfileByUsername(idapp, username, req.user.username, false, req.user.perm). then((ris) => { @@ -444,7 +445,7 @@ router.post('/panel', authenticate, async (req, res) => { if (!!myuser) { res.send(myuser); } else { - tools.mylog('ERRORE IN panel: ' + e.message); + tools.mylog('ERRORE IN panel: '); res.status(400).send(); } } catch (e) { @@ -455,7 +456,7 @@ router.post('/panel', authenticate, async (req, res) => { }); router.post('/notifs', authenticate, async (req, res) => { - const notifs = req.body['notifs']; + /* const notifs = req.body['notifs']; idapp = req.body.idapp; locale = req.body.locale; @@ -479,6 +480,8 @@ router.post('/notifs', authenticate, async (req, res) => { res.status(400).send(); } + */ + }); router.post('/login', (req, res) => { @@ -559,7 +562,7 @@ router.post('/login', (req, res) => { // console.log('res', myris.token, myris.usertosend); // SEND TOKEN AND CODE RESULT - res.header('x-auth', myris.token).send({ + return res.header('x-auth', myris.token).send({ usertosend: myris.usertosend, code: server_constants.RIS_CODE_OK, subsExistonDb: myris.subsExistonDb, diff --git a/src/server/server.js b/src/server/server.js index eee04c0..b711626 100755 --- a/src/server/server.js +++ b/src/server/server.js @@ -48,7 +48,18 @@ if ((process.env.NODE_ENV === 'production') || }; var https = require('https'); } else { - var http = require('http'); + if (process.env.HTTPS_LOCALHOST) { + var privateKey = fs.readFileSync(process.env.PATH_CERT_KEY, 'utf8'); + var certificate = fs.readFileSync(process.env.PATH_SERVER_CRT, 'utf8'); + var credentials = { + key: privateKey, + cert: certificate, + }; + var https = require('https'); + + } else { + var http = require('http'); + } } console.log('DB: ' + process.env.DATABASE); @@ -220,7 +231,7 @@ myLoad().then(ris => { } if ((process.env.NODE_ENV === 'production') || - (process.env.NODE_ENV === 'test')) { + (process.env.NODE_ENV === 'test') || process.env.HTTPS_LOCALHOST) { var httpsServer = https.createServer(credentials, app); console.log('httpsServer: port ', port); httpsServer.listen(port); diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 1579db2..8b71ebc 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -361,6 +361,11 @@ module.exports = { STATUS_COINS_REFUSED_SENT: 63, }, + QualiNotifs: { + CIRCUITS: 1, + OTHERS: 2, + }, + TypeNotifs: { TYPEDIR_BACHECA: 1, ID_BACHECA_NEW_GOOD: 1, @@ -410,6 +415,9 @@ module.exports = { TYPEDIR_MSGS: 7, ID_MSGS_NEW_REC: 1, + + TYPEDIR_TEST: 444, + ID_TEST_NEW_REC: 1, },