1
0
Fork 0
mirror of synced 2024-10-01 01:28:51 +13:00
budibase/packages/server/src/api/routes/query.js

82 lines
2.2 KiB
JavaScript
Raw Normal View History

2021-01-07 01:28:51 +13:00
const Router = require("@koa/router")
const queryController = require("../controllers/query")
const authorized = require("../../middleware/authorized")
const { BUILDER } = require("../../utilities/security/permissions")
2021-01-12 10:01:21 +13:00
const Joi = require("joi")
const {
PermissionLevels,
PermissionTypes,
} = require("../../utilities/security/permissions")
const joiValidator = require("../../middleware/joi-validator")
const {
bodyResource,
bodySubResource,
paramResource,
} = require("../../middleware/resourceId")
2020-12-19 07:19:43 +13:00
2021-01-07 01:28:51 +13:00
const router = Router()
2020-12-19 07:19:43 +13:00
2021-01-12 10:01:21 +13:00
function generateQueryValidation() {
// prettier-ignore
return joiValidator.body(Joi.object({
_id: Joi.string(),
_rev: Joi.string(),
name: Joi.string().required(),
2021-01-14 03:11:53 +13:00
fields: Joi.object().required(),
2021-01-12 10:01:21 +13:00
datasourceId: Joi.string().required(),
readable: Joi.boolean(),
2021-01-12 10:01:21 +13:00
parameters: Joi.array().items(Joi.object({
name: Joi.string(),
2021-02-23 23:06:55 +13:00
default: Joi.string().allow(""),
2021-01-12 10:01:21 +13:00
})),
queryVerb: Joi.string().allow().required(),
2021-01-12 10:01:21 +13:00
schema: Joi.object({}).required().unknown(true)
}))
}
function generateQueryPreviewValidation() {
// prettier-ignore
return joiValidator.body(Joi.object({
2021-01-14 03:11:53 +13:00
fields: Joi.object().required(),
queryVerb: Joi.string().allow().required(),
2021-01-12 10:01:21 +13:00
datasourceId: Joi.string().required(),
parameters: Joi.object({}).required().unknown(true)
}))
}
2021-01-07 01:28:51 +13:00
router
.get("/api/queries", authorized(BUILDER), queryController.fetch)
2021-01-12 10:01:21 +13:00
.post(
"/api/queries",
bodySubResource("datasourceId", "_id"),
2021-01-12 10:01:21 +13:00
authorized(BUILDER),
generateQueryValidation(),
queryController.save
)
.post(
"/api/queries/preview",
bodyResource("datasourceId"),
2021-01-12 10:01:21 +13:00
authorized(BUILDER),
generateQueryPreviewValidation(),
queryController.preview
)
.get(
"/api/queries/:queryId",
authorized(PermissionTypes.QUERY, PermissionLevels.READ),
queryController.find
)
2021-01-12 10:01:21 +13:00
.post(
"/api/queries/:queryId",
paramResource("queryId"),
2021-01-12 10:01:21 +13:00
authorized(PermissionTypes.QUERY, PermissionLevels.WRITE),
queryController.execute
)
.delete(
"/api/queries/:queryId/:revId",
paramResource("queryId"),
authorized(BUILDER),
queryController.destroy
)
2020-12-19 07:19:43 +13:00
2021-01-07 01:28:51 +13:00
module.exports = router