import express = require('express'); const unitsRouter = express.Router(); const memberUnitsRouter = express.Router(); import { Request, Response } from 'express'; import pool from '../db'; import { requireLogin, requireMemberState, requireRole } from '../middleware/auth'; import { logger } from '../services/logging/logger'; import { Unit } from '@app/shared/types/units'; import { MemberState } from '@app/shared/types/member'; import { assignNewUnit } from '../services/db/unitService'; import { audit } from '../services/logging/auditLog'; import { forceInsertMemberRank, insertMemberRank } from '../services/db/rankService'; unitsRouter.use(requireLogin); //get all units unitsRouter.get('/', async (req, res) => { try { const result: Unit[] = await pool.query('SELECT * FROM units WHERE active = 1;'); res.json(result); } catch (error) { logger.error( 'app', 'Failed to get all units', { error: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, } ); res.sendStatus(500); } }); memberUnitsRouter.post('/admin', [requireMemberState(MemberState.Member), requireRole("17th Administrator")], async (req: Request, res: Response) => { const memberId = Number(req.query.memberId); const unitId = Number(req.query.unitId); const rankId = Number(req.query.rankId); const reason = req.query.reason as string; try { if (!memberId || !unitId) { return res.status(400).json({ error: 'memberId and unitId query parameters are required' }); } await assignNewUnit(memberId, unitId, req.user.id, req.user.id, reason); await forceInsertMemberRank(memberId, rankId, req.user.id, req.user.id, reason); logger.info('app', 'Member force assigned unit', { member: memberId, unit: unitId, rank: rankId, caller: req.user.id, }); audit.member('update_unit', { actorId: req.user.id, targetId: memberId }, { unit: unitId, rank: rankId, reason: reason }); res.sendStatus(200); } catch (error) { logger.error('app', 'Failed to force assign unit', { member: memberId, unit: unitId, caller: req.user.id, error: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, }) res.sendStatus(500); } }); export const units = unitsRouter; export const memberUnits = memberUnitsRouter;