From 0d96cf72b66798e6e23904dcf33191ffb14aad84 Mon Sep 17 00:00:00 2001 From: paoloar77 Date: Sat, 15 Jan 2022 12:25:57 +0100 Subject: [PATCH] Richieste d'Amicizia: aggiunto data di richiesta e di amicizia --- src/server/models/user.js | 276 +++++++++++++++++++++++--------------- 1 file changed, 165 insertions(+), 111 deletions(-) diff --git a/src/server/models/user.js b/src/server/models/user.js index 17c810c..05e7b61 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -138,6 +138,9 @@ const UserSchema = new mongoose.Schema({ verified_by_aportador: { type: Boolean, }, + trust_modified: { + type: Date, + }, aportador_iniziale: { type: String, }, @@ -311,10 +314,19 @@ const UserSchema = new mongoose.Schema({ description: {type: String}, rating: {type: Number}, }], - friends: [], // username - req_friends: [], // username + friends: [ + { + _id: false, + username: {type: String}, + date: {type: Date}, + }], // username + req_friends: [ + { + _id: false, + username: {type: String}, + date: {type: Date}, + }], // username }, - }) ; @@ -1203,23 +1215,50 @@ UserSchema.statics.getUserProfileByUsername = async function(idapp, username) { }; -UserSchema.statics.getUsernameFriendsByUsername = async function( - idapp, username) { +UserSchema.statics.getArrUsernameFromFieldByUsername = async function( + idapp, username, field, subfield) { - return User.findOne({ + const myobj = {}; + myobj[field + '.' + subfield] = 1; + + let arrrec = await User.findOne({ idapp, 'username': username, $or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}], - }, {'profile.friends': 1}).then((rec) => rec ? rec._doc.profile.friends : []); + }, myobj).then((ris) => ris ? ris._doc[field][subfield] : []); + + if (arrrec.length > 0) { + return arrrec.map(m => m.username); + } + return []; + }; UserSchema.statics.getUsernameReqFriendsByUsername = async function( idapp, username) { - return User.findOne({ - idapp, 'username': username, - $or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}], - }, {'profile.req_friends': 1}). - then((rec) => rec ? rec._doc.profile.req_friends : []); + return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile', + 'req_friends'); + +}; + +UserSchema.statics.getUsernameFriendsByUsername = async function( + idapp, username) { + + return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile', + 'friends'); + +}; + +// Rimuovo l'Amicizia +UserSchema.statics.removeFriend = async function(idapp, username, usernameDest) { + return User.updateOne({idapp, username}, + {$pull: {'profile.friends': {username: {$in: [usernameDest]}}}}); +}; + +// Rimuovo la Richiesta di Amicizia +UserSchema.statics.removeReqFriend = async function(idapp, username, usernameDest) { + return User.updateOne({idapp, username: username}, + {$pull: {'profile.req_friends': {username: {$in: [usernameDest]}}}}); }; UserSchema.statics.setFriendsCmd = async function( @@ -1227,114 +1266,130 @@ UserSchema.statics.setFriendsCmd = async function( let ris = null; let update = {}; - if (cmd === shared_consts.FRIENDSCMD.SETTRUST) { + try { + if (cmd === shared_consts.FRIENDSCMD.SETTRUST) { - // Aggiungi alle amicizie - await this.setFriendsCmd(idapp, usernameOrig, usernameDest, shared_consts.FRIENDSCMD.SETFRIEND, value); + // Aggiungi alle amicizie + await this.setFriendsCmd(idapp, usernameOrig, usernameDest, + shared_consts.FRIENDSCMD.SETFRIEND, value); - return User.updateOne({idapp, username: usernameDest}, - {$set: {verified_by_aportador: value}}, {new: false}); + return User.updateOne({idapp, username: usernameDest}, + {$set: {verified_by_aportador: value, trust_modified: new Date()}}, + {new: false}); - } else if (cmd === shared_consts.FRIENDSCMD.SETFRIEND) { - // Aggiungo l'Amicizia a me - const foundIfAlreadyFriend = await User.findOne({ - idapp, - username: usernameOrig, - 'profile.friends': { - $elemMatch: {$eq: usernameDest}, - }, - }); + } else if (cmd === shared_consts.FRIENDSCMD.SETFRIEND) { + // Aggiungo l'Amicizia a me + const foundIfAlreadyFriend = await User.findOne({ + idapp, + username: usernameOrig, + 'profile.friends': { + $elemMatch: {$eq: {username: usernameDest}}, + }, + }); - if (!foundIfAlreadyFriend) { - update = {$push: {'profile.friends': [usernameDest]}}; - ris = await User.updateOne({idapp, username: usernameOrig}, update); + if (!foundIfAlreadyFriend) { + update = { + $push: { + 'profile.friends': { + username: usernameDest, + date: new Date(), + }, + }, + }; + ris = await User.updateOne({idapp, username: usernameOrig}, update); - update = {$pullAll: {'profile.req_friends': [usernameDest]}}; - ris = await User.updateOne({idapp, username: usernameOrig}, update); - } + update = {$pull: {'profile.req_friends': {username: {$in: [usernameDest]}}}}; + ris = await User.updateOne({idapp, username: usernameOrig}, update); + } - // Controlla se lui aveva già la mia amicizia - const foundIfAlreadyFriend2 = await User.findOne({ - idapp, - username: usernameDest, - 'profile.friends': { - $elemMatch: {$eq: usernameOrig}, - }, - }); + // Controlla se lui aveva già la mia amicizia + const foundIfAlreadyFriend2 = await User.findOne({ + idapp, + username: usernameDest, + 'profile.friends': { + $elemMatch: {$eq: {username: usernameOrig}}, + }, + }); - if (!foundIfAlreadyFriend2) { - update = {$push: {'profile.friends': [usernameOrig]}}; - ris = await User.updateOne({idapp, username: usernameDest}, update); - - update = {$pullAll: {'profile.req_friends': [usernameOrig]}}; - ris = await User.updateOne({idapp, username: usernameDest}, update); - } - if (ris) { - ris = await User.getInfoFriendByUsername(idapp, usernameDest); - } - } else if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) { - // Aggiungo l'Amicizia a me - const foundIfAlreadyAskFriend = await User.findOne({ - idapp, - username: usernameDest, - 'profile.req_friends': { - $elemMatch: {$eq: usernameOrig}, - }, - }); - - if (value) { - if (!foundIfAlreadyAskFriend) { - update = {$push: {'profile.req_friends': [usernameOrig]}}; + if (!foundIfAlreadyFriend2) { + update = { + $push: { + 'profile.friends': { + username: usernameOrig, + date: new Date(), + }, + }, + }; ris = await User.updateOne({idapp, username: usernameDest}, update); + + this.removeReqFriend(idapp, usernameDest, usernameOrig); // Rimuovo l'Amicizia da me } if (ris) { - // Invia una notifica alla persona - tools.sendNotificationByUsername(idapp, usernameDest, cmd, true); + ris = await User.getInfoFriendByUsername(idapp, usernameDest); } - } else { - if (foundIfAlreadyAskFriend) { - update = {$pullAll: {'profile.req_friends': [usernameOrig]}}; - ris = await User.updateOne({idapp, username: usernameDest}, update); + } else if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) { + // Aggiungo l'Amicizia a me + const foundIfAlreadyAskFriend = await User.findOne({ + idapp, + username: usernameDest, + 'profile.req_friends': { + $elemMatch: {$eq: {username: usernameOrig}}, + }, + }); + + if (value) { + if (!foundIfAlreadyAskFriend) { + update = { + $push: { + 'profile.req_friends': { + username: usernameOrig, + date: new Date(), + }, + }, + }; + ris = await User.updateOne({idapp, username: usernameDest}, update); + } + if (ris) { + // Invia una notifica alla persona + tools.sendNotificationByUsername(idapp, usernameDest, cmd, true); + } + } else { + if (foundIfAlreadyAskFriend) { + ris = await this.removeFriend(idapp, usernameDest, usernameOrig); // Rimuovo l'Amicizia da me + } } + + if (ris) { + ris = await User.getInfoAskFriendByUsername(idapp, usernameDest); + } + + } else if (cmd === shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS) { + + await this.removeFriend(idapp, usernameDest, usernameOrig); // Rimuovo l'Amicizia da lui + ris = await this.removeFriend(idapp, usernameOrig, usernameDest); // Rimuovo l'Amicizia da me + + } else if (cmd === shared_consts.FRIENDSCMD.CANCEL_REQ_FRIEND) { + + 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.BLOCK_USER) { + + await this.removeFriend(idapp, usernameDest, usernameOrig); // Rimuovo l'Amicizia da lui + await this.removeFriend(idapp, usernameOrig, usernameDest); // Rimuovo l'Amicizia da me + + // Blocco la persona + ris = await User.updateOne({idapp, username: usernameDest}, { + $set: { + blocked: true, + sospeso: true, + username_who_block: usernameOrig, + date_blocked: new Date(), + }, + }); } - - if (ris) { - ris = await User.getInfoAskFriendByUsername(idapp, usernameDest); - } - - } else if (cmd === shared_consts.FRIENDSCMD.REMOVE_FROM_MYFRIENDS) { - // Rimuovo l'Amicizia da lui - await User.updateOne({idapp, username: usernameDest}, - {$pullAll: {'profile.friends': [usernameOrig]}}); - // Rimuovo l'Amicizia da me - ris = await User.updateOne({idapp, username: usernameOrig}, - {$pullAll: {'profile.friends': [usernameDest]}}); - } else if (cmd === shared_consts.FRIENDSCMD.CANCEL_REQ_FRIEND) { - - // Rimuovo la Richiesta di Amicizia da lui - await User.updateOne({idapp, username: usernameDest}, - {$pullAll: {'profile.req_friends': [usernameOrig]}}); - // Rimuovo l'Amicizia da me - ris = await User.updateOne({idapp, username: usernameOrig}, - {$pullAll: {'profile.friends': [usernameDest]}}); - - } else if (cmd === shared_consts.FRIENDSCMD.BLOCK_USER) { - // Rimuovo l'Amicizia da lui - await User.updateOne({idapp, username: usernameDest}, - {$pullAll: {'profile.friends': [usernameOrig]}}); - // Rimuovo l'Amicizia da me - await User.updateOne({idapp, username: usernameOrig}, - {$pullAll: {'profile.friends': [usernameDest]}}); - - // Blocco la persona - ris = await User.updateOne({idapp, username: usernameDest}, { - $set: { - blocked: true, - sospeso: true, - username_who_block: usernameOrig, - date_blocked: new Date(), - }, - }); + } catch (e) { + console.error('Error: ', e); } return ris; @@ -1416,7 +1471,7 @@ UserSchema.statics.getAskedFriendsByUsername = async function(idapp, username) { return User.find({ idapp, 'profile.req_friends': { - $elemMatch: {$eq: username}, + $elemMatch: {$eq: {username: username}}, }, $or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}], }, whatToShow_Unknown).then((rec) => { @@ -1455,7 +1510,7 @@ UserSchema.statics.getFriendsByUsername = async function(idapp, username) { let listSentRequestFriends = await User.find({ idapp, 'profile.req_friends': { - $elemMatch: {$eq: username}, + $elemMatch: {$eq: {username: username}}, }, $or: [ {deleted: {$exists: false}}, @@ -1469,7 +1524,6 @@ UserSchema.statics.getFriendsByUsername = async function(idapp, username) { {deleted: {$exists: true, $eq: false}}], }, whatToShow); - return { listFriends, listRequestFriends, @@ -1487,7 +1541,7 @@ UserSchema.statics.getFriendsByUsername = async function(idapp, username) { listTrusted: [], listSentRequestFriends: [], - } + }; }; UserSchema.statics.getAportadorSolidarioByUsername = async function(