did a whole ton of shit with calendars and roles system
This commit is contained in:
@@ -35,6 +35,4 @@ r.get('/', async (req, res) => {
|
||||
});
|
||||
|
||||
module.exports.ranks = r;
|
||||
module.exports.memberRanks = ur;
|
||||
|
||||
// TODO, implement get all ranks route with SQL stirng SELECT id, name, short_name, category, sort_id FROM ranks;
|
||||
module.exports.memberRanks = ur;
|
||||
118
api/routes/roles.js
Normal file
118
api/routes/roles.js
Normal file
@@ -0,0 +1,118 @@
|
||||
const express = require('express');
|
||||
const r = express.Router();
|
||||
const ur = express.Router();
|
||||
|
||||
const pool = require('../db');
|
||||
|
||||
//assign a member to a role
|
||||
ur.post('/', async (req, res) => {
|
||||
try {
|
||||
const body = req.body;
|
||||
const sql = `INSERT INTO members_roles (member_id, role_id) VALUES (?, ?);`;
|
||||
|
||||
await pool.query(sql, [body.member_id, body.role_id]);
|
||||
|
||||
res.sendStatus(201);
|
||||
} catch (err) {
|
||||
console.error('Insert failed:', err);
|
||||
res.status(500).json({ error: 'Failed to add to group' });
|
||||
}
|
||||
});
|
||||
|
||||
ur.delete('/', async (req, res) => {
|
||||
try {
|
||||
const body = req.body;
|
||||
console.log(body);
|
||||
|
||||
const sql = 'DELETE FROM members_roles WHERE member_id = ? AND role_id = ?'
|
||||
await pool.query(sql, [body.member_id, body.role_id])
|
||||
|
||||
res.sendStatus(200);
|
||||
}
|
||||
catch (err) {
|
||||
console.error("delete failed: ", err)
|
||||
res.status(500).json({ error: 'Failed to remove from group' });
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
//get all roles
|
||||
r.get('/', async (req, res) => {
|
||||
try {
|
||||
const con = await pool.getConnection();
|
||||
|
||||
// Get all roles
|
||||
const roles = await con.query('SELECT * FROM roles;');
|
||||
|
||||
// Get all members for each role
|
||||
const membersRoles = await con.query(`
|
||||
SELECT mr.role_id, v.*
|
||||
FROM members_roles mr
|
||||
JOIN view_member_rank_status_all v ON mr.member_id = v.member_id
|
||||
`);
|
||||
|
||||
|
||||
// Group members by role_id
|
||||
const roleIdToMembers = {};
|
||||
for (const row of membersRoles) {
|
||||
if (!roleIdToMembers[row.role_id]) roleIdToMembers[row.role_id] = [];
|
||||
// Remove role_id from member object
|
||||
const { role_id, ...member } = row;
|
||||
roleIdToMembers[role_id].push(member);
|
||||
}
|
||||
|
||||
// Attach members to each role
|
||||
const result = roles.map(role => ({
|
||||
...role,
|
||||
members: roleIdToMembers[role.id] || []
|
||||
}));
|
||||
|
||||
con.release();
|
||||
res.json(result);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
res.status(500).json({ error: 'Internal server error' });
|
||||
}
|
||||
});
|
||||
|
||||
//create a new role
|
||||
r.post('/', async (req, res) => {
|
||||
try {
|
||||
const { name, color, description } = req.body;
|
||||
console.log('Creating role:', { name, color, description });
|
||||
if (!name || !color) {
|
||||
return res.status(400).json({ error: 'Name and color are required' });
|
||||
}
|
||||
|
||||
const hexColorRegex = /^#([0-9A-Fa-f]{6})$/;
|
||||
if (!hexColorRegex.test(color)) {
|
||||
return res.status(400).json({ error: 'Color must be a valid hex color (#ffffff)' });
|
||||
}
|
||||
|
||||
const sql = `INSERT INTO roles (name, color, description) VALUES (?, ?, ?);`;
|
||||
const params = [name, color, description || null];
|
||||
|
||||
const result = await pool.query(sql, params);
|
||||
|
||||
res.status(201).json({ id: result.insertId, name, color, description });
|
||||
} catch (err) {
|
||||
console.error('Insert failed:', err);
|
||||
res.status(500).json({ error: 'Failed to create role' });
|
||||
}
|
||||
})
|
||||
|
||||
r.delete('/:id', async (req, res) => {
|
||||
try {
|
||||
const id = req.params.id;
|
||||
|
||||
const sql = 'DELETE FROM roles WHERE id = ?';
|
||||
const res = await pool.query(sql, [id]);
|
||||
res.sendStatus(200);
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
res.sendStatus(500);
|
||||
}
|
||||
})
|
||||
|
||||
module.exports.roles = r;
|
||||
module.exports.memberRoles = ur;
|
||||
Reference in New Issue
Block a user