From f55d69b7fe9ac92a59049c25bcdd23d66e5aa664 Mon Sep 17 00:00:00 2001 From: paoloar77 Date: Tue, 30 Aug 2022 17:00:48 +0200 Subject: [PATCH] Circuit go on... --- src/server/models/circuit.js | 23 ++++- src/server/models/user.js | 144 +++++++++++++++++++++++++-- src/server/router/circuits_router.js | 76 ++++++++++++++ src/server/router/users_router.js | 28 ++++++ src/server/server.js | 2 + src/server/tools/general.js | 4 +- src/server/tools/shared_nodejs.js | 14 ++- 7 files changed, 275 insertions(+), 16 deletions(-) create mode 100755 src/server/router/circuits_router.js diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index 4a6a600..23afce6 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -15,13 +15,14 @@ mongoose.plugin(schema => { }); const CircuitSchema = new Schema({ - idapp: { - type: String, - }, Num: { type: Number, unique: true, }, + idapp: { + type: String, + required: true, + }, groupnameId: { type: String, }, @@ -29,6 +30,10 @@ const CircuitSchema = new Schema({ type: String, unique: true, }, + path: { + type: String, + unique: true, + }, subname: { type: String, }, @@ -188,7 +193,9 @@ CircuitSchema.statics.getWhatToShow = function(idapp, username) { // FOR ME, PERMIT ALL return { Num: 1, + circuitId: 1, groupnameId: 1, + path: 1, name: 1, subname: 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) { return { Num: 1, + circuitId: 1, groupnameId: 1, + path: 1, name: 1, subname: 1, longdescr: 1, diff --git a/src/server/models/user.js b/src/server/models/user.js index 856c9a9..87b543f 100755 --- a/src/server/models/user.js +++ b/src/server/models/user.js @@ -1968,14 +1968,6 @@ UserSchema.statics.setGroupsCmd = async function(idapp, usernameOrig, groupnameD // Invia una notifica alla persona 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) { 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; }; +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) { return { username: 1, diff --git a/src/server/router/circuits_router.js b/src/server/router/circuits_router.js new file mode 100755 index 0000000..4c4d308 --- /dev/null +++ b/src/server/router/circuits_router.js @@ -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; diff --git a/src/server/router/users_router.js b/src/server/router/users_router.js index fd6027e..301b831 100755 --- a/src/server/router/users_router.js +++ b/src/server/router/users_router.js @@ -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) { let ris = await User.DbOp(idapp, mydata); diff --git a/src/server/server.js b/src/server/server.js index 47df4d3..559189e 100755 --- a/src/server/server.js +++ b/src/server/server.js @@ -107,6 +107,7 @@ myLoad().then(ris => { const report_router = require('./router/report_router'); const users_router = require('./router/users_router'); const mygroups_router = require('./router/mygroups_router'); + const circuits_router = require('./router/circuits_router'); const iscrittiConacreis_router = require('./router/iscrittiConacreis_router'); const site_router = require('./router/site_router'); const admin_router = require('./router/admin_router'); @@ -166,6 +167,7 @@ myLoad().then(ris => { app.use('/projects', projects_router); app.use('/users', users_router); app.use('/mygroup', mygroups_router); + app.use('/circuit', circuits_router); app.use('/iscritti_conacreis', iscrittiConacreis_router); app.use('/report', report_router); app.use('/site', site_router); diff --git a/src/server/tools/general.js b/src/server/tools/general.js index c2b50f4..408b6fb 100755 --- a/src/server/tools/general.js +++ b/src/server/tools/general.js @@ -1652,7 +1652,7 @@ module.exports = { if (numrowend < 0) numrowend = 1; - if (params.querytype === shared_consts.QUERYTYPE_MYGROUP) { + if (params.querytype === shared_consts.QUERYTYPE_MYGROUP || params.querytype === shared_consts.QUERYTYPE_CIRCUIT) { query.push({ $match: { $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({ $match: { $expr: { diff --git a/src/server/tools/shared_nodejs.js b/src/server/tools/shared_nodejs.js index ad1c32b..40656e7 100755 --- a/src/server/tools/shared_nodejs.js +++ b/src/server/tools/shared_nodejs.js @@ -6,8 +6,9 @@ module.exports = { QUERYTYPE_MYGROUP: 1, QUERYTYPE_REFUSED_USER_GRP: 2, - ALL_SAW_AND_ACCEPTED: 3, + QUERYTYPE_CIRCUIT: 10, + QUERYTYPE_REFUSED_USER_CIRCUIT: 12, // --------------------- FILTER_EXTRALIST_NOT_REGISTERED: 1, @@ -66,6 +67,13 @@ module.exports = { REMOVEADMIN_OFMYGROUP: 1185, }, + CIRCUITCMD: { + REQ: 2000, + SET: 2001, + REMOVE_FROM_MYLIST: 2144, + DELETE: 2170, + }, + REPORT_FILT_RESP: 1, REPORT_FILT_ATTIVITA: 2, @@ -139,8 +147,8 @@ module.exports = { 'circuits', 'movements'], TABLES_USER_ID: ['mygroups', 'myskills', 'mybachecas', 'myhosps', 'mygoods'], - TABLES_CREATEDBY: ['mygroups'], - TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups'], + TABLES_CREATEDBY: ['mygroups', 'circuits'], + TABLES_UPDATE_LASTMODIFIED: ['myskills', 'mybachecas', 'myhosps', 'mygoods', 'bots', 'mygroups', 'circuits'], TABLES_PERM_CHANGE_FOR_USERS: ['myskills', 'mybachecas', 'myhosps', 'mygoods'],