diff --git a/services/arbiter-3.0/src/routes/admin/players.js b/services/arbiter-3.0/src/routes/admin/players.js index 51bb3f4..2cc5217 100644 --- a/services/arbiter-3.0/src/routes/admin/players.js +++ b/services/arbiter-3.0/src/routes/admin/players.js @@ -32,4 +32,41 @@ router.get('/table', async (req, res) => { res.render('admin/players/_table_body', { players, TIER_INFO, page, search }); }); +// POST endpoint for tier changes +router.post('/:discord_id/tier', async (req, res) => { + const { discord_id } = req.params; + const { tier_level } = req.body; + + try { + // Validate tier exists + if (!TIER_INFO[tier_level]) { + return res.status(400).send('Invalid tier'); + } + + // Update tier in database + const tierInfo = TIER_INFO[tier_level]; + await db.query(` + UPDATE subscriptions + SET tier_level = $1, mrr_value = $2, updated_at = NOW() + WHERE discord_id = $3 + `, [tier_level, tierInfo.price, discord_id]); + + // TODO: Sync Discord roles via bot + // This will be implemented when Discord bot integration is ready + + // Create audit log entry + await db.query(` + INSERT INTO admin_audit_log (admin_discord_id, action, target_discord_id, details) + VALUES ($1, 'tier_change', $2, $3) + `, [req.user.id, discord_id, `Changed tier to ${tierInfo.name}`]); + + // Return success (htmx will handle UI update) + res.send('OK'); + + } catch (error) { + console.error('Tier change error:', error); + res.status(500).send('Error updating tier'); + } +}); + module.exports = router; diff --git a/services/arbiter-3.0/src/views/admin/players/_table_body.ejs b/services/arbiter-3.0/src/views/admin/players/_table_body.ejs index ae1c24c..f234dae 100644 --- a/services/arbiter-3.0/src/views/admin/players/_table_body.ejs +++ b/services/arbiter-3.0/src/views/admin/players/_table_body.ejs @@ -28,7 +28,20 @@