Integrated new member state into manage members page

Implemented suspend/unsuspend
This commit is contained in:
2026-02-08 13:54:23 -05:00
parent cf880ed124
commit 921e74f188
5 changed files with 104 additions and 13 deletions

View File

@@ -74,6 +74,7 @@ export async function getFilteredMembers(
status: row.status,
status_date: row.status_date,
loa_until: row.loa_until ? new Date(row.loa_until) : undefined,
member_state: row.member_state
}));
return {
@@ -99,26 +100,28 @@ export async function getUserData(userID: number): Promise<Member> {
return res[0] ?? null;
}
export async function setUserState(userID: number, state: MemberState, reason: string, creatorID: number, externalCon?: mariadb.PoolConnection) {
export async function setUserState(userID: number, state: MemberState, reason: string, creatorID: number, externalCon?: mariadb.PoolConnection, endPrevious: boolean = true, createHistory: boolean = true) {
const isInternalConn = !externalCon;
if(isInternalConn)
if (isInternalConn)
var con = await pool.getConnection();
else
else
var con = externalCon;
// const con = (externalCon || await pool.getConnection()) as mariadb.PoolConnection;
try {
if (isInternalConn) await con.beginTransaction();
await endLatestMemberState(userID, con);
if (endPrevious)
await endLatestMemberState(userID, con);
const sql = `UPDATE members SET state = ? WHERE id = ?;`;
await con.query(sql, [state, userID]);
const insertHistorySql = `INSERT INTO member_state_history
if (createHistory) {
const insertHistorySql = `INSERT INTO member_state_history
(member_id, state_id, reason, created_by_id, start_date, end_date)
VALUES (?, ?, ?, ?, NOW(), NULL);`;
await con.query(insertHistorySql, [userID, state, reason, creatorID]);
await con.query(insertHistorySql, [userID, state, reason, creatorID]);
}
if (isInternalConn) await con.commit();
} catch (error) {
@@ -259,4 +262,23 @@ export async function endLatestMemberState(memberID: number, con: mariadb.Pool |
}
// let res = await pool.query(sql, [memberID]);
// console.log(res);
}
export async function getLastNonSuspendedState(memberID: number): Promise<MemberState> {
try {
const sql = `SELECT state_id
FROM member_state_history
WHERE member_id = ?
AND state_id != ?
ORDER BY start_date DESC, id DESC
LIMIT 1;`
const res = await pool.query(sql, [memberID, MemberState.Suspended]);
console.log(res as MemberState[])
if (res.length)
return res[0].state_id as MemberState;
} catch (error) {
logger.error('app', 'Error ending latest member state', {
error: error instanceof Error ? error.message : String(error),
});
}
}