All checks were successful
Pull Request CI / Merge Check (pull_request) Successful in 3m27s
73 lines
2.6 KiB
TypeScript
73 lines
2.6 KiB
TypeScript
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; |