first pass of new UI
This commit is contained in:
@@ -5,7 +5,8 @@ const ur = express.Router();
|
||||
import { MemberState } from '@app/shared/types/member';
|
||||
import pool from '../db';
|
||||
import { requireLogin, requireMemberState, requireRole } from '../middleware/auth';
|
||||
import { assignUserGroup, createGroup } from '../services/rolesService';
|
||||
import { assignUserGroup, createGroup, getAllRoles, getRole, getUsersWithRole } from '../services/rolesService';
|
||||
import { Request, Response } from 'express';
|
||||
|
||||
r.use(requireLogin)
|
||||
ur.use(requireLogin)
|
||||
@@ -44,43 +45,37 @@ ur.delete('/', [requireMemberState(MemberState.Member), requireRole("17th Admini
|
||||
//get all roles
|
||||
r.get('/', [requireMemberState(MemberState.Member)], async (req, res) => {
|
||||
try {
|
||||
var 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_unit_status_latest 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] || []
|
||||
}));
|
||||
|
||||
res.json(result);
|
||||
const roles = await getAllRoles();
|
||||
res.status(200).json(roles);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
res.status(500).json({ error: 'Internal server error' });
|
||||
} finally {
|
||||
con.release();
|
||||
res.sendStatus(500);
|
||||
}
|
||||
});
|
||||
|
||||
r.get('/:id/members', [requireMemberState(MemberState.Member)], async (req: Request, res: Response) => {
|
||||
try {
|
||||
const members = await getUsersWithRole(Number(req.params.id));
|
||||
res.status(200).json(members);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
res.sendStatus(500);
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
r.get('/:id', [requireMemberState(MemberState.Member)], async (req: Request, res: Response) => {
|
||||
try {
|
||||
const role = await getRole(Number(req.params.id));
|
||||
res.status(200).json(role);
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
res.sendStatus(500);
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
//create a new role
|
||||
r.post('/', [requireMemberState(MemberState.Member), requireRole("17th Administrator")], async (req, res) => {
|
||||
try {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { MemberLight } from '@app/shared/types/member';
|
||||
import pool from '../db';
|
||||
import { Role } from '@app/shared/types/roles'
|
||||
import { Role, RoleSummary } from '@app/shared/types/roles'
|
||||
|
||||
export async function assignUserGroup(userID: number, roleID: number) {
|
||||
|
||||
@@ -24,4 +25,34 @@ export async function getUserRoles(userID: number): Promise<Role[]> {
|
||||
WHERE mr.member_id = ?;`;
|
||||
|
||||
return await pool.query(sql, [userID]);
|
||||
}
|
||||
|
||||
export async function getRole(id: number): Promise<Role> {
|
||||
let res = await pool.query(`SELECT * FROM roles WHERE id = ?`, [id])
|
||||
return res[0] as Role;
|
||||
}
|
||||
|
||||
export async function getAllRoles(): Promise<RoleSummary> {
|
||||
return await pool.query(`SELECT id, name, color FROM roles`);
|
||||
}
|
||||
|
||||
export async function getUsersWithRole(roleId: number): Promise<MemberLight[]> {
|
||||
const out = await pool.query(
|
||||
`
|
||||
SELECT
|
||||
m.member_id AS id,
|
||||
m.member_name AS username,
|
||||
m.displayName,
|
||||
u.color
|
||||
FROM members_roles mr
|
||||
JOIN view_member_rank_unit_status_latest m
|
||||
ON m.member_id = mr.member_id
|
||||
LEFT JOIN units u
|
||||
ON u.name = m.unit
|
||||
WHERE mr.role_id = ?
|
||||
`,
|
||||
[roleId]
|
||||
)
|
||||
|
||||
return out as MemberLight[]
|
||||
}
|
||||
Reference in New Issue
Block a user