149 lines
3.9 KiB
TypeScript
149 lines
3.9 KiB
TypeScript
const express = require('express');
|
|
const router = express.Router();
|
|
|
|
import { Request, Response } from 'express';
|
|
import pool from '../db';
|
|
import { closeLOA, createNewLOA, getAllLOA, getLOAbyID, getLoaTypes, getUserLOA, setLOAExtension } from '../services/loaService';
|
|
import { LOARequest } from '@app/shared/types/loa';
|
|
|
|
//member posts LOA
|
|
router.post("/", async (req: Request, res: Response) => {
|
|
let LOARequest = req.body as LOARequest;
|
|
LOARequest.member_id = req.user.id;
|
|
LOARequest.created_by = req.user.id;
|
|
LOARequest.filed_date = new Date();
|
|
|
|
try {
|
|
await createNewLOA(LOARequest);
|
|
res.sendStatus(201);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).send(error);
|
|
}
|
|
});
|
|
|
|
//admin posts LOA
|
|
router.post("/admin", async (req: Request, res: Response) => {
|
|
let LOARequest = req.body as LOARequest;
|
|
LOARequest.created_by = req.user.id;
|
|
LOARequest.filed_date = new Date();
|
|
|
|
console.log(LOARequest);
|
|
|
|
try {
|
|
await createNewLOA(LOARequest);
|
|
res.sendStatus(201);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).send(error);
|
|
}
|
|
});
|
|
|
|
//get my current LOA
|
|
router.get("/me", async (req: Request, res: Response) => {
|
|
const user = req.user.id;
|
|
try {
|
|
const result = await getUserLOA(user);
|
|
res.status(200).json(result)
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).send(error);
|
|
}
|
|
})
|
|
|
|
//get my LOA history
|
|
router.get("/history", async (req: Request, res: Response) => {
|
|
const user = req.user.id;
|
|
try {
|
|
const result = await getUserLOA(user);
|
|
res.status(200).json(result)
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).send(error);
|
|
}
|
|
})
|
|
|
|
router.get('/all', async (req, res) => {
|
|
try {
|
|
const result = await getAllLOA();
|
|
res.status(200).json(result)
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).send(error);
|
|
}
|
|
})
|
|
|
|
router.get('/types', async (req: Request, res: Response) => {
|
|
try {
|
|
let out = await getLoaTypes();
|
|
res.status(200).json(out);
|
|
} catch (error) {
|
|
res.status(500).json(error);
|
|
console.error(error);
|
|
}
|
|
})
|
|
|
|
router.post('/cancel/:id', async (req: Request, res: Response) => {
|
|
let closer = req.user.id;
|
|
let id = Number(req.params.id);
|
|
try {
|
|
let loa = await getLOAbyID(id);
|
|
if (loa.member_id != closer) {
|
|
return res.sendStatus(403);
|
|
}
|
|
|
|
await closeLOA(Number(req.params.id), closer);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
//TODO: enforce admin only
|
|
router.post('/adminCancel/:id', async (req: Request, res: Response) => {
|
|
let closer = req.user.id;
|
|
try {
|
|
await closeLOA(Number(req.params.id), closer);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
console.error(error);
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
// TODO: Enforce admin only
|
|
router.post('/extend/:id', async (req: Request, res: Response) => {
|
|
const to: Date = req.body.to;
|
|
|
|
if (!to) {
|
|
res.status(400).send("Extension length is required");
|
|
}
|
|
|
|
try {
|
|
await setLOAExtension(Number(req.params.id), to);
|
|
res.sendStatus(200);
|
|
} catch (error) {
|
|
console.error(error)
|
|
res.status(500).json(error);
|
|
}
|
|
})
|
|
|
|
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}`,
|
|
}
|
|
})
|
|
|
|
if (output.ok) {
|
|
const out = await output.json();
|
|
res.status(200).json(out.html);
|
|
} else {
|
|
console.error("Failed to fetch LOA policy from bookstack");
|
|
res.sendStatus(500);
|
|
}
|
|
})
|
|
|
|
module.exports = router;
|