Implemented admin assign unit UI
All checks were successful
Pull Request CI / Merge Check (pull_request) Successful in 3m55s

This commit is contained in:
2026-03-02 20:16:28 -05:00
parent 54dcb9d389
commit a988545dda
7 changed files with 278 additions and 5 deletions

View File

@@ -1,10 +1,16 @@
import express = require('express');
const unitsRouter = express.Router();
const memberUnitsRouter = express.Router();
import { Request, Response } from 'express';
import pool from '../db';
import { requireLogin } from '../middleware/auth';
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';
unitsRouter.use(requireLogin);
@@ -26,4 +32,38 @@ unitsRouter.get('/', async (req, res) => {
}
});
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 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);
logger.info('app', 'Member force assigned unit', {
member: memberId,
unit: unitId,
caller: req.user.id,
});
audit.member('update_unit', { actorId: req.user.id, targetId: memberId }, { unit: unitId, 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;