Wrapped up discharge form close #159

This commit is contained in:
2026-01-28 15:39:45 -05:00
parent c646254616
commit 22eaba6f90
8 changed files with 111 additions and 25 deletions

View File

@@ -5,12 +5,16 @@ import { Request, Response } from 'express';
import pool from '../db';
import { requireLogin, requireMemberState, requireRole } from '../middleware/auth';
import { getUserActiveLOA } from '../services/db/loaService';
import { getAllMembersLite, getMemberSettings, getMembersFull, getMembersLite, getUserData, getUserState, setUserSettings, getFilteredMembers } from '../services/db/memberService';
import { getAllMembersLite, getMemberSettings, getMembersFull, getMembersLite, getUserData, getUserState, setUserSettings, getFilteredMembers, setUserState } from '../services/db/memberService';
import { getUserRoles } from '../services/db/rolesService';
import { memberSettings, MemberState, myData } from '@app/shared/types/member';
import { Discharge } from '@app/shared/schemas/dischargeSchema';
import { Performance } from 'perf_hooks';
import { logger } from '../services/logging/logger';
import { memberCache } from './auth';
import { cancelLatestRank } from '../services/db/rankService';
import { cancelLatestUnit } from '../services/db/unitService';
//get all users
router.get('/', [requireLogin, requireMemberState(MemberState.Member)], async (req, res) => {
@@ -232,5 +236,32 @@ router.put('/:id/displayname', async (req, res) => {
return res.status(501);
});
//discharge member
router.post('/discharge', [requireLogin, requireMemberState(MemberState.Member), requireRole("17th Administrator")], async (req: Request, res: Response) => {
try {
var con = await pool.getConnection();
con.beginTransaction();
var data: Discharge = req.body;
setUserState(data.userID, MemberState.Retired, con);
cancelLatestRank(data.userID, con);
cancelLatestUnit(data.userID, con);
con.commit();
memberCache.Invalidate(data.userID);
res.sendStatus(200);
} catch (error) {
logger.error('app', 'Failed to discharge user', {
data: data,
caller: req.user.id,
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
})
} finally {
if (con)
con.release();
}
});
export const memberRouter = router;