diff --git a/server/.eslintrc.json b/server/.eslintrc.json index 10d2238..1b750a1 100644 --- a/server/.eslintrc.json +++ b/server/.eslintrc.json @@ -1,5 +1,8 @@ { "env": { "node": true + }, + "parserOptions": { + "ecmaVersion": 8 } } diff --git a/server/api.js b/server/api.js index c0c9598..cd09895 100644 --- a/server/api.js +++ b/server/api.js @@ -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;