did a whole ton of shit with calendars and roles system

This commit is contained in:
2025-10-06 23:33:29 -04:00
parent a692c15149
commit c883444de6
10 changed files with 1022 additions and 7 deletions

View File

@@ -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
View 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;