Circuit go on...

This commit is contained in:
paoloar77
2022-08-30 17:00:48 +02:00
parent a2019c6ac9
commit f55d69b7fe
7 changed files with 275 additions and 16 deletions

View File

@@ -15,13 +15,14 @@ mongoose.plugin(schema => {
}); });
const CircuitSchema = new Schema({ const CircuitSchema = new Schema({
idapp: {
type: String,
},
Num: { Num: {
type: Number, type: Number,
unique: true, unique: true,
}, },
idapp: {
type: String,
required: true,
},
groupnameId: { groupnameId: {
type: String, type: String,
}, },
@@ -29,6 +30,10 @@ const CircuitSchema = new Schema({
type: String, type: String,
unique: true, unique: true,
}, },
path: {
type: String,
unique: true,
},
subname: { subname: {
type: String, type: String,
}, },
@@ -188,7 +193,9 @@ CircuitSchema.statics.getWhatToShow = function(idapp, username) {
// FOR ME, PERMIT ALL // FOR ME, PERMIT ALL
return { return {
Num: 1, Num: 1,
circuitId: 1,
groupnameId: 1, groupnameId: 1,
path: 1,
name: 1, name: 1,
subname: 1, subname: 1,
longdescr: 1, longdescr: 1,
@@ -204,10 +211,20 @@ CircuitSchema.statics.getWhatToShow = function(idapp, username) {
}; };
// Rimuovi dagli Admin del Circuito
MyGroupSchema.statics.removeAdminOfMyCircuit = async function(idapp, username, name) {
return Circuit.updateOne({idapp, name},
{$pull: {admins: {username: {$in: [username]}}}});
};
CircuitSchema.statics.getWhatToShow_Unknown = function(idapp, username) { CircuitSchema.statics.getWhatToShow_Unknown = function(idapp, username) {
return { return {
Num: 1, Num: 1,
circuitId: 1,
groupnameId: 1, groupnameId: 1,
path: 1,
name: 1, name: 1,
subname: 1, subname: 1,
longdescr: 1, longdescr: 1,

View File

@@ -1968,14 +1968,6 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD
// Invia una notifica alla persona // Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, groupnameDest, cmd, false, true, username_action); await tools.sendNotificationByGroupname(idapp, usernameOrig, groupnameDest, cmd, false, true, username_action);
} else if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_MYGROUP) {
ris = await User.removeFromMyGroups(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me
console.log('ris', ris);
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, groupnameDest, cmd, false, true, username_action);
} else if (cmd === shared_consts.GROUPSCMD.DELETE_GROUP) { } else if (cmd === shared_consts.GROUPSCMD.DELETE_GROUP) {
ris = await User.removeFromMyGroups(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me ris = await User.removeFromMyGroups(idapp, usernameOrig, groupnameDest); // Rimuovo l'Amicizia da me
@@ -2027,6 +2019,142 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD
return ris; return ris;
}; };
UserSchema.statics.setCircuitCmd = async function(idapp, usernameOrig, name, cmd, value, username_action) {
let ris = null;
let update = {};
try {
if (cmd === shared_consts.CIRCUITCMD.SET) {
const foundIfAlreadyCircuit = await this.ifAlreadyInCircuit(idapp, usernameOrig, name);
if (!foundIfAlreadyCircuit) {
update = {
$push: {
'profile.mycircuits': {
circuitname: name,
date: new Date(),
},
},
};
ris = await User.updateOne({idapp, username: usernameOrig}, update);
// Elimina la richiesta:
update = {$pull: {req_users: {username: {$in: [usernameOrig]}}}};
await Circuit.updateOne({idapp, groupname: name}, update);
// Elimina eventualmente se era bloccato:
update = {$pull: {refused_users: {username: {$in: [usernameOrig]}}}};
await Circuit.updateOne({idapp, groupname: name}, 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);
}
} else if (cmd === shared_consts.GROUPSCMD.REQGROUP) {
// Aggiungo la richiesta di Gruppo a me
const foundIfAlreadyAskGroup = await Circuit.findOne({
idapp,
groupname: name,
'req_users': {
$elemMatch: {username: {$eq: usernameOrig}},
},
});
if (value) {
if (!foundIfAlreadyAskGroup) {
update = {
$push: {
'req_users': {
username: usernameOrig,
date: new Date(),
},
},
};
ris = await Circuit.updateOne({idapp, groupname: name},
update);
}
if (ris) {
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, true, true, username_action);
}
} else {
if (foundIfAlreadyAskGroup) {
ris = await this.removeFromCircuits(idapp, usernameOrig, name); // Rimuovo il Gruppo da me
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
}
}
if (ris) {
ris = await Circuit.getInfoGroupByGroupname(idapp, name);
}
} else if (cmd === shared_consts.GROUPSCMD.REMOVE_FROM_CIRCUIT) {
// Remove if is also an Admin
await Circuit.removeAdminOfMyCircuit(idapp, usernameOrig, name);
ris = await User.removeFromCircuits(idapp, usernameOrig, name); // 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);
} else if (cmd === shared_consts.GROUPSCMD.DELETE_GROUP) {
ris = await User.removeFromCircuits(idapp, usernameOrig, name); // 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);
}
ris = await Circuit.deleteGroup(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
console.log('ris', ris);
} else if (cmd === shared_consts.GROUPSCMD.CANCEL_REQ_GROUP) {
ris = await Circuit.removeReqGroup(idapp, usernameOrig, name); // Rimuovo l'Amicizia da me
} else if (cmd === shared_consts.GROUPSCMD.BLOCK_GROUP) {
await User.removeFromCircuits(idapp, usernameOrig, name); // 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);
} else if (cmd === shared_consts.GROUPSCMD.ADDADMIN_OFCIRCUIT) {
ris = await Circuit.addToAdminOfCircuit(idapp, usernameOrig, name); // Rimuovo la richiesta di entrare nel gruppo
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, 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
// Invia una notifica alla persona
await tools.sendNotificationByGroupname(idapp, usernameOrig, name, cmd, false, true, username_action);
}
} catch (e) {
console.error('Error: ', e);
}
return ris;
};
function getWhatToShow(idapp, username) { function getWhatToShow(idapp, username) {
return { return {
username: 1, username: 1,

View File

@@ -0,0 +1,76 @@
const express = require('express');
const router = express.Router();
const tools = require('../tools/general');
const server_constants = require('../tools/server_constants');
const {authenticate} = require('../middleware/authenticate');
const mongoose = require('mongoose').set('debug', false);
const {User} = require('../models/user');
const {Circuit} = require('../models/circuit');
const _ = require('lodash');
const {ObjectID} = require('mongodb');
async function getCircuitRecAdminsInfo(idapp, data) {
if (data && data.admins) {
for (const admin of data.admins) {
const myuser = await User.findOne({idapp, username: admin.username}, {'profile.img': 1}).lean();
admin.profile = {img: myuser.profile.img};
}
}
return data;
}
router.post('/load', authenticate, async (req, res) => {
const idapp = req.body.idapp;
const path = req.body.path;
const circuitId = req.body.circuitId;
const usernameOrig = req.user.username;
try {
const {SendNotif} = require('../models/sendnotif');
// Check if ìs a Notif to read
const idnotif = req.body['idnotif'] ? req.body['idnotif'] : '';
SendNotif.setNotifAsRead(idapp, usernameOrig, idnotif);
const whatshow = Circuit.getWhatToShow(idapp, req.user.username);
let data = await Circuit.findOne({idapp, path}, whatshow).lean();
let cities = [];
let users_in_circuit = [];
if (data && data.circuitId) {
users_in_circuit = await User.find(
{
idapp,
circuitId: data.circuitId,
},
whatshowUsers,
).lean();
}
data = await getCircuitRecAdminsInfo(idapp, data);
const whatshowUsers = await User.getWhatToShow_IfFriends(idapp, req.user.username);
res.send({circuit: data, users_in_circuit});
} catch (e) {
console.error('Error in Circuits', e);
return res.status(400).send(e);
}
const ris = null;
});
module.exports = router;

View File

@@ -711,6 +711,34 @@ router.post('/groups/cmd', authenticate, (req, res) => {
}); });
router.post('/circuits/cmd', authenticate, (req, res) => {
const usernameLogged = req.user.username;
const idapp = req.body.idapp;
const locale = req.body.locale;
const usernameOrig = req.body.usernameOrig;
const name = req.body.name;
const cmd = req.body.cmd;
const value = req.body.value;
/*if (!User.isAdmin(req.user.perm) || !User.isManager(req.user.perm)) {
// If without permissions, exit
if (usernameOrig !== usernameLogged) {
return res.status(404).
send({code: server_constants.RIS_CODE_ERR_UNAUTHORIZED, msg: ''});
}
}*/
return User.setCircuitCmd(idapp, usernameOrig, name, cmd, value, usernameLogged).
then((ris) => {
res.send(ris);
}).
catch((e) => {
tools.mylog('ERRORE IN groups/cmd: ' + e.message);
res.status(400).send();
});
});
async function eseguiDbOp(idapp, mydata, locale) { async function eseguiDbOp(idapp, mydata, locale) {
let ris = await User.DbOp(idapp, mydata); let ris = await User.DbOp(idapp, mydata);

View File

@@ -107,6 +107,7 @@ myLoad().then(ris => {
const report_router = require('./router/report_router'); const report_router = require('./router/report_router');
const users_router = require('./router/users_router'); const users_router = require('./router/users_router');
const mygroups_router = require('./router/mygroups_router'); const mygroups_router = require('./router/mygroups_router');
const circuits_router = require('./router/circuits_router');
const iscrittiConacreis_router = require('./router/iscrittiConacreis_router'); const iscrittiConacreis_router = require('./router/iscrittiConacreis_router');
const site_router = require('./router/site_router'); const site_router = require('./router/site_router');
const admin_router = require('./router/admin_router'); const admin_router = require('./router/admin_router');
@@ -166,6 +167,7 @@ myLoad().then(ris => {
app.use('/projects', projects_router); app.use('/projects', projects_router);
app.use('/users', users_router); app.use('/users', users_router);
app.use('/mygroup', mygroups_router); app.use('/mygroup', mygroups_router);
app.use('/circuit', circuits_router);
app.use('/iscritti_conacreis', iscrittiConacreis_router); app.use('/iscritti_conacreis', iscrittiConacreis_router);
app.use('/report', report_router); app.use('/report', report_router);
app.use('/site', site_router); app.use('/site', site_router);

View File

@@ -1652,7 +1652,7 @@ module.exports = {
if (numrowend < 0) if (numrowend < 0)
numrowend = 1; numrowend = 1;
if (params.querytype === shared_consts.QUERYTYPE_MYGROUP) { if (params.querytype === shared_consts.QUERYTYPE_MYGROUP || params.querytype === shared_consts.QUERYTYPE_CIRCUIT) {
query.push({ query.push({
$match: { $match: {
$expr: { $expr: {
@@ -1690,7 +1690,7 @@ module.exports = {
}, },
); );
} else if (params.querytype === shared_consts.QUERYTYPE_REFUSED_USER_GRP) { } else if (params.querytype === shared_consts.QUERYTYPE_REFUSED_USER_GRP || params.querytype === shared_consts.QUERYTYPE_REFUSED_USER_CIRCUIT) {
query.push({ query.push({
$match: { $match: {
$expr: { $expr: {

View File

@@ -6,8 +6,9 @@ module.exports = {
QUERYTYPE_MYGROUP: 1, QUERYTYPE_MYGROUP: 1,
QUERYTYPE_REFUSED_USER_GRP: 2, QUERYTYPE_REFUSED_USER_GRP: 2,
ALL_SAW_AND_ACCEPTED: 3, ALL_SAW_AND_ACCEPTED: 3,
QUERYTYPE_CIRCUIT: 10,
QUERYTYPE_REFUSED_USER_CIRCUIT: 12,
// --------------------- // ---------------------
FILTER_EXTRALIST_NOT_REGISTERED: 1, FILTER_EXTRALIST_NOT_REGISTERED: 1,
@@ -66,6 +67,13 @@ module.exports = {
REMOVEADMIN_OFMYGROUP: 1185, REMOVEADMIN_OFMYGROUP: 1185,
}, },
CIRCUITCMD: {
REQ: 2000,
SET: 2001,
REMOVE_FROM_MYLIST: 2144,
DELETE: 2170,
},
REPORT_FILT_RESP: 1, REPORT_FILT_RESP: 1,
REPORT_FILT_ATTIVITA: 2, REPORT_FILT_ATTIVITA: 2,
@@ -139,8 +147,8 @@ module.exports = {
'circuits', 'circuits',
'movements'], 'movements'],
TABLES_USER_ID: ['mygroups', 'myskills', 'mybachecas', 'myhosps', 'mygoods'], TABLES_USER_ID: ['mygroups', 'myskills', 'mybachecas', 'myhosps', 'mygoods'],
TABLES_CREATEDBY: ['mygroups'], TABLES_CREATEDBY: ['mygroups', 'circuits'],
TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups'], TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups', 'circuits'],
TABLES_PERM_CHANGE_FOR_USERS: ['myskills', 'mybachecas', 'myhosps', 'mygoods'], TABLES_PERM_CHANGE_FOR_USERS: ['myskills', 'mybachecas', 'myhosps', 'mygoods'],