added support for integrated rank changes
All checks were successful
Pull Request CI / Merge Check (pull_request) Successful in 3m27s

This commit is contained in:
2026-03-02 20:30:01 -05:00
parent a988545dda
commit adc9da6a40
5 changed files with 78 additions and 8 deletions

View File

@@ -11,6 +11,7 @@ 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);
@@ -35,6 +36,7 @@ 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 rankId = Number(req.query.rankId);
const reason = req.query.reason as string;
try {
@@ -44,12 +46,14 @@ memberUnitsRouter.post('/admin', [requireMemberState(MemberState.Member), requir
}
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, reason: reason });
audit.member('update_unit', { actorId: req.user.id, targetId: memberId }, { unit: unitId, rank: rankId, reason: reason });
res.sendStatus(200);
} catch (error) {

View File

@@ -36,6 +36,16 @@ export async function insertMemberRank(member_id: number, rank_id: number, date?
await pool.query(sql, params);
}
export async function forceInsertMemberRank(member_id: number, rank_id: number, authorized: number, creator: number, reason: string) {
const sql = `CALL sp_update_member_rank(?, ?, ?, ?, ?, NOW())`;
const result = await pool.query(sql, [member_id, rank_id, authorized, creator, reason]);
if (!result || result.affectedRows === 0) {
throw new Error("Failed to update member rank");
}
}
export async function batchInsertMemberRank(promos: BatchPromotionMember[], author: number, approver: number) {
try {