- Add to Friends

- remove from Friend list
- Cancel Ask Friend
.... OK !
This commit is contained in:
paoloar77
2022-01-14 23:54:33 +01:00
parent 4158731731
commit e5a0ecb6ce
4 changed files with 254 additions and 47 deletions

View File

@@ -312,6 +312,7 @@ const UserSchema = new mongoose.Schema({
rating: {type: Number},
}],
friends: [], // username
req_friends: [], // username
},
})
@@ -1211,6 +1212,16 @@ UserSchema.statics.getUsernameFriendsByUsername = async function(
}, {'profile.friends': 1}).then((rec) => rec ? rec._doc.profile.friends : []);
};
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 : []);
};
UserSchema.statics.setFriendsCmd = async function(
idapp, usernameOrig, usernameDest, cmd, value) {
@@ -1218,6 +1229,9 @@ UserSchema.statics.setFriendsCmd = async function(
let update = {};
if (cmd === shared_consts.FRIENDSCMD.SETTRUST) {
// 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});
@@ -1226,32 +1240,68 @@ UserSchema.statics.setFriendsCmd = async function(
const foundIfAlreadyFriend = await User.findOne({
idapp,
username: usernameOrig,
members: {
$elemMatch: {'profile.friends': usernameDest},
'profile.friends': {
$elemMatch: {$eq: usernameDest},
},
});
if (!foundIfAlreadyFriend) {
update = {$push: {'profile.friends': [usernameDest]}};
ris = await User.updateOne({idapp, username: usernameOrig}, update);
update = {$pullAll: {'profile.req_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},
'profile.friends': {
$elemMatch: {$eq: 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]}};
ris = await User.updateOne({idapp, username: usernameDest}, update);
}
if (ris) {
// Invia una notifica alla persona
tools.sendNotificationByUsername(idapp, usernameDest, cmd, true);
}
} else {
if (foundIfAlreadyAskFriend) {
update = {$pullAll: {'profile.req_friends': [usernameOrig]}};
ris = await User.updateOne({idapp, username: usernameDest}, update);
}
}
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},
@@ -1259,6 +1309,15 @@ UserSchema.statics.setFriendsCmd = async function(
// 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},
@@ -1307,6 +1366,24 @@ function getWhatToShow(idapp, username) {
}
function getWhatToShow_Unknown(idapp, username) {
return {
username: 1,
aportador_solidario: 1,
name: 1,
// deleted: 1,
// sospeso: 1,
verified_email: 1,
verified_by_aportador: 1,
'profile.img': 1,
'profile.sex': 1,
'profile.born_province': 1,
'profile.born_country': 1,
date_reg: 1,
};
}
UserSchema.statics.getInfoFriendByUsername = async function(idapp, username) {
const whatToShow = getWhatToShow(idapp, username);
@@ -1318,25 +1395,99 @@ UserSchema.statics.getInfoFriendByUsername = async function(idapp, username) {
}, whatToShow).then((rec) => !!rec ? rec._doc : null);
};
UserSchema.statics.getInfoAskFriendByUsername = async function(
idapp, username) {
const whatToShow = getWhatToShow_Unknown(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.getAskedFriendsByUsername = async function(idapp, username) {
const whatToShow_Unknown = getWhatToShow_Unknown(idapp, username);
return User.find({
idapp,
'profile.req_friends': {
$elemMatch: {$eq: username},
},
$or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}],
}, whatToShow_Unknown).then((rec) => {
//return rec.map(m => m.username);
});
};
UserSchema.statics.getFriendsByUsername = async function(idapp, username) {
const whatToShow = getWhatToShow(idapp, username);
const arrUsernameFriends = await User.getUsernameFriendsByUsername(idapp,
username);
try {
const whatToShow = getWhatToShow(idapp, username);
const whatToShow_Unknown = getWhatToShow_Unknown(idapp, username);
const arrUsernameFriends = await User.getUsernameFriendsByUsername(idapp,
username);
const arrUsernameReqFriends = await User.getUsernameReqFriendsByUsername(
idapp, username);
const listFriends = await User.find({
idapp,
username: {$in: arrUsernameFriends},
$or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}],
}, whatToShow);
let listFriends = await User.find({
idapp,
username: {$in: arrUsernameFriends},
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow);
const listTrusted = await User.find({
idapp, aportador_solidario: username,
$or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}],
}, whatToShow);
let listRequestFriends = await User.find({
idapp,
username: {$in: arrUsernameReqFriends},
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow_Unknown);
return ({listFriends, listTrusted});
let listSentRequestFriends = await User.find({
idapp,
'profile.req_friends': {
$elemMatch: {$eq: username},
},
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow_Unknown);
let listTrusted = await User.find({
idapp, aportador_solidario: username,
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow);
return {
listFriends,
listRequestFriends,
listTrusted,
listSentRequestFriends,
};
} catch (e) {
console.log('Error', e);
}
return {
listFriends: [],
listRequestFriends: [],
listTrusted: [],
listSentRequestFriends: [],
}
};
UserSchema.statics.getAportadorSolidarioByUsername = async function(
@@ -1769,7 +1920,8 @@ UserSchema.statics.getFieldsForSearchUserFriend = function() {
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)) {
if (tools.isBitActive(params.options,
shared_consts.OPTIONS_SEARCH_ONLY_FULL_WORDS)) {
params.fieldsearch = this.getFieldsForSearchUserFriend();
}
}