More bookstack integration stuff
This commit is contained in:
@@ -22,4 +22,9 @@ CLIENT_DOMAIN= #whatever.com
|
|||||||
|
|
||||||
# Glitchtip
|
# Glitchtip
|
||||||
GLITCHTIP_DSN=
|
GLITCHTIP_DSN=
|
||||||
DISABLE_GLITCHTIP= # true/false
|
DISABLE_GLITCHTIP= # true/false
|
||||||
|
|
||||||
|
# Bookstack
|
||||||
|
DOC_HOST= # https://bookstack.whatever.com/
|
||||||
|
DOC_TOKEN_SECRET=
|
||||||
|
DOC_TOKEN_ID=
|
||||||
@@ -3,7 +3,7 @@ const router = express.Router();
|
|||||||
|
|
||||||
import { Request, Response } from 'express';
|
import { Request, Response } from 'express';
|
||||||
import pool from '../db';
|
import pool from '../db';
|
||||||
import { createNewLOA, getAllLOA, getLoaTypes, getUserLOA } from '../services/loaService';
|
import { closeLOA, createNewLOA, getAllLOA, getLOAbyID, getLoaTypes, getUserLOA } from '../services/loaService';
|
||||||
import { LOARequest } from '@app/shared/types/loa';
|
import { LOARequest } from '@app/shared/types/loa';
|
||||||
|
|
||||||
//member posts LOA
|
//member posts LOA
|
||||||
@@ -73,4 +73,62 @@ router.get('/types', async (req: Request, res: Response) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
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 extendTo = req.body;
|
||||||
|
console.log(extendTo);
|
||||||
|
try {
|
||||||
|
|
||||||
|
} 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();
|
||||||
|
console.log(out);
|
||||||
|
res.status(200).json(out);
|
||||||
|
} else {
|
||||||
|
console.log("BAD");
|
||||||
|
res.sendStatus(500);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
@@ -27,4 +27,26 @@ export async function createNewLOA(data: LOARequest) {
|
|||||||
VALUES (?, ?, ?, ?, ?, ?)`;
|
VALUES (?, ?, ?, ?, ?, ?)`;
|
||||||
await pool.query(sql, [data.member_id, toDateTime(data.filed_date), toDateTime(data.start_date), toDateTime(data.end_date), data.type_id, data.reason])
|
await pool.query(sql, [data.member_id, toDateTime(data.filed_date), toDateTime(data.start_date), toDateTime(data.end_date), data.type_id, data.reason])
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function closeLOA(id: number, closer: number) {
|
||||||
|
const sql = `UPDATE leave_of_absences
|
||||||
|
SET closed = 1,
|
||||||
|
closed_by = ?
|
||||||
|
WHERE leave_of_absences.id = ?`;
|
||||||
|
let out = await pool.query(sql, [closer, id]);
|
||||||
|
console.log(out);
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function getLOAbyID(id: number): Promise<LOARequest> {
|
||||||
|
let res = await pool.query(`SELECT * FROM leave_of_absences WHERE id = ?`, [id]);
|
||||||
|
if (res.length != 1)
|
||||||
|
throw new Error(`LOA with id ${id} not found`);
|
||||||
|
return res[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function setLOAExtension(id: number, extendTo: Date) {
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -91,7 +91,7 @@ export async function getLoaTypes(): Promise<LOAType[]> {
|
|||||||
|
|
||||||
export async function getLoaPolicy(): Promise<string> {
|
export async function getLoaPolicy(): Promise<string> {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
const res = await fetch(`${import.meta.env.VITE_DOCHOST}/api/pages/42`, {
|
const res = await fetch(`${addr}/loa/policy`, {
|
||||||
method: "GET",
|
method: "GET",
|
||||||
credentials: 'include',
|
credentials: 'include',
|
||||||
});
|
});
|
||||||
@@ -105,4 +105,4 @@ export async function getLoaPolicy(): Promise<string> {
|
|||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user