2021-01-06 13:28:51 +01:00
|
|
|
const Router = require("@koa/router")
|
|
|
|
const queryController = require("../controllers/query")
|
|
|
|
const authorized = require("../../middleware/authorized")
|
|
|
|
const { BUILDER } = require("../../utilities/security/permissions")
|
2021-01-11 22:01:21 +01:00
|
|
|
const Joi = require("joi")
|
|
|
|
const {
|
|
|
|
PermissionLevels,
|
|
|
|
PermissionTypes,
|
|
|
|
} = require("../../utilities/security/permissions")
|
|
|
|
const joiValidator = require("../../middleware/joi-validator")
|
2020-12-18 19:19:43 +01:00
|
|
|
|
2021-01-06 13:28:51 +01:00
|
|
|
const router = Router()
|
2020-12-18 19:19:43 +01:00
|
|
|
|
2021-01-11 22:01:21 +01:00
|
|
|
const QueryVerb = {
|
2021-01-12 17:49:11 +01:00
|
|
|
Create: "create",
|
|
|
|
Read: "read",
|
|
|
|
Update: "update",
|
|
|
|
Delete: "delete",
|
2021-01-11 22:01:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
function generateQueryValidation() {
|
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({
|
|
|
|
_id: Joi.string(),
|
|
|
|
_rev: Joi.string(),
|
|
|
|
name: Joi.string().required(),
|
2021-01-13 15:11:53 +01:00
|
|
|
fields: Joi.object().required(),
|
2021-01-11 22:01:21 +01:00
|
|
|
datasourceId: Joi.string().required(),
|
|
|
|
parameters: Joi.array().items(Joi.object({
|
|
|
|
name: Joi.string(),
|
|
|
|
default: Joi.string()
|
|
|
|
})),
|
2021-01-12 17:49:11 +01:00
|
|
|
queryVerb: Joi.string().allow(...Object.values(QueryVerb)).required(),
|
2021-01-11 22:01:21 +01:00
|
|
|
schema: Joi.object({}).required().unknown(true)
|
|
|
|
}))
|
|
|
|
}
|
|
|
|
|
|
|
|
function generateQueryPreviewValidation() {
|
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({
|
2021-01-13 15:11:53 +01:00
|
|
|
fields: Joi.object().required(),
|
2021-01-12 17:49:11 +01:00
|
|
|
queryVerb: Joi.string().allow(...Object.values(QueryVerb)).required(),
|
2021-01-11 22:01:21 +01:00
|
|
|
datasourceId: Joi.string().required(),
|
|
|
|
parameters: Joi.object({}).required().unknown(true)
|
|
|
|
}))
|
|
|
|
}
|
|
|
|
|
2021-01-06 13:28:51 +01:00
|
|
|
router
|
|
|
|
.get("/api/queries", authorized(BUILDER), queryController.fetch)
|
2021-01-11 22:01:21 +01:00
|
|
|
.post(
|
|
|
|
"/api/queries",
|
|
|
|
authorized(BUILDER),
|
|
|
|
generateQueryValidation(),
|
|
|
|
queryController.save
|
|
|
|
)
|
|
|
|
.post(
|
|
|
|
"/api/queries/preview",
|
|
|
|
authorized(BUILDER),
|
|
|
|
generateQueryPreviewValidation(),
|
|
|
|
queryController.preview
|
|
|
|
)
|
|
|
|
.post(
|
|
|
|
"/api/queries/:queryId",
|
|
|
|
authorized(PermissionTypes.QUERY, PermissionLevels.WRITE),
|
|
|
|
queryController.execute
|
|
|
|
)
|
2021-01-12 18:45:43 +01:00
|
|
|
.delete(
|
|
|
|
"/api/queries/:queryId/:revId",
|
|
|
|
authorized(BUILDER),
|
|
|
|
queryController.destroy
|
|
|
|
)
|
2020-12-18 19:19:43 +01:00
|
|
|
|
2021-01-06 13:28:51 +01:00
|
|
|
module.exports = router
|