Skip to content

Commit 0395fae

Browse files
Added version endpoint
1 parent 8719192 commit 0395fae

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/routes/index.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import * as express from 'express';
2+
import * as fs from 'fs';
3+
import * as path from 'path';
24
import { Request, Response, NextFunction } from 'express';
35
import httpResponse from '../utilities/http-response';
46
const router = express.Router();
@@ -25,6 +27,45 @@ const filterNaN = (arr: number[]) => _.filter(arr, _.negate(_.isNaN));
2527

2628
const getNumberArrayFromQuery = (value: string | string[] | undefined) => filterNaN(stringArrayToNumberArray(getQueryParamArray(value)));
2729

30+
const packageJSONPath = '../../package.json';
31+
32+
/**
33+
* Get the version number at startup, however you'll have to await the result in the callback
34+
* This should only be called once (same as if it was imported) and awaiting the promise will actually give you the result
35+
* On error returns null so that the api is indicating that it wasn't just missed but couldn't be retrieved (undefined just doesn't return the key)
36+
* Can't use import here because the rootDir is jailed to src (which makes sense)
37+
*/
38+
const versionPromise = new Promise<string | null>((resolve, reject) => {
39+
fs.readFile(path.join(__dirname, packageJSONPath), (err: Error | null, data: Buffer) => {
40+
if (err) {
41+
reject(err);
42+
} else {
43+
try {
44+
// returns version string
45+
resolve(JSON.parse(data.toString()).version);
46+
} catch (e) {
47+
reject(e);
48+
}
49+
}
50+
});
51+
})
52+
.catch((err: Error) => {
53+
logger.error(err);
54+
return null;
55+
});
56+
57+
router.use('/version',
58+
async (_req: Request, _res: Response, next: NextFunction) => {
59+
try {
60+
const version = await versionPromise;
61+
next(httpResponse.Ok(null, {
62+
packageJson: version
63+
}));
64+
} catch (e) {
65+
next(e);
66+
}
67+
});
68+
2869
router.get('/subjects', async (_req: Request, _res: Response, next: NextFunction) => {
2970
try {
3071
const subjects = await prisma.opl_dbsubject.findMany();

0 commit comments

Comments
 (0)