Add to the Circuit

Remove to the Circuit
Revoke request
Users Admins
This commit is contained in:
paoloar77
2022-09-02 02:25:38 +02:00
parent f55d69b7fe
commit 6bee366547
20 changed files with 598 additions and 274 deletions

View File

@@ -14,6 +14,7 @@ const {Graduatoria} = require('../models/graduatoria');
// const { ExtraList } = require('../models/extralist');
const {MyGroup} = require('../models/mygroup');
const {Circuit} = require('../models/circuit');
const {Account} = require('../models/account');
@@ -371,6 +372,13 @@ const UserSchema = new mongoose.Schema({
date: {type: Date},
}], // username
mycircuits: [
{
_id: false,
circuitname: {type: String},
date: {type: Date},
}], // username
notifs: [
{
_id: false,
@@ -1583,7 +1591,14 @@ UserSchema.statics.getUsernameGroupsByUsername = async function(
idapp, username) {
return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile',
'groups');
'mygroups');
};
UserSchema.statics.getUsernameCircuitsByUsername = async function(
idapp, username) {
return this.getArrUsernameFromFieldByUsername(idapp, username, 'profile',
'mycircuits');
};
@@ -1600,6 +1615,12 @@ UserSchema.statics.removeFromMyGroups = async function(
return User.updateOne({idapp, username},
{$pull: {'profile.mygroups': {groupname: {$in: [groupnameDest]}}}});
};
// Rimuovo il Gruppo
UserSchema.statics.removeFromCircuits = async function(idapp, username, circuitname) {
return User.updateOne({idapp, username},
{$pull: {'profile.mycircuits': {circuitname: {$in: [circuitname]}}}});
};
// Rimuovo il Gruppo per Tutti gli Utenti
UserSchema.statics.removeAllUsersFromMyGroups = async function(idapp, groupnameDest) {
@@ -1607,6 +1628,12 @@ UserSchema.statics.removeAllUsersFromMyGroups = async function(idapp, groupnameD
{$pull: {'profile.mygroups': {groupname: {$in: [groupnameDest]}}}});
};
// Rimuovo il Circuito per Tutti gli Utenti
UserSchema.statics.removeAllUsersFromMyCircuits = async function(idapp, circuitname) {
return User.updateMany({idapp},
{$pull: {'profile.mycircuits': {circuitname: {$in: [circuitname]}}}});
};
// Rimuovo la Richiesta di Amicizia
UserSchema.statics.removeReqFriend = async function(
idapp, username, usernameDest) {
@@ -1871,6 +1898,18 @@ UserSchema.statics.ifAlreadyInGroup = async function(idapp, usernameOrig, groupn
};
UserSchema.statics.ifAlreadyInCircuit = async function(idapp, usernameOrig, circuitname) {
// Controllo se è stato già inserito
return User.findOne({
idapp,
username: usernameOrig,
'profile.mycircuits': {
$elemMatch: {circuitname: {$eq: circuitname}},
},
}).lean();
};
UserSchema.statics.countUsersInGroup = async function(idapp, groupnameDest) {
// Controllo se è stato già inserito
@@ -1883,6 +1922,19 @@ UserSchema.statics.countUsersInGroup = async function(idapp, groupnameDest) {
};
UserSchema.statics.countUsersInCircuit = async function(idapp, circuitname) {
// Controllo se è stato già inserito
return User.countDocuments({
idapp,
'profile.mycircuits': {
$elemMatch: {circuitname: {$eq: name}},
},
});
};
UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameDest, cmd, value, username_action) {
let ris = null;
@@ -1984,6 +2036,12 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD
ris = await MyGroup.removeReqGroup(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.GROUPSCMD.REFUSE_REQ_GROUP) {
ris = await MyGroup.removeReqGroup(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me
ris = await MyGroup.refuseReqGroup(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_GROUP) {
await User.removeFromMyGroups(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me
@@ -2019,19 +2077,19 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD
return ris;
};
UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, name, cmd, value, username_action) {
UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, circuitname, cmd, value, username_action) {
let ris = null;
let update = {};
try {
if (cmd === shared_consts.CIRCUITCMD.SET) {
const foundIfAlreadyCircuit = await this.ifAlreadyInCircuit(idapp, usernameOrig, name);
const foundIfAlreadyCircuit = await this.ifAlreadyInCircuit(idapp, usernameOrig, circuitname);
if (!foundIfAlreadyCircuit) {
update = {
$push: {
'profile.mycircuits': {
circuitname: name,
circuitname,
date: new Date(),
},
},
@@ -2040,31 +2098,31 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, name, cmd
// Elimina la richiesta:
update = {$pull: {req_users: {username: {$in: [usernameOrig]}}}};
await Circuit.updateOne({idapp, groupname: name}, update);
await Circuit.updateOne({idapp, name: circuitname}, update);
// Elimina eventualmente se era bloccato:
update = {$pull: {refused_users: {username: {$in: [usernameOrig]}}}};
await Circuit.updateOne({idapp, groupname: name}, update);
await Circuit.updateOne({idapp, name: circuitname}, update);
} else {
ris = false;
}
if (ris) {
// Invia una notifica alla persona e agli Admin
tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, value, true, username_action);
ris = await Circuit.getInfoGroupByGroupname(idapp, name);
tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, value, true, username_action);
ris = await Circuit.getInfoCircuitByName(idapp, circuitname);
}
} else if (cmd === shared_consts.GROUPSCMD.REQGROUP) {
} else if (cmd === shared_consts.CIRCUITCMD.REQ) {
// Aggiungo la richiesta di Gruppo a me
const foundIfAlreadyAskGroup = await Circuit.findOne({
const foundIfAlreadyAskCircuit = await Circuit.findOne({
idapp,
groupname: name,
name: circuitname,
'req_users': {
$elemMatch: {username: {$eq: usernameOrig}},
},
});
if (value) {
if (!foundIfAlreadyAskGroup) {
if (!foundIfAlreadyAskCircuit) {
update = {
$push: {
'req_users': {
@@ -2073,83 +2131,70 @@ UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, name, cmd
},
},
};
ris = await Circuit.updateOne({idapp, groupname: name},
update);
ris = await Circuit.updateOne({idapp, name: circuitname}, update);
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, true, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, true, true, username_action);
}
} else {
if (foundIfAlreadyAskGroup) {
ris = await this.removeFromCircuits(idapp, usernameOrig, name); // Rimuovo il Gruppo da me
if (foundIfAlreadyAskCircuit) {
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo il Gruppo da me
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
}
}
if (ris) {
ris = await Circuit.getInfoGroupByGroupname(idapp, name);
}
ris = await Circuit.getInfoCircuitByName(idapp, circuitname);
} else if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_CIRCUIT) {
} else if (cmd === shared_consts.CIRCUITCMD.REMOVE_FROM_MYLIST) {
// Remove if is also an Admin
await Circuit.removeAdminOfMyCircuit(idapp, usernameOrig, name);
await Circuit.removeAdminOfMyCircuit(idapp, usernameOrig, circuitname);
ris = await User.removeFromCircuits(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
console.log('ris', ris);
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
} else if (cmd === shared_consts.GROUPSCMD.DELETE_GROUP) {
} else if (cmd === shared_consts.CIRCUITCMD.DELETE) {
ris = await User.removeFromCircuits(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
ris = await this.removeFromCircuits(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
if (ris) {
// Invia una notifica alla persona e agli Admin
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
}
ris = await Circuit.deleteGroup(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
console.log('ris', ris);
ris = await Circuit.deleteCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.GROUPSCMD.CANCEL_REQ_GROUP) {
} else if (cmd === shared_consts.CIRCUITCMD.CANCEL_REQ) {
ris = await Circuit.removeReqGroup(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
ris = await Circuit.removeReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_GROUP) {
} else if (cmd === shared_consts.CIRCUITCMD.REFUSE_REQ) {
await User.removeFromCircuits(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
ris = await Circuit.removeReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
// Blocco il Gruppo
ris = await Circuit.updateOne({idapp, groupname: name}, {
$set: {
blocked: true,
username_who_block: usernameOrig,
date_blocked: new Date(),
},
});
//++Todo: Send Notification to Admin and Group's manager
tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
ris = await Circuit.refuseReqCircuit(idapp, usernameOrig, circuitname); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.GROUPSCMD.ADDADMIN_OFCIRCUIT) {
ris = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, name); // Rimuovo la richiesta di entrare nel gruppo
} else if (cmd === shared_consts.CIRCUITCMD.ADDADMIN) {
ris = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
} else if (cmd === shared_consts.GROUPSCMD.REMOVEADMIN_OFCIRCUIT) {
ris = await Circuit.removeAdminOfCircuit(idapp, usernameOrig, name); // Rimuovo la richiesta di entrare nel gruppo
} else if (cmd === shared_consts.CIRCUITCMD.REMOVEADMIN) {
ris = await Circuit.removeAdminOfCircuit(idapp, usernameOrig, circuitname); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
await tools.sendNotificationByCircuit(idapp, usernameOrig, circuitname, cmd, false, true, username_action);
}
} catch (e) {
console.error('Error: ', e);
console.error('Error setCircuitCmd: ', e);
}
return ris;
@@ -3635,7 +3680,7 @@ UserSchema.statics.DbOp = async function(idapp, mydata) {
};
UserSchema.statics.addExtraInfo = async function(idapp, recUser) {
UserSchema.statics.addExtraInfo = async function(idapp, recUser, req) {
try {
const listSentMyRequestFriends = await User.find({
@@ -3694,15 +3739,11 @@ UserSchema.statics.addExtraInfo = async function(idapp, recUser) {
? listManageGroups
: [];
// UserAccounts
const listUserAccounts = await Account.getAccountsByUsername(idapp, recUser.username);
recUser._doc.profile.listUserAccounts = listUserAccounts
? listUserAccounts
: [];
// Circuit
const circuitobj = await Circuit.getCircuitsByUsername(idapp, recUser.username, req);
recUser._doc.profile = {...recUser._doc.profile, ...circuitobj};
return recUser._doc;