From c8efefdc4eb6b6851d752f436a6cb3a5f9789105 Mon Sep 17 00:00:00 2001 From: Valentin PUCCETTI Date: Sun, 10 Sep 2023 22:22:28 +0200 Subject: [PATCH] bug fix when multiple memberships & minors --- index.js | 1 - model/member.model.js | 2 -- routes/admin.route.js | 54 ++++++++---------------------------- services/database.service.js | 2 +- services/group.service.js | 39 ++++++++++++++++++++------ services/members.service.js | 54 ++++++++++++++++++++++++++++++++++++ services/users.service.js | 2 +- views/admin/group_edit.ejs | 13 ++++----- views/admin/users.ejs | 11 +++----- 9 files changed, 108 insertions(+), 70 deletions(-) create mode 100644 services/members.service.js diff --git a/index.js b/index.js index 9e2e44d..09df2b9 100644 --- a/index.js +++ b/index.js @@ -65,7 +65,6 @@ app.get("/login", (req, res) => { - app.use('/admin/', require('./routes/admin.route')); app.use('/auth/', require('./routes/auth.route')); app.use('/keys/', require('./routes/keys.route')); diff --git a/model/member.model.js b/model/member.model.js index f6e53b2..4a8fd0d 100644 --- a/model/member.model.js +++ b/model/member.model.js @@ -6,11 +6,9 @@ class Member extends Model {} Member.init({ groupName: { type: DataTypes.STRING, - required: true, }, userId: { type: DataTypes.INTEGER, - required: true, }, role: { type: DataTypes.STRING, diff --git a/routes/admin.route.js b/routes/admin.route.js index b6c98da..388f2a1 100644 --- a/routes/admin.route.js +++ b/routes/admin.route.js @@ -1,10 +1,9 @@ const express = require('express'); const User = require("../model/user.model"); const Group = require("../model/group.model"); -const keyService = require("../services/keys.service"); groupService = require("../services/group.service"); const Member = require("../model/member.model"); - +memberService = require("../services/members.service"); var router = express.Router(); router.use('*', (req, res, next) => { @@ -22,9 +21,10 @@ router.use('*', (req, res, next) => { }); -router.get("/users", (req, res) => { +router.get("/users",async (req, res) => { User.findAll().then((users) => { - res.render('admin/users', { "users": users }) + res.render('admin/users', { "users": users}) + }) }) @@ -46,6 +46,7 @@ router.post("/groups/add", (req, res) => { router.get("/groups/delete/:group", (req, res) => { groupService.delGroup(req.params.group).then((result) => { + res.redirect("/admin/groups") }) @@ -75,48 +76,15 @@ router.get("/groups/:name", async (req, res) => { }) router.get('/members/:name/add/:user', (req, res) => { - Group.findOne({ where: { name: req.params.name } }).then((result) => { - if (result) { - User.findOne({ where: { id: req.params.user } }).then((user) => { - if (user) { - Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => { - if (!member) { - Member.create({ - userId: user.id, - groupName: result.name - }).then((member) => { - console.log('member added to database' + '(' + member.userId + ',' + member.groupName + ')') - res.redirect('/admin/groups/' + result.name) - }); - } - }) - } - - }) - } - - }) + memberService.addMember(req.params.user, req.params.name).then((result) => { + res.redirect('/admin/groups/' + req.params.name) + }); }) router.get('/members/:name/delete/:user', (req, res) => { - Group.findOne({ where: { name: req.params.name } }).then((result) => { - if (result) { - User.findOne({ where: { id: req.params.user } }).then((user) => { - if (user) { - Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => { - if (member) { - Member.destroy({ where: { groupname: result.name, userId: user.id }}).then((member) => { - console.log('member deleted from database' + '(' + member.userId + ',' + member.groupName + ')') - res.redirect('/admin/groups/' + result.name) - }); - } - }) - } - - }) - } - - }) + memberService.delMember(req.params.user, req.params.name).then((result) => { + res.redirect('/admin/groups/' + req.params.name) + }); }) diff --git a/services/database.service.js b/services/database.service.js index 44f8c7f..060b6d7 100644 --- a/services/database.service.js +++ b/services/database.service.js @@ -3,7 +3,7 @@ const Sequelize = require('sequelize'); const sequelize = new Sequelize('accessgate', 'user', 'password', { dialect: 'sqlite', host: './database.db', - logging: false + logging: true }) diff --git a/services/group.service.js b/services/group.service.js index f54fceb..1aea5a1 100644 --- a/services/group.service.js +++ b/services/group.service.js @@ -1,5 +1,5 @@ const Group = require('../model/group.model') -const Members = require('../model/member.model') +const Member = require('../model/member.model') const regexp = /^\S*$/; const User = require('../model/user.model') @@ -28,6 +28,13 @@ async function delGroup(name) { result.destroy() .then(() => { console.log('group ' + result.name + ' added to database') + Member.findAll({where: { groupName: name}}).then((members) => { + for (x in members) { + members[x].destroy().then(() => { + console.log('member ' + members[x].userId + ' deleted from database') + }) + } + }); }); } else { return false; @@ -37,23 +44,39 @@ async function delGroup(name) { }); } -async function groupUserList(groupName) { - User.hasMany(Members); - Members.belongsTo(User); - const users = await User.findAll({ include: Members }); +async function userGroupList(userId) { + const members = await Member.findAll({where: { userId: userId}}) var result = [] + for (x in members) { + result[x] = (members[x].dataValues) + } + return result + +} + +async function groupUserList(groupName) { + User.hasMany(Member); + Member.belongsTo(User); + const users = await User.findAll({ include: Member }); + var result = [] + console.log(users) for (x in users) { try { - if (users[x].dataValues.members[0].dataValues.groupName === groupName) { - result[x] = (users[x].dataValues) + for (y in users[x].dataValues.members) { + if (users[x].dataValues.members[y].dataValues.groupName === groupName) { + result[x] = (users[x].dataValues) + } } + } catch (error) { }} + console.log(result) return result }; module.exports = { addGroup, delGroup, - groupUserList + groupUserList, + userGroupList }; \ No newline at end of file diff --git a/services/members.service.js b/services/members.service.js new file mode 100644 index 0000000..0c10743 --- /dev/null +++ b/services/members.service.js @@ -0,0 +1,54 @@ +const Member = require('../model/member.model') +const Group = require("../model/group.model"); +const User = require("../model/user.model"); + +const regexp = /^\S*$/; + +async function addMember(userId, groupName) { + Group.findOne({ where: { name: groupName} }).then((result) => { + if (result) { + User.findOne({ where: { id: userId } }).then((user) => { + if (user) { + Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => { + if (!member) { + Member.create({ + userId: user.id, + groupName: result.name + }).then((member) => { + console.log('member added to database' + '(' + member.userId + ',' + member.groupName + ')') + }); + } + }) + } + + }) + } + + }) +} + +async function delMember(userId, groupName) { + Group.findOne({ where: { name: groupName} }).then((result) => { + if (result) { + User.findOne({ where: { id: userId } }).then((user) => { + if (user) { + Member.findOne({ where: { groupname: result.name, userId: user.id } }).then((member) => { + if (member) { + member.destroy() + .then(() => { + console.log('member deleted from database' + '(' + member.userId + ',' + member.groupName + ')') + }); + } + }) + } + + }) + } + + }) +} + +module.exports = { + addMember, + delMember +}; \ No newline at end of file diff --git a/services/users.service.js b/services/users.service.js index ba8ffd7..e4febc7 100644 --- a/services/users.service.js +++ b/services/users.service.js @@ -15,7 +15,7 @@ function makeAdmin(userId) { }); } + module.exports = { - userList, makeAdmin }; \ No newline at end of file diff --git a/views/admin/group_edit.ejs b/views/admin/group_edit.ejs index 5ed3d19..22174c5 100644 --- a/views/admin/group_edit.ejs +++ b/views/admin/group_edit.ejs @@ -25,15 +25,15 @@ - - + + <% outGroup.forEach(function (member) { %> - + @@ -44,7 +44,6 @@
Display namegithub idUsernameid
<%= member.displayName %><%= member.login %> <%= member.id %>
-
@@ -64,15 +63,15 @@ - - + + <% inGroup.forEach(function (member) { %> - + diff --git a/views/admin/users.ejs b/views/admin/users.ejs index a3518b5..cfb1c65 100644 --- a/views/admin/users.ejs +++ b/views/admin/users.ejs @@ -22,22 +22,19 @@
Display namegithub idusernameid
<%= member.displayName %><%= member.login %> <%= member.id %>
- - + + - <% users.forEach(function (user) { %> - + - + <% }) %>
Display namegithub idUsernameid AdminGroups Last login
<%= user.displayName %><%= user.login %> <%= user.id %> <%= user.admin %> - admin - <%= user.updatedAt %>