Files
genieacs/server/api.js
T

64 lines
1.7 KiB
JavaScript

"use strict";
const Router = require("koa-router");
const apiFunctions = require("./api-functions");
const Filter = require("../common/filter");
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 filter, limit;
if (ctx.request.query.filter) filter = new Filter(ctx.request.query.filter);
if (ctx.request.query.limit) limit = +ctx.request.query.limit;
let count = await apiFunctions.count(resource, filter, limit);
ctx.set("X-Total-Count", count);
ctx.body = "";
});
router.get(`/${resource}`, async ctx => {
let filter, limit, skip;
if (ctx.request.query.filter) filter = new Filter(ctx.request.query.filter);
if (ctx.request.query.limit) limit = +ctx.request.query.limit;
if (ctx.request.query.skip) skip = +ctx.request.query.skip;
ctx.body = await apiFunctions.query(
resource,
filter,
limit,
skip,
ctx.request.query.projection
);
});
router.head(`/${resource}/:id`, async (ctx, next) => {
let filter = new Filter(`DeviceID.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 = new Filter(`DeviceID.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;