integrated the new logger across the entire API

This commit is contained in:
2025-12-31 21:45:38 -05:00
parent 510d4a13ac
commit 9f895a202d
10 changed files with 670 additions and 125 deletions

View File

@@ -6,6 +6,7 @@ import pool from '../db';
import { closeLOA, createNewLOA, getAllLOA, getLOAbyID, getLoaTypes, getUserLOA, setLOAExtension } from '../services/db/loaService';
import { LOARequest } from '@app/shared/types/loa';
import { requireLogin, requireRole } from '../middleware/auth';
import { logger } from '../services/logging/logger';
router.use(requireLogin);
@@ -18,9 +19,17 @@ router.post("/", async (req: Request, res: Response) => {
try {
await createNewLOA(LOARequest);
logger.info('app', 'LOA Posted', { poster: req.user.id, user: LOARequest.member_id })
res.sendStatus(201);
} catch (error) {
console.error(error);
logger.error(
'app',
'Failed to post LOA',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).send(error);
}
});
@@ -32,10 +41,17 @@ router.post("/admin", [requireRole(['17th Administrator', '17th HQ', '17th Comma
LOARequest.filed_date = new Date();
try {
await createNewLOA(LOARequest);
logger.info('app', 'LOA Posted', { poster: req.user.id, user: LOARequest.member_id })
res.sendStatus(201);
} catch (error) {
console.error(error);
res.status(500).send(error);
logger.error(
'app',
'Failed to post LOA',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
); res.status(500).send(error);
}
});
@@ -46,7 +62,14 @@ router.get("/me", async (req: Request, res: Response) => {
const result = await getUserLOA(user);
res.status(200).json(result)
} catch (error) {
console.error(error);
logger.error(
'app',
'Failed to get user current LOA',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).send(error);
}
})
@@ -62,7 +85,14 @@ router.get("/history", async (req: Request, res: Response) => {
const result = await getUserLOA(user, page, pageSize);
res.status(200).json(result)
} catch (error) {
console.error(error);
logger.error(
'app',
'Failed to get user LOA history',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).send(error);
}
})
@@ -74,7 +104,14 @@ router.get('/all', [requireRole(['17th Administrator', '17th HQ', '17th Command'
const result = await getAllLOA(page, pageSize);
res.status(200).json(result)
} catch (error) {
console.error(error);
logger.error(
'app',
'Failed to get full LOA history',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).send(error);
}
})
@@ -84,8 +121,15 @@ router.get('/types', async (req: Request, res: Response) => {
let out = await getLoaTypes();
res.status(200).json(out);
} catch (error) {
logger.error(
'app',
'Failed to get LOA types',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).json(error);
console.error(error);
}
})
@@ -99,9 +143,19 @@ router.post('/cancel/:id', async (req: Request, res: Response) => {
}
await closeLOA(Number(req.params.id), closer);
logger.info('app', 'LOA Closed', { closed_by: closer, LOA: id })
res.sendStatus(200);
} catch (error) {
console.error(error);
logger.error(
'app',
'Failed to cancel LOA',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).json(error);
}
})
@@ -111,14 +165,24 @@ router.post('/adminCancel/:id', [requireRole(['17th Administrator', '17th HQ', '
let closer = req.user.id;
try {
await closeLOA(Number(req.params.id), closer);
logger.info('app', 'LOA Closed', { closed_by: closer, LOA: req.params.id })
res.sendStatus(200);
} catch (error) {
console.error(error);
logger.error(
'app',
'Failed to cancel LOA',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).json(error);
}
})
// TODO: Enforce admin only
// extend LOA
router.post('/extend/:id', [requireRole(['17th Administrator', '17th HQ', '17th Command'])], async (req: Request, res: Response) => {
const to: Date = req.body.to;
@@ -128,27 +192,71 @@ router.post('/extend/:id', [requireRole(['17th Administrator', '17th HQ', '17th
try {
await setLOAExtension(Number(req.params.id), to);
logger.info('app', 'LOA Extended', { extended_by: req.user.id, LOA: req.params.id })
res.sendStatus(200);
} catch (error) {
console.error(error)
logger.error(
'app',
'Failed to extend LOA',
{
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
}
);
res.status(500).json(error);
}
})
// GET /policy
router.get('/policy', async (req: Request, res: Response) => {
const output = await fetch(`${process.env.DOC_HOST}/api/pages/42`, {
headers: {
Authorization: `Token ${process.env.DOC_TOKEN_ID}:${process.env.DOC_TOKEN_SECRET}`,
}
})
const t0 = performance.now();
if (output.ok) {
const out = await output.json();
try {
const response = await fetch(`${process.env.DOC_HOST}/api/pages/42`, {
headers: {
Authorization: `Token ${process.env.DOC_TOKEN_ID}:${process.env.DOC_TOKEN_SECRET}`,
},
});
if (!response.ok) {
const text = await response.text();
logger.error('app', 'Failed to fetch policy page from Bookstack', {
pageId: 42,
status: response.status,
statusText: response.statusText,
body: text,
userId: req.user?.id,
});
return res.sendStatus(500);
}
const out = await response.json();
res.status(200).json(out.html);
} else {
console.error("Failed to fetch LOA policy from bookstack");
logger.info(
'profiling',
'GET /policy completed',
{
pageId: 42,
total_ms: performance.now() - t0,
},
'profiling'
);
} catch (error) {
logger.error('app', 'Error fetching policy page from Bookstack', {
pageId: 42,
error: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
userId: req.user?.id,
});
res.sendStatus(500);
}
})
});
export const loaRouter = router;