From 4158731731bca936cb676b88503b3a1fe80baaa2 Mon Sep 17 00:00:00 2001 From: paoloar77 Date: Wed, 12 Jan 2022 00:38:47 +0100 Subject: [PATCH] Friends, search --- src/server/models/user.js | 85 +++++++++++++++++++++------- src/server/router/index_router.js | 2 +- src/server/tools/general.js | 6 ++ src/server/tools/server_constants.js | 2 + src/server/tools/shared_nodejs.js | 2 + 5 files changed, 75 insertions(+), 22 deletions(-) diff --git a/src/server/models/user.js b/src/server/models/user.js index 25ce4e6..84c61a1 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -1211,62 +1211,79 @@ UserSchema.statics.getUsernameFriendsByUsername = async function( }, {'profile.friends': 1}).then((rec) => rec ? rec._doc.profile.friends : []); }; -UserSchema.statics.setFriendsCmd = async function(idapp, usernameOrig, usernameDest, cmd, value) { +UserSchema.statics.setFriendsCmd = async function( + idapp, usernameOrig, usernameDest, cmd, value) { let ris = null; - let update = { }; + let update = {}; if (cmd === shared_consts.FRIENDSCMD.SETTRUST) { return User.updateOne({idapp, username: usernameDest}, - { $set: { verified_by_aportador: value } }, { new: false } ); + {$set: {verified_by_aportador: value}}, {new: false}); } else if (cmd === shared_consts.FRIENDSCMD.SETFRIEND) { // Aggiungo l'Amicizia a me const foundIfAlreadyFriend = await User.findOne({ idapp, + username: usernameOrig, members: { - $elemMatch: { 'profile.friends': usernameOrig } - } + $elemMatch: {'profile.friends': usernameDest}, + }, }); - update = { $push: { 'profile.friends': [usernameOrig] } }; if (!foundIfAlreadyFriend) { + update = {$push: {'profile.friends': [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, members: { - $elemMatch: { 'profile.friends': usernameOrig } - } + $elemMatch: {'profile.friends': usernameOrig}, + }, }); - update = { $push: { 'profile.friends': [usernameOrig] } }; - if (!foundIfAlreadyFriend) { - ris = await User.updateOne({idapp, username: usernameOrig}, update); + if (!foundIfAlreadyFriend2) { + update = {$push: {'profile.friends': [usernameOrig]}}; + ris = await User.updateOne({idapp, username: usernameDest}, update); + } + if (ris) { + ris = await User.getInfoFriendByUsername(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] } }); + 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] } }); + 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] } }); + 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] } }); + 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() } }); + ris = await User.updateOne({idapp, username: usernameDest}, { + $set: { + blocked: true, + sospeso: true, + username_who_block: usernameOrig, + date_blocked: new Date(), + }, + }); } return ris; }; - -UserSchema.statics.getFriendsByUsername = async function(idapp, username) { - - const whatToShow = { +function getWhatToShow(idapp, username) { + //++Todo: check which data to show + return { username: 1, aportador_solidario: 1, name: 1, @@ -1288,7 +1305,24 @@ UserSchema.statics.getFriendsByUsername = async function(idapp, username) { date_reg: 1, }; - const arrUsernameFriends = await User.getUsernameFriendsByUsername(idapp, username); +} + +UserSchema.statics.getInfoFriendByUsername = async function(idapp, username) { + + const whatToShow = getWhatToShow(idapp, username); + + return User.findOne({ + idapp, + username, + $or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}], + }, whatToShow).then((rec) => !!rec ? rec._doc : null); + +}; +UserSchema.statics.getFriendsByUsername = async function(idapp, username) { + + const whatToShow = getWhatToShow(idapp, username); + const arrUsernameFriends = await User.getUsernameFriendsByUsername(idapp, + username); const listFriends = await User.find({ idapp, @@ -1728,8 +1762,17 @@ UserSchema.statics.getFieldsForSearch = function() { {field: 'aportador_solidario', type: tools.FieldType.string}]; }; +UserSchema.statics.getFieldsForSearchUserFriend = function() { + return [{field: 'username', type: tools.FieldType.exact}]; +}; + UserSchema.statics.executeQueryTable = function(idapp, params) { params.fieldsearch = this.getFieldsForSearch(); + if (params.options) { + if (tools.isBitActive(params.options, shared_consts.OPTIONS_SEARCH_ONLY_FULL_WORDS)) { + params.fieldsearch = this.getFieldsForSearchUserFriend(); + } + } return tools.executeQueryTable(this, idapp, params); }; diff --git a/src/server/router/index_router.js b/src/server/router/index_router.js index 5da5d65..b8fcd58 100755 --- a/src/server/router/index_router.js +++ b/src/server/router/index_router.js @@ -1585,7 +1585,7 @@ function uploadFile(req, res, version) { form.on('file', async function(name, file) { try { console.log('Uploaded ' + file.name); - const mydir = tools.getdirByIdApp(idapp) + dirmain + '/upload/' + dir; + const mydir = tools.getdirByIdApp(idapp) + dirmain + server_constants.DIR_UPLOAD + '/' + dir; // Create Dir if doesn't exist: tools.mkdirpath(mydir); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index 623c00f..98576f0 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -1256,6 +1256,12 @@ module.exports = { filtriadded.push(...params.filtersearch); } + if (params.options) { + if (this.isBitActive(params.options, shared_consts.OPTIONS_SEARCH_ONLY_FULL_WORDS)) { + + } + } + if (filtriadded) { if (filtriadded.length > 0) query.push({$match: {$and: filtriadded}}); diff --git a/src/server/tools/server_constants.js b/src/server/tools/server_constants.js index 6e9b9f5..a83e1eb 100755 --- a/src/server/tools/server_constants.js +++ b/src/server/tools/server_constants.js @@ -94,6 +94,8 @@ module.exports = Object.freeze({ PREFIX_IMG: 'm_', PREFIX_IMG_SMALL: 'sm_', + DIR_UPLOAD: '/upload', //'/upload' + Privacy: { all: 'all', friends: 'friends', diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index d79b4f2..8deca98 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -32,6 +32,8 @@ module.exports = { FILTER_MYSKILL_SKILL: 1, + OPTIONS_SEARCH_ONLY_FULL_WORDS: 1, + FRIENDSCMD: { SETTRUST: 121, SETFRIEND: 132,