Richieste d'Amicizia: aggiunto data di richiesta e di amicizia

This commit is contained in:
paoloar77
2022-01-15 12:25:57 +01:00
parent e5a0ecb6ce
commit 0d96cf72b6

View File

@@ -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(