2020-12-18 19:19:43 +01:00
|
|
|
const Router = require("@koa/router")
|
|
|
|
const datasourceController = require("../controllers/datasource")
|
|
|
|
const authorized = require("../../middleware/authorized")
|
2021-06-04 11:50:02 +02:00
|
|
|
const joiValidator = require("../../middleware/joi-validator")
|
2020-12-18 19:19:43 +01:00
|
|
|
const {
|
|
|
|
BUILDER,
|
|
|
|
PermissionLevels,
|
|
|
|
PermissionTypes,
|
2021-05-14 16:43:41 +02:00
|
|
|
} = require("@budibase/auth/permissions")
|
2021-06-04 11:50:02 +02:00
|
|
|
const Joi = require("joi")
|
|
|
|
const { FieldTypes } = require("../../constants")
|
2020-12-18 19:19:43 +01:00
|
|
|
|
|
|
|
const router = Router()
|
|
|
|
|
2021-06-04 11:50:02 +02:00
|
|
|
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))
|
|
|
|
}
|
|
|
|
|
2020-12-18 19:19:43 +01:00
|
|
|
router
|
|
|
|
.get("/api/datasources", authorized(BUILDER), datasourceController.fetch)
|
|
|
|
.get(
|
2021-03-10 12:56:52 +01:00
|
|
|
"/api/datasources/:datasourceId",
|
2020-12-18 19:19:43 +01:00
|
|
|
authorized(PermissionTypes.TABLE, PermissionLevels.READ),
|
|
|
|
datasourceController.find
|
|
|
|
)
|
2021-06-04 11:50:02 +02:00
|
|
|
.post(
|
|
|
|
"/api/datasources/plus",
|
|
|
|
generatePlusDatasourceSchema(),
|
|
|
|
datasourceController.plus
|
|
|
|
)
|
2020-12-18 19:19:43 +01:00
|
|
|
.post("/api/datasources", authorized(BUILDER), datasourceController.save)
|
|
|
|
.delete(
|
|
|
|
"/api/datasources/:datasourceId/:revId",
|
|
|
|
authorized(BUILDER),
|
|
|
|
datasourceController.destroy
|
|
|
|
)
|
|
|
|
|
|
|
|
module.exports = router
|