Implement GET and HEAD APIs
This commit is contained in:
1 parent
75957ea85c
commit
f33717acb0
2 files changed
+65
No files matched your search
@@ -1,5 +1,8 @@
|
||||
{
|
||||
"env": {
|
||||
"node": true
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 8
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,68 @@
|
||||
|
||||
const Router = require("koa-router");
|
||||
|
||||
const apiFunctions = require("./api-functions");
|
||||
|
||||
const router = new Router();
|
||||
|
||||
const resources = {
|
||||
devices: false,
|
||||
presets: true,
|
||||
provisions: true,
|
||||
files: true,
|
||||
virtual_parameters: true
|
||||
};
|
||||
|
||||
for (let [resource, update] of Object.entries(resources)) {
|
||||
router.head(`/${resource}`, async ctx => {
|
||||
let filters, limit;
|
||||
if (ctx.request.query.query)
|
||||
if (Array.isArray(ctx.request.query.query))
|
||||
filters = ctx.request.query.query.map(q => JSON.parse(q));
|
||||
else {
|
||||
filters = JSON.parse(ctx.request.query.query);
|
||||
if (!Array.isArray(filters)) filters = [filters];
|
||||
}
|
||||
|
||||
if (ctx.request.query.limit) limit = +ctx.request.query.limit;
|
||||
|
||||
let res = await apiFunctions.query(resource, filters, limit);
|
||||
ctx.set("X-Total-Count", res.length);
|
||||
ctx.body = "";
|
||||
});
|
||||
|
||||
router.get(`/${resource}`, async ctx => {
|
||||
let filters, limit;
|
||||
if (ctx.request.query.query)
|
||||
if (Array.isArray(ctx.request.query.query))
|
||||
filters = ctx.request.query.query.map(q => JSON.parse(q));
|
||||
else {
|
||||
filters = JSON.parse(ctx.request.query.query);
|
||||
if (!Array.isArray(filters)) filters = [filters];
|
||||
}
|
||||
|
||||
if (ctx.request.query.limit) limit = +ctx.request.query.limit;
|
||||
|
||||
ctx.body = await apiFunctions.query(resource, filters, limit);
|
||||
});
|
||||
|
||||
router.head(`/${resource}/:id`, async (ctx, next) => {
|
||||
let filter = { _id: ctx.params.id };
|
||||
let res = await apiFunctions.query(resource, filter);
|
||||
if (!res.length) return next();
|
||||
ctx.body = "";
|
||||
});
|
||||
|
||||
router.get(`/${resource}/:id`, async (ctx, next) => {
|
||||
let filter = { _id: ctx.params.id };
|
||||
let res = await apiFunctions.query(resource, filter);
|
||||
if (!res.length) return next();
|
||||
ctx.body = res[0];
|
||||
});
|
||||
|
||||
if (update) {
|
||||
// TODO add PUT, PATCH, DELETE routes
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = router;
|
||||
Reference in new issue
Block a user