From 331c2e6780163fc7657df67d5f7d20fb3a5d7c6d Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Sun, 8 Jan 2023 19:20:02 +0100 Subject: [PATCH] Stringi la mano (fase prima) --- src/server/models/user.js | 137 ++++++++++++++++++++++++----- src/server/router/site_router.js | 1 + src/server/telegram/telegrambot.js | 8 +- src/server/tools/general.js | 24 ++++- src/server/tools/shared_nodejs.js | 2 + 5 files changed, 144 insertions(+), 28 deletions(-) diff --git a/src/server/models/user.js b/src/server/models/user.js index 71ace5b..fe1936e 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -1982,12 +1982,12 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use ris = await User.getInfoFriendByUsername(idapp, usernameDest); //} } else if (cmd === shared_consts.FRIENDSCMD.SETHANDSHAKE) { - // Aggiungo l'Amicizia a me + // Aggiungo la Stretta di mano a lui const foundIfAlreadyFriend = await User.findOne({ idapp, - username: usernameOrig, + username: usernameDest, 'profile.handshake': { - $elemMatch: { username: { $eq: usernameDest } }, + $elemMatch: { username: { $eq: usernameOrig } }, }, }, { _id: 1 }).lean(); @@ -1995,29 +1995,20 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use update = { $push: { 'profile.handshake': { - username: usernameDest, + username: usernameOrig, date: new Date(), }, }, }; - ris = await User.updateOne({ idapp, username: usernameOrig }, update); + ris = await User.updateOne({ idapp, username: usernameDest }, update); if (!disablenotif) { // Send a notification to the DESTINATION HANDSHAKE ! let req = tools.getReqByPar(idapp, usernameOrig); await SendNotif.createNewNotifToSingleUser(req, null, { usernameDest }, true, shared_consts.TypeNotifs.TYPEDIR_HANDSHAKE, shared_consts.TypeNotifs.ID_HANDSHAKE_ACCEPTED_MY_REQUEST); - - // Send a notification to the SENDER HANDSHAKEHIP ! - req = tools.getReqByPar(idapp, usernameDest); - await SendNotif.createNewNotifToSingleUser(req, null, { usernameDest: usernameOrig }, true, shared_consts.TypeNotifs.TYPEDIR_HANDSHAKE, - shared_consts.TypeNotifs.ID_HANDSHAKE_ACCEPTED); - } - update = { $pull: { 'profile.req_handshake': { username: { $in: [usernameDest] } } } }; - ris = await User.updateOne({ idapp, username: usernameOrig }, update); - if (ris) { try { if (!disablenotif) { @@ -2136,12 +2127,7 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use } else if (cmd === shared_consts.FRIENDSCMD.REMOVE_FROM_MYHANDSHAKE) { - // Rimuovi anche le eventuali richieste di Amicizia ! - await this.removeReqHandShake(idapp, usernameDest, usernameOrig); // Rimuovo la Richiesta di Amicizia da lui - await this.removeReqHandShake(idapp, usernameOrig, usernameDest); // Rimuovo la Richiesta di Amicizia da me - - await this.removeHandShake(idapp, usernameDest, usernameOrig); // Rimuovo l'Amicizia da lui - ris = await this.removeHandShake(idapp, usernameOrig, usernameDest); // Rimuovo l'Amicizia da me + ris = await this.removeHandShake(idapp, usernameDest, usernameOrig); // Rimuovo l'Amicizia da lui } else if (cmd === shared_consts.FRIENDSCMD.CANCEL_REQ_FRIEND) { @@ -2150,9 +2136,6 @@ UserSchema.statics.setFriendsCmd = async function (req, idapp, usernameOrig, use await SendNotif.createNewNotifToSingleUser(req, null, { usernameDest }, true, shared_consts.TypeNotifs.TYPEDIR_FRIENDS, shared_consts.TypeNotifs.ID_FRIENDS_REFUSED); - await this.removeReqFriend(idapp, usernameDest, usernameOrig); // Rimuovo la Richiesta di Amicizia da lui - ris = await this.removeFriend(idapp, usernameOrig, usernameDest); // Rimuovo l'Amicizia da me - } else if (cmd === shared_consts.FRIENDSCMD.CANCEL_REQ_HANDSHAKE) { // CREATE NOTIFICATION IN TABLE SENDNOTIF @@ -3946,6 +3929,18 @@ UserSchema.statics.getDiffusoriUsers = async function (idapp) { }; +UserSchema.statics.getBestStretteDiManoUsers = async function (idapp) { + const User = this; + + const lastn = 10; + + return await User.aggregate(User.getQueryUsersStretteDiMano(idapp)).then(ris => { + // console.table(ris); + return ris; + }); + +}; + UserSchema.statics.checkUser = async function (idapp, username) { const User = this; @@ -4152,6 +4147,102 @@ UserSchema.statics.getQueryUsersDiffusori = function (idapp) { return query; }; +UserSchema.statics.getQueryUsersStretteDiMano = function (idapp) { + + const query = [ + { + $match: { + idapp, + $or: [ + { + deleted: { + $exists: false, + }, + }, + { + deleted: { + $exists: true, + $eq: false, + }, + }, + ], + }, + }, + { + $group: { + _id: "$profile.handshake", + count: { + $sum: 1, + }, + }, + }, + { + $match: { "count": { $gte: 2 } } + }, + { + $sort: { + count: -1, + }, + }, + { $limit: 20 }, + { + $lookup: { + from: "users", + let: { + username: "$_id", + idapp, + }, + pipeline: [ + { + $match: { + $expr: { + $and: [ + { + $eq: [ + "$$username", + "$username", + ], + }, + { + $eq: [ + "$$idapp", + "$idapp", + ], + }, + ], + }, + }, + }, + ], + as: "user", + }, + }, + { $unwind: "$user" }, + { + $replaceRoot: { + newRoot: { + $mergeObjects: ["$user", "$$ROOT"], + }, + }, + }, + { + $project: { + _id: 0, + count: 1, + aportador_solidario: 1, + username: 1, + name: 1, + surname: 1, + lasttimeonline: 1, + idapp: 1, + "profile.img": 1, + 'profile.handshake': 1, + }, + }, + ]; + return query; +}; + UserSchema.statics.getUsersRegWeekly = function (idapp, nrec) { const query = [ diff --git a/src/server/router/site_router.js b/src/server/router/site_router.js index 7a27e38..08cf25e 100755 --- a/src/server/router/site_router.js +++ b/src/server/router/site_router.js @@ -50,6 +50,7 @@ router.post('/load', async (req, res) => { lastsonline: await User.getLastOnlineUsers(idapp), lastssharedlink: await User.getLastSharedLink(idapp), diffusorilist: await User.getDiffusoriUsers(idapp), + strettelist: await User.getBestStretteDiManoUsers(idapp), checkuser: await User.checkUser(idapp, username), // navi_partite: await Nave.getNaviPartite(idapp), // navi_in_partenza: await Nave.getNaviInPartenza(idapp), diff --git a/src/server/telegram/telegrambot.js b/src/server/telegram/telegrambot.js index 5b9385f..0775c41 100755 --- a/src/server/telegram/telegrambot.js +++ b/src/server/telegram/telegrambot.js @@ -879,7 +879,7 @@ const MyTelegramBot = { } } else if (myfunc === shared_consts.CallFunz.RICHIESTA_GRUPPO) { - domanda = printf(getstr(langdest, 'MSG_ACCEPT_NEWENTRY_INGROUP'), name) + '
' + struserinfomsg; + domanda = printf(getstr(langdest, 'MSG_ACCEPT_NEWENTRY_INGROUP'), name); keyb = cl.getInlineKeyboard(myuser.lang, [ { @@ -894,7 +894,7 @@ const MyTelegramBot = { } else if (myfunc === shared_consts.CallFunz.RICHIESTA_CIRCUIT) { if (groupname) { - domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP', locale: langdest }, groupname) + '
' + struserinfomsg; + domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY_BYGROUP', locale: langdest }, groupname); keyb = cl.getInlineKeyboard(myuser.lang, [ { @@ -909,7 +909,7 @@ const MyTelegramBot = { }, ]); } else { - domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest }, name) + '
' + struserinfomsg; + domanda = i18n.__({ phrase: 'CIRCUIT_ACCEPT_NEWENTRY', locale: langdest }, name); keyb = cl.getInlineKeyboard(myuser.lang, [ { @@ -956,7 +956,7 @@ const MyTelegramBot = { let typeid = 0; let paramsObj = {}; - const struserinfomsg = tools.getUserInfoMsg(idapp, myuser); + const struserinfomsg = tools.getUserShortInfoMsg(idapp, myuser); if (myfunc === shared_consts.CallFunz.RICHIESTA_AMICIZIA) { sendnotif = true; diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 259eefc..409a4dd 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -125,7 +125,7 @@ const textlang = { 'MSG_SEND_FROM': 'Msg Inviato da', 'ZOOM_CONFERMATO': 'Sei stato confermato ad aver visto la Video Conferenza di Benvenuto!', 'RICHIESTA_AMICIZIA': '๐ŸŒˆ Richiesta d\'Amicizia da parte di %s', - 'RICHIESTA_HANDSHAKE': '๐ŸŒˆ Richiesta Stretta di mano da parte di %s', + 'RICHIESTA_HANDSHAKE': '๐ŸŒˆ Confermi che hai conosciuto personalmente e dai la tua fiducia a %s ?', 'ACCETTATO_SUL_GRUPPO': 'โœ… Sei stato accettato da %s a far parte del Gruppo %s', 'CREATO_NUOVO_GRUPPO': 'โœ… Hai appena creato un nuovo Gruppo chiamato %s', 'ACCETTATO_NOTIFICA_ADMINS': 'โœ… l\'utente %s รจ stato accettato a far parte del Gruppo %s (da parte di %s)', @@ -3383,6 +3383,28 @@ module.exports = { return msg; }, + getUserShortInfoMsg: function (idapp, myuser, usernametelegram = '', name_telegram = '', + surname_telegram = '') { + + let msg = ''; + try { + const name = myuser.username + + (myuser.name ? ` (${myuser.name} ${myuser.surname})` : ''); + const linkuserprof = this.getHostByIdApp(idapp) + '/my/' + + myuser.username; + + let u_tg = myuser.profile && myuser.profile.hasOwnProperty('username_telegram') ? myuser.profile.username_telegram : usernametelegram; + + msg = `
Vedi Profilo sulla APP di ${name}`; + msg += `
Telegram: @${u_tg}`; + + } catch (e) { + console.error('getUserInfoMsg', e); + } + + return msg; + }, + getlinkRelativeRequestNewPassword: function (idapp, email, tokenforgot) { const strlinkreg = process.env.LINK_UPDATE_PASSWORD + `?idapp=${idapp}&email=${email}&tokenforgot=${tokenforgot}`; diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index 36496fb..5a839da 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -344,6 +344,8 @@ module.exports = { STATUS_FRIENDS_ACCEPTED: 1, STATUS_FRIENDS_REFUSED: 2, STATUS_FRIENDS_REPORTED: 3, + STATUS_HANDSHAKE_ACCEPTED: 10, + STATUS_HANDSHAKE_REFUSED: 11, }, GroupsNotifs: {