- 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) {
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({
let listFriends = await User.find({
idapp,
username: {$in: arrUsernameFriends},
$or: [{deleted: {$exists: false}}, {deleted: {$exists: true, $eq: false}}],
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow);
const listTrusted = await User.find({
let listRequestFriends = await User.find({
idapp,
username: {$in: arrUsernameReqFriends},
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow_Unknown);
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}}],
$or: [
{deleted: {$exists: false}},
{deleted: {$exists: true, $eq: false}}],
}, whatToShow);
return ({listFriends, listTrusted});
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();
}
}

View File

@@ -1333,6 +1333,10 @@ function load(req, res, version) {
orderscart = OrdersCart.getOrdersCartByUserId(req.user.id, idapp, 0);
}
}
let askedfriends = []
if (req.user) {
// askedfriends = User.getAskedFriendsByUsername(idapp, req.user.username);
}
return Promise.all([
bookedevent,
@@ -1368,8 +1372,11 @@ function load(req, res, version) {
// console.table(arrdata);
const myuser = req.user;
if (myuser) {
try {
myuser.password = '';
myuser._doc.calcstat = arrdata[13];
// myuser._doc.profile.asked_friends = arrdata[30];
} catch (e) {}
}
if (version < 91) {
res.send({

View File

@@ -8,6 +8,8 @@ require('../config/config');
require('../models/subscribers');
const printf = require('util').format;
const Site = require('../models/site');
const CryptoJS = require('crypto-js');
@@ -117,9 +119,9 @@ const textlang = {
'NAVE': 'NAVE',
'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',
},
si: {
},
si: {},
es: {
'L\'Email è già stata Verificata': 'El correo electrónico ya ha sido verificado',
'Nuova Registrazione': 'Nuevo Registro',
@@ -670,11 +672,12 @@ module.exports = {
publicKey: process.env.PUBLIC_VAPI_KEY,
},
TTL: payload.ttl,
headers: {}
headers: {},
};
// Pass object into sendNotification
return webpush.sendNotification(subscription, JSON.stringify(payload), pushOptions).
return webpush.sendNotification(subscription, JSON.stringify(payload),
pushOptions).
catch(err => {
if (err.statusCode === 410) {
// Gone: is not valid anymore (Expired probably!), so I have to delete from my db
@@ -794,6 +797,45 @@ module.exports = {
});
},
sendNotificationByUsername: async function(idapp, username, cmd, telegram) {
var {User} = require('../models/user');
const user = await User.findOne({idapp, username}, {_id: 1, lang: 1});
if (!user)
return;
let userId = user._id;
let lang = user.lang;
let title = this.getNomeAppByIdApp(idapp);
let descr = '';
let openUrl = '/';
let tag = '';
let actions = [];
if (cmd) {
if (cmd === shared_consts.FRIENDSCMD.REQFRIEND) {
descr = printf(this.get__('RICHIESTA_AMICIZIA', lang) , username);
openUrl = '/my/' + username;
tag = 'reqfriends';
}
}
if (userId) {
this.sendNotificationToUser(userId, title, descr, openUrl, '', tag, actions);
}
if (telegram) {
const telegrambot = require('../telegram/telegrambot');
const idtelegram = await User.TelegIdByUsername(idapp, username);
await telegrambot.sendMsgTelegramByIdTelegram(idapp, idtelegram, descr);
}
},
// **********************
// SORT WITH PREV_ID
// **********************
@@ -929,7 +971,8 @@ module.exports = {
const myapp =
this.getApps().find(item => item.idapp === idapp);
if (myapp) {
let siteport = (myapp.portapp && myapp.portapp !== '0') ? (':' + myapp.portapp) : '';
let siteport = (myapp.portapp && myapp.portapp !== '0') ? (':' +
myapp.portapp) : '';
if (process.env.NODE_ENV === 'test')
return myapp.host_test + siteport;
@@ -1035,14 +1078,14 @@ module.exports = {
},
getLookup: function(params, num, pass_proj) {
const query = []
const query = [];
if (!params)
return;
let mylkLF = params.lk_LF;
if (params.af_objId_tab) {
const myobj = {}
const myobj = {};
myobj['myId' + num] = {'$toObjectId': '$' + params.lk_LF};
query.push(
{'$addFields': myobj},
@@ -1053,9 +1096,9 @@ module.exports = {
}
if (params.lk_tab) {
let proj = params.lk_proj
let proj = params.lk_proj;
if (!!pass_proj) {
proj = pass_proj
proj = pass_proj;
}
query.push(
{
@@ -1096,7 +1139,6 @@ module.exports = {
let query = [];
if (params.filter && params.fieldsearch) {
let myregexp = {};
@@ -1160,9 +1202,11 @@ module.exports = {
if (params.filterand.includes(
shared_consts.FILTER_USER_CODICE_AUTH_TELEGRAM))
filtriadded.push({'profile.teleg_checkcode': {$gt: 1}});
if (params.filterand.includes(shared_consts.FILTER_USER_NO_EMAIL_VERIFICATA))
if (params.filterand.includes(
shared_consts.FILTER_USER_NO_EMAIL_VERIFICATA))
filtriadded.push({verified_email: false});
if (params.filterand.includes(shared_consts.FILTER_USER_NO_VERIFIED_APORTADOR))
if (params.filterand.includes(
shared_consts.FILTER_USER_NO_VERIFIED_APORTADOR))
filtriadded.push({
$or: [
{verified_by_aportador: {$exists: false}},
@@ -1245,8 +1289,8 @@ module.exports = {
if (params.filtercustom) {
for (const myfilter of params.filtercustom) {
if (myfilter["userId"]) {
myfilter["userId"] = ObjectID(myfilter["userId"]);
if (myfilter['userId']) {
myfilter['userId'] = ObjectID(myfilter['userId']);
}
filtriadded.push(myfilter);
}
@@ -1257,7 +1301,8 @@ module.exports = {
}
if (params.options) {
if (this.isBitActive(params.options, shared_consts.OPTIONS_SEARCH_ONLY_FULL_WORDS)) {
if (this.isBitActive(params.options,
shared_consts.OPTIONS_SEARCH_ONLY_FULL_WORDS)) {
}
}
@@ -1286,13 +1331,12 @@ module.exports = {
if (numrowend < 0)
numrowend = 1;
if (newvers) {
// NUOVA VERSIONE
let proj = params.lookup2 ? params.lookup2.lk_proj : null;
const q1 = this.getLookup(params.lookup1, 1, proj);
if (q1) query = [...query, ...q1]
if (q1) query = [...query, ...q1];
const q2 = this.getLookup(params.lookup2, 2, proj);
if (q2) query = [...query, ...q2];
@@ -1312,10 +1356,9 @@ module.exports = {
} else {
// VECCHIA VERSIONE
const q1 = this.getLookup(params, 1);
if (q1) query = [...query, ...q1]
if (q1) query = [...query, ...q1];
}
query.push(
{
$group: {
@@ -1920,11 +1963,11 @@ module.exports = {
},
extractFileName: function(filename) {
return path.basename(filename)
return path.basename(filename);
},
extractFilePath: function(filename) {
return path.dirname(filename)
return path.dirname(filename);
},
delete(mypath, alsothumb, callback) {
@@ -1932,7 +1975,8 @@ module.exports = {
fs.unlink(mypath, function(err) {
if (alsothumb) {
try {
let img_small = path.dirname(mypath) + '/' + server_constants.PREFIX_IMG_SMALL + path.basename(mypath);
let img_small = path.dirname(mypath) + '/' +
server_constants.PREFIX_IMG_SMALL + path.basename(mypath);
fs.unlink(img_small, () => {});
} catch (e) {
console.error(err);
@@ -2223,7 +2267,7 @@ module.exports = {
},
isNumber(n) {
return typeof(n) != "boolean" && !isNaN(n) && n;
return typeof (n) != 'boolean' && !isNaN(n) && n;
},
getNumObj(obj) {
let count = 0;

View File

@@ -36,9 +36,13 @@ module.exports = {
FRIENDSCMD: {
SETTRUST: 121,
REQFRIEND: 125,
SETFRIEND: 132,
REMOVE_FROM_MYFRIENDS: 144,
REFUSE_REQ_FRIEND: 145,
CANCEL_REQ_FRIEND: 146,
BLOCK_USER: 155,
FIND_PEOPLE: 166,
},
REPORT_FILT_RESP: 1,