96 lines
3.2 KiB
TypeScript
96 lines
3.2 KiB
TypeScript
import { MemberState } from "@app/shared/types/member";
|
|
import { requireLogin, requireMemberState, requireRole } from "../middleware/auth";
|
|
import { batchInsertMemberRank, getAllRanks, getPromotionHistorySummary, getPromotionsOnDay, insertMemberRank } from "../services/db/rankService";
|
|
import { BatchPromotion, BatchPromotionMember } from '@app/shared/schemas/promotionSchema'
|
|
|
|
import express = require('express');
|
|
import { logger } from "../services/logging/logger";
|
|
const r = express.Router();
|
|
const ur = express.Router();
|
|
|
|
|
|
r.use(requireLogin)
|
|
ur.use(requireLogin)
|
|
|
|
//insert a new latest rank for a user
|
|
ur.post('/', [requireRole(["17th Command", "17th Administrator", "17th HQ"]), requireMemberState(MemberState.Member)], async (req: express.Request, res: express.Response) => {
|
|
try {
|
|
const change = req.body.promotions as BatchPromotionMember[];
|
|
const approver = req.body.approver as number;
|
|
const author = req.user.id;
|
|
if (!change) res.sendStatus(400);
|
|
|
|
await batchInsertMemberRank(change, author, approver);
|
|
logger.info('app', 'Promotion batch submitted', { author: author })
|
|
res.sendStatus(201);
|
|
} catch (error) {
|
|
logger.error(
|
|
'app',
|
|
'Failed to post rank change',
|
|
{
|
|
error: error instanceof Error ? error.message : String(error),
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
}
|
|
);
|
|
res.status(500).json({ error: 'Failed to update ranks' });
|
|
}
|
|
});
|
|
|
|
ur.get('/', async (req: express.Request, res: express.Response) => {
|
|
try {
|
|
const promos = await getPromotionHistorySummary();
|
|
res.status(200).json(promos);
|
|
} catch (error) {
|
|
logger.error(
|
|
'app',
|
|
'Failed to get rank change history',
|
|
{
|
|
error: error instanceof Error ? error.message : String(error),
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
}
|
|
);
|
|
res.sendStatus(500);
|
|
}
|
|
});
|
|
|
|
ur.get('/:day', async (req: express.Request, res: express.Response) => {
|
|
try {
|
|
if (!req.params.day) res.sendStatus(400);
|
|
|
|
var day = new Date(req.params.day)
|
|
const promos = await getPromotionsOnDay(day);
|
|
res.status(200).json(promos);
|
|
} catch (error) {
|
|
logger.error(
|
|
'app',
|
|
'Failed to get rank change history on day',
|
|
{
|
|
day: day,
|
|
error: error instanceof Error ? error.message : String(error),
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
}
|
|
);
|
|
res.sendStatus(500);
|
|
}
|
|
})
|
|
|
|
//get all ranks
|
|
r.get('/', async (req, res) => {
|
|
try {
|
|
const ranks = await getAllRanks();
|
|
res.json(ranks);
|
|
} catch (error) {
|
|
logger.error(
|
|
'app',
|
|
'Failed to get all ranks',
|
|
{
|
|
error: error instanceof Error ? error.message : String(error),
|
|
stack: error instanceof Error ? error.stack : undefined,
|
|
}
|
|
);
|
|
res.status(500).json({ error: 'Internal server error' });
|
|
}
|
|
});
|
|
|
|
export const ranks = r;
|
|
export const memberRanks = ur; |