1
0
Fork 0
mirror of synced 2024-06-26 18:10:51 +12:00
budibase/packages/server/src/api/routes/datasource.js

90 lines
2.7 KiB
JavaScript
Raw Normal View History

2020-12-19 07:19:43 +13:00
const Router = require("@koa/router")
const datasourceController = require("../controllers/datasource")
const authorized = require("../../middleware/authorized")
const joiValidator = require("../../middleware/joi-validator")
2020-12-19 07:19:43 +13:00
const {
BUILDER,
PermissionLevels,
PermissionTypes,
} = require("@budibase/auth/permissions")
const Joi = require("joi")
const { FieldTypes, DataSourceOperation, SortDirection } = require("../../constants")
2020-12-19 07:19:43 +13:00
const router = Router()
function generatePlusDatasourceSchema() {
// prettier-ignore
return joiValidator.body(Joi.object({
_id: Joi.string(),
_rev: Joi.string(),
source: Joi.string().valid("postgres"),
type: Joi.string().valid("datasource_plus"),
relationships: Joi.array().required().items(Joi.object({
from: Joi.string().required(),
to: Joi.string().required(),
cardinality: Joi.valid("1:N", "1:1", "N:N").required()
})),
entities: Joi.array().required().items(Joi.object({
type: Joi.string().valid(...Object.values(FieldTypes)).required(),
name: Joi.string().required(),
})),
}).unknown(true))
}
function generateQueryDatasourceSchema() {
// prettier-ignore
return joiValidator.body(Joi.object({
endpoint: Joi.object({
datasourceId: Joi.string().required(),
operation: Joi.string().required().valid(...Object.values(DataSourceOperation)),
entityId: Joi.string().required(),
}).required(),
resource: Joi.object({
fields: Joi.array().items(Joi.string()).optional(),
}).optional(),
body: Joi.object().optional(),
sort: Joi.object().optional(),
filters: Joi.object({
string: Joi.object().optional(),
range: Joi.object().optional(),
equal: Joi.object().optional(),
notEqual: Joi.object().optional(),
empty: Joi.object().optional(),
notEmpty: Joi.object().optional(),
}).optional(),
paginate: Joi.object({
page: Joi.string().alphanum().optional(),
limit: Joi.number().optional(),
}).optional(),
}))
}
2020-12-19 07:19:43 +13:00
router
.get("/api/datasources", authorized(BUILDER), datasourceController.fetch)
.get(
"/api/datasources/:datasourceId",
2020-12-19 07:19:43 +13:00
authorized(PermissionTypes.TABLE, PermissionLevels.READ),
datasourceController.find
)
.post(
"/api/datasources/plus",
authorized(PermissionTypes.TABLE, PermissionLevels.READ),
generatePlusDatasourceSchema(),
datasourceController.plus
)
.post(
"/api/datasources/query",
authorized(PermissionTypes.TABLE, PermissionLevels.READ),
generateQueryDatasourceSchema(),
datasourceController.query
)
2020-12-19 07:19:43 +13:00
.post("/api/datasources", authorized(BUILDER), datasourceController.save)
.delete(
"/api/datasources/:datasourceId/:revId",
authorized(BUILDER),
datasourceController.destroy
)
module.exports = router