fix: add missing admin module routes (servers, players, roles, grace, audit, financials)

ISSUE:
Clicking on sidebar links returned 'Cannot GET /admin/servers' etc
Only dashboard route existed in admin.js

FIX (per Gemini consultation):
Added 6 missing module routes:
- /servers -> admin/servers/index.ejs
- /players -> admin/players/index.ejs
- /roles -> admin/roles/index.ejs
- /grace -> admin/grace/index.ejs
- /audit -> admin/audit/index.ejs
- /financials -> admin/financials/index.ejs

Each route passes required template vars:
title, adminUser, csrfToken, currentPath

TESTING:
Click each sidebar link - should render module page

Credit: Gemini consultation - identified missing routes

Signed-off-by: Claude (Chronicler #57) <claude@firefrostgaming.com>
This commit is contained in:
Claude (Chronicler #57)
2026-04-03 17:43:11 +00:00
parent 350096b02c
commit 2e058a7d87

View File

@@ -27,6 +27,98 @@ router.get('/', isAdmin, async (req, res) => {
}
});
// Server Matrix Module
router.get('/servers', isAdmin, async (req, res) => {
try {
res.render('admin/servers/index', {
title: 'Server Matrix',
adminUser: req.user,
csrfToken: req.csrfToken(),
currentPath: '/servers'
});
} catch (error) {
console.error('Server matrix error:', error);
res.status(500).send('Internal Server Error: ' + error.message);
}
});
// Player Management Module
router.get('/players', isAdmin, async (req, res) => {
try {
res.render('admin/players/index', {
title: 'Player Management',
adminUser: req.user,
csrfToken: req.csrfToken(),
currentPath: '/players'
});
} catch (error) {
console.error('Player management error:', error);
res.status(500).send('Internal Server Error: ' + error.message);
}
});
// Role Management Module
router.get('/roles', isAdmin, async (req, res) => {
try {
const mappings = getRoleMappings();
res.render('admin/roles/index', {
title: 'Role Management',
adminUser: req.user,
csrfToken: req.csrfToken(),
mappings: mappings,
currentPath: '/roles'
});
} catch (error) {
console.error('Role management error:', error);
res.status(500).send('Internal Server Error: ' + error.message);
}
});
// Grace Period Management Module
router.get('/grace', isAdmin, async (req, res) => {
try {
res.render('admin/grace/index', {
title: 'Grace Period Management',
adminUser: req.user,
csrfToken: req.csrfToken(),
currentPath: '/grace'
});
} catch (error) {
console.error('Grace period management error:', error);
res.status(500).send('Internal Server Error: ' + error.message);
}
});
// Audit Log Module
router.get('/audit', isAdmin, async (req, res) => {
try {
res.render('admin/audit/index', {
title: 'Audit Log',
adminUser: req.user,
csrfToken: req.csrfToken(),
currentPath: '/audit'
});
} catch (error) {
console.error('Audit log error:', error);
res.status(500).send('Internal Server Error: ' + error.message);
}
});
// Financials Module
router.get('/financials', isAdmin, async (req, res) => {
try {
res.render('admin/financials/index', {
title: 'Financials',
adminUser: req.user,
csrfToken: req.csrfToken(),
currentPath: '/financials'
});
} catch (error) {
console.error('Financials error:', error);
res.status(500).send('Internal Server Error: ' + error.message);
}
});
router.post('/mappings', isAdmin, express.json(), (req, res) => {
const newMappings = req.body;
if (saveRoleMappings(newMappings)) {