forked from tsai/budibase
30 changed files with 2754 additions and 292 deletions
@ -0,0 +1,32 @@ |
|||
import { Application, ApplicationOutput } from "../types/components" |
|||
|
|||
function application(body: any): Application { |
|||
let app = body?.application ? body.application : body |
|||
return { |
|||
_id: app.appId, |
|||
name: app.name, |
|||
url: app.url, |
|||
status: app.status, |
|||
createdAt: app.createdAt, |
|||
updatedAt: app.updatedAt, |
|||
version: app.version, |
|||
tenantId: app.tenantId, |
|||
lockedBy: app.lockedBy, |
|||
} |
|||
} |
|||
|
|||
function mapApplication(ctx: any): ApplicationOutput { |
|||
return { |
|||
data: application(ctx.body), |
|||
} |
|||
} |
|||
|
|||
function mapApplications(ctx: any): { data: Application[] } { |
|||
const apps = ctx.body.map((body: any) => application(body)) |
|||
return { data: apps } |
|||
} |
|||
|
|||
export default { |
|||
mapApplication, |
|||
mapApplications, |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
import tables from "./tables" |
|||
import applications from "./applications" |
|||
import users from "./users" |
|||
import rows from "./rows" |
|||
import queries from "./queries" |
|||
|
|||
export default { |
|||
...tables, |
|||
...applications, |
|||
...users, |
|||
...rows, |
|||
...queries, |
|||
} |
|||
@ -0,0 +1,37 @@ |
|||
import { Query, ExecuteQueryOutput } from "../types/components" |
|||
|
|||
function query(body: any): Query { |
|||
return { |
|||
_id: body._id, |
|||
datasourceId: body.datasourceId, |
|||
parameters: body.parameters, |
|||
fields: body.fields, |
|||
queryVerb: body.queryVerb, |
|||
name: body.name, |
|||
schema: body.schema, |
|||
transformer: body.transformer, |
|||
readable: body.readable, |
|||
} |
|||
} |
|||
|
|||
function mapQueries(ctx: any): { data: Query[] } { |
|||
const queries = ctx.body.map((body: any) => query(body)) |
|||
return { |
|||
data: queries, |
|||
} |
|||
} |
|||
|
|||
function mapQueryExecution(ctx: any): ExecuteQueryOutput { |
|||
// very little we can map here, structure mostly unknown
|
|||
return { |
|||
data: ctx.body.data, |
|||
pagination: ctx.body.pagination, |
|||
extra: ctx.body.extra, |
|||
info: ctx.body.info, |
|||
} |
|||
} |
|||
|
|||
export default { |
|||
mapQueries, |
|||
mapQueryExecution, |
|||
} |
|||
@ -0,0 +1,31 @@ |
|||
import { Row, RowSearch, RowOutput } from "../types/components" |
|||
|
|||
function row(body: any): Row { |
|||
delete body._rev |
|||
// have to input everything, since structure unknown
|
|||
return { |
|||
...body, |
|||
_id: body._id, |
|||
tableId: body.tableId, |
|||
} |
|||
} |
|||
|
|||
function mapRowSearch(ctx: any): RowSearch { |
|||
const rows = ctx.body.rows.map((body: any) => row(body)) |
|||
return { |
|||
data: rows, |
|||
hasNextPage: ctx.body.hasNextPage, |
|||
bookmark: ctx.body.bookmark, |
|||
} |
|||
} |
|||
|
|||
function mapRow(ctx: any): RowOutput { |
|||
return { |
|||
data: row(ctx.body), |
|||
} |
|||
} |
|||
|
|||
export default { |
|||
mapRowSearch, |
|||
mapRow, |
|||
} |
|||
@ -0,0 +1,26 @@ |
|||
import { Table, TableOutput } from "../types/components" |
|||
|
|||
function table(body: any): Table { |
|||
return { |
|||
_id: body._id, |
|||
name: body.name, |
|||
schema: body.schema, |
|||
primaryDisplay: body.primaryDisplay, |
|||
} |
|||
} |
|||
|
|||
function mapTable(ctx: any): TableOutput { |
|||
return { |
|||
data: table(ctx.body), |
|||
} |
|||
} |
|||
|
|||
function mapTables(ctx: any): { data: Table[] } { |
|||
const tables = ctx.body.map((body: any) => table(body)) |
|||
return { data: tables } |
|||
} |
|||
|
|||
export default { |
|||
mapTable, |
|||
mapTables, |
|||
} |
|||
@ -0,0 +1,32 @@ |
|||
import { User, UserOutput } from "../types/components" |
|||
|
|||
function user(body: any): User { |
|||
return { |
|||
_id: body._id, |
|||
email: body.email, |
|||
password: body.password, |
|||
status: body.status, |
|||
firstName: body.firstName, |
|||
lastName: body.lastName, |
|||
forceResetPassword: body.forceResetPassword, |
|||
builder: body.builder, |
|||
admin: body.admin, |
|||
roles: body.roles, |
|||
} |
|||
} |
|||
|
|||
function mapUser(ctx: any): UserOutput { |
|||
return { |
|||
data: user(ctx.body), |
|||
} |
|||
} |
|||
|
|||
function mapUsers(ctx: any): { data: User[] } { |
|||
const users = ctx.body.map((body: any) => user(body)) |
|||
return { data: users } |
|||
} |
|||
|
|||
export default { |
|||
mapUser, |
|||
mapUsers, |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
import { components } from "./openapi" |
|||
|
|||
export type Query = components["schemas"]["query"] |
|||
export type ExecuteQueryOutput = components["schemas"]["executeQueryOutput"] |
|||
|
|||
export type Application = components["schemas"]["applicationOutput"]["data"] |
|||
export type ApplicationOutput = components["schemas"]["applicationOutput"] |
|||
|
|||
export type Table = components["schemas"]["tableOutput"]["data"] |
|||
export type TableOutput = components["schemas"]["tableOutput"] |
|||
|
|||
export type Row = components["schemas"]["rowOutput"]["data"] |
|||
export type RowOutput = components["schemas"]["rowOutput"] |
|||
export type RowSearch = components["schemas"]["searchOutput"] |
|||
|
|||
export type User = components["schemas"]["userOutput"]["data"] |
|||
export type UserOutput = components["schemas"]["userOutput"] |
|||
@ -0,0 +1,966 @@ |
|||
/** |
|||
* This file was auto-generated by openapi-typescript. |
|||
* Do not make direct changes to the file. |
|||
*/ |
|||
|
|||
export interface paths { |
|||
"/applications": { |
|||
post: { |
|||
parameters: { |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the created application. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["applicationOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["application"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/applications/{appId}": { |
|||
get: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
appId: components["parameters"]["appIdUrl"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the retrieved application. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["applicationOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
put: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
appId: components["parameters"]["appIdUrl"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the updated application. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["applicationOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["application"] |
|||
} |
|||
} |
|||
} |
|||
delete: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
appId: components["parameters"]["appIdUrl"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the deleted application. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["applicationOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/applications/search": { |
|||
/** Based on application properties (currently only name) search for applications. */ |
|||
post: { |
|||
parameters: { |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the applications that were found based on the search parameters. */ |
|||
200: { |
|||
content: { |
|||
"application/json": { |
|||
data: components["schemas"]["application"][] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["nameSearch"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/queries/{queryId}": { |
|||
/** Queries which have been created within a Budibase app can be executed using this, */ |
|||
post: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the query which this request is targeting. */ |
|||
queryId: components["parameters"]["queryId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the result of the query execution. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["executeQueryOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["executeQuery"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/queries/search": { |
|||
/** Based on query properties (currently only name) search for queries. */ |
|||
post: { |
|||
parameters: { |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the queries found based on the search parameters. */ |
|||
200: { |
|||
content: { |
|||
"application/json": { |
|||
data: components["schemas"]["query"][] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["nameSearch"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/tables/{tableId}/rows": { |
|||
/** Creates a row within the specified table. */ |
|||
post: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the created row, including the ID which has been generated for it. This can be found in the Budibase portal, viewed under the developer information. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["rowOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["row"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/tables/{tableId}/rows/{rowId}": { |
|||
/** This gets a single row, it will be enriched with the full related rows, rather than the squashed "primaryDisplay" format returned by the search endpoint. */ |
|||
get: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
/** The ID of the row which this request is targeting. */ |
|||
rowId: components["parameters"]["rowId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the retrieved row. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["rowOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
/** Updates a row within the specified table. */ |
|||
put: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
/** The ID of the row which this request is targeting. */ |
|||
rowId: components["parameters"]["rowId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the created row, including the ID which has been generated for it. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["rowOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["row"] |
|||
} |
|||
} |
|||
} |
|||
/** Deletes a row within the specified table. */ |
|||
delete: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
/** The ID of the row which this request is targeting. */ |
|||
rowId: components["parameters"]["rowId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the deleted row, including the ID which has been generated for it. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["rowOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/tables/{tableId}/rows/search": { |
|||
post: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** The response will contain an array of rows that match the search parameters. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["searchOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": { |
|||
query: { |
|||
/** |
|||
* @description A map of field name to the string to search for, this will look for rows that have a value starting with the string value. |
|||
* @example [object Object] |
|||
*/ |
|||
string?: { [key: string]: string } |
|||
/** @description A fuzzy search, only supported by internal tables. */ |
|||
fuzzy?: { [key: string]: unknown } |
|||
/** |
|||
* @description Searches within a range, the format of this must be columnName -> [low, high]. |
|||
* @example [object Object] |
|||
*/ |
|||
range?: { [key: string]: unknown } |
|||
/** @description Searches for rows that have a column value that is exactly the value set. */ |
|||
equal?: { [key: string]: unknown } |
|||
/** @description Searches for any row which does not contain the specified column value. */ |
|||
notEqual?: { [key: string]: unknown } |
|||
/** |
|||
* @description Searches for rows which do not contain the specified column. The object should simply contain keys of the column names, these can map to any value. |
|||
* @example [object Object] |
|||
*/ |
|||
empty?: { [key: string]: unknown } |
|||
/** @description Searches for rows which have the specified column. */ |
|||
notEmpty?: { [key: string]: unknown } |
|||
/** @description Searches for rows which have a column value that is any of the specified values. The format of this must be columnName -> [value1, value2]. */ |
|||
oneOf?: { [key: string]: unknown } |
|||
} |
|||
/** @description Enables pagination, by default this is disabled. */ |
|||
paginate?: boolean |
|||
/** @description If retrieving another page, the bookmark from the previous request must be supplied. */ |
|||
bookmark?: string | number |
|||
/** @description The maximum number of rows to return, useful when paginating, for internal tables this will be limited to 1000, for SQL tables it will be 5000. */ |
|||
limit?: number |
|||
/** @description A set of parameters describing the sort behaviour of the search. */ |
|||
sort?: { |
|||
/** |
|||
* @description The order of the sort, by default this is ascending. |
|||
* @enum {string} |
|||
*/ |
|||
order?: "ascending" | "descending" |
|||
/** @description The name of the column by which the rows will be sorted. */ |
|||
column?: string |
|||
/** |
|||
* @description Defines whether the column should be treated as a string or as numbers when sorting. |
|||
* @enum {string} |
|||
*/ |
|||
type?: "string" | "number" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/tables": { |
|||
/** Create a table, this could be internal or external. */ |
|||
post: { |
|||
parameters: { |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the created table, including the ID which has been generated for it. This can be internal or external data sources. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["tableOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["table"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/tables/{tableId}": { |
|||
/** Lookup a table, this could be internal or external. */ |
|||
get: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the retrieved table. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["tableOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
/** Update a table, this could be internal or external. */ |
|||
put: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the updated table. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["tableOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["table"] |
|||
} |
|||
} |
|||
} |
|||
/** Delete a table, this could be internal or external. */ |
|||
delete: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the table which this request is targeting. */ |
|||
tableId: components["parameters"]["tableId"] |
|||
} |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the deleted table. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["tableOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/tables/search": { |
|||
/** Based on table properties (currently only name) search for tables. This could be an internal or an external table. */ |
|||
post: { |
|||
parameters: { |
|||
header: { |
|||
/** The ID of the app which this request is targeting. */ |
|||
"x-budibase-app-id": components["parameters"]["appId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the found tables, based on the search parameters. */ |
|||
200: { |
|||
content: { |
|||
"application/json": { |
|||
data: components["schemas"]["table"][] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["nameSearch"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/users": { |
|||
post: { |
|||
responses: { |
|||
/** Returns the created user. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["userOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["user"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/users/{userId}": { |
|||
get: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the user which this request is targeting. */ |
|||
userId: components["parameters"]["userId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the retrieved user. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["userOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
put: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the user which this request is targeting. */ |
|||
userId: components["parameters"]["userId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the updated user. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["userOutput"] |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["user"] |
|||
} |
|||
} |
|||
} |
|||
delete: { |
|||
parameters: { |
|||
path: { |
|||
/** The ID of the user which this request is targeting. */ |
|||
userId: components["parameters"]["userId"] |
|||
} |
|||
} |
|||
responses: { |
|||
/** Returns the deleted user. */ |
|||
200: { |
|||
content: { |
|||
"application/json": components["schemas"]["userOutput"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
"/users/search": { |
|||
/** Based on user properties (currently only name) search for users. */ |
|||
post: { |
|||
responses: { |
|||
/** Returns the found users based on search parameters. */ |
|||
200: { |
|||
content: { |
|||
"application/json": { |
|||
data: components["schemas"]["user"][] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
requestBody: { |
|||
content: { |
|||
"application/json": components["schemas"]["nameSearch"] |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
export interface components { |
|||
schemas: { |
|||
application: { |
|||
/** @description The name of the app. */ |
|||
name: string |
|||
/** @description The URL by which the app is accessed, this must be URL encoded. */ |
|||
url: string |
|||
} |
|||
applicationOutput: { |
|||
data: { |
|||
/** @description The name of the app. */ |
|||
name: string |
|||
/** @description The URL by which the app is accessed, this must be URL encoded. */ |
|||
url: string |
|||
/** @description The ID of the app. */ |
|||
_id: string |
|||
/** |
|||
* @description The status of the app, stating it if is the development or published version. |
|||
* @enum {string} |
|||
*/ |
|||
status: "development" | "published" |
|||
/** @description States when the app was created, will be constant. Stored in ISO format. */ |
|||
createdAt: string |
|||
/** @description States the last time the app was updated - stored in ISO format. */ |
|||
updatedAt: string |
|||
/** @description States the version of the Budibase client this app is currently based on. */ |
|||
version: string |
|||
/** @description In a multi-tenant environment this will state the tenant this app is within. */ |
|||
tenantId?: string |
|||
/** @description The user this app is currently being built by. */ |
|||
lockedBy?: { [key: string]: unknown } |
|||
} |
|||
} |
|||
/** @description The row to be created/updated, based on the table schema. */ |
|||
row: { |
|||
[key: string]: |
|||
| string |
|||
| { [key: string]: unknown } |
|||
| number |
|||
| unknown[] |
|||
| boolean |
|||
} |
|||
searchOutput: { |
|||
/** @description An array of rows, these will each contain an _id field which can be used to update or delete them. */ |
|||
data: { [key: string]: unknown }[] |
|||
/** @description If pagination in use, this should be provided. */ |
|||
bookmark?: string | number |
|||
/** @description If pagination in use, this will determine if there is another page to fetch. */ |
|||
hasNextPage?: boolean |
|||
} |
|||
rowOutput: { |
|||
/** @description The row to be created/updated, based on the table schema. */ |
|||
data: { |
|||
/** @description The ID of the row. */ |
|||
_id: string |
|||
/** @description The ID of the table this row comes from. */ |
|||
tableId: string |
|||
} & { |
|||
[key: string]: |
|||
| string |
|||
| { [key: string]: unknown } |
|||
| number |
|||
| unknown[] |
|||
| boolean |
|||
} |
|||
} |
|||
/** @description The table to be created/updated. */ |
|||
table: { |
|||
/** @description The name of the table. */ |
|||
name: string |
|||
/** @description The name of the column which should be used in relationship tags when relating to this table. */ |
|||
primaryDisplay?: string |
|||
schema: { |
|||
[key: string]: |
|||
| { |
|||
/** |
|||
* @description A relationship column. |
|||
* @enum {string} |
|||
*/ |
|||
type?: "link" |
|||
/** @description A constraint can be applied to the column which will be validated against when a row is saved. */ |
|||
constraints?: { |
|||
/** @enum {string} */ |
|||
type?: "string" | "number" | "object" | "boolean" |
|||
/** @description Defines whether the column is required or not. */ |
|||
presence?: boolean |
|||
} |
|||
/** @description The name of the column. */ |
|||
name?: string |
|||
/** @description Defines whether the column is automatically generated. */ |
|||
autocolumn?: boolean |
|||
/** @description The name of the column which a relationship column is related to in another table. */ |
|||
fieldName?: string |
|||
/** @description The ID of the table which a relationship column is related to. */ |
|||
tableId?: string |
|||
/** |
|||
* @description Defines the type of relationship that this column will be used for. |
|||
* @enum {string} |
|||
*/ |
|||
relationshipType?: "one-to-many" | "many-to-one" | "many-to-many" |
|||
/** @description When using a SQL table that contains many to many relationships this defines the table the relationships are linked through. */ |
|||
through?: string |
|||
/** @description When using a SQL table that contains a one to many relationship this defines the foreign key. */ |
|||
foreignKey?: string |
|||
/** @description When using a SQL table that utilises a through table, this defines the primary key in the through table for this table. */ |
|||
throughFrom?: string |
|||
/** @description When using a SQL table that utilises a through table, this defines the primary key in the through table for the related table. */ |
|||
throughTo?: string |
|||
} |
|||
| { |
|||
/** |
|||
* @description A formula column. |
|||
* @enum {string} |
|||
*/ |
|||
type?: "formula" |
|||
/** @description A constraint can be applied to the column which will be validated against when a row is saved. */ |
|||
constraints?: { |
|||
/** @enum {string} */ |
|||
type?: "string" | "number" | "object" | "boolean" |
|||
/** @description Defines whether the column is required or not. */ |
|||
presence?: boolean |
|||
} |
|||
/** @description The name of the column. */ |
|||
name?: string |
|||
/** @description Defines whether the column is automatically generated. */ |
|||
autocolumn?: boolean |
|||
/** @description Defines a Handlebars or JavaScript formula to use, note that Javascript formulas are expected to be provided in the base64 format. */ |
|||
formula?: string |
|||
/** |
|||
* @description Defines whether this is a static or dynamic formula. |
|||
* @enum {string} |
|||
*/ |
|||
formulaType?: "static" | "dynamic" |
|||
} |
|||
| { |
|||
/** |
|||
* @description Defines the type of the column, most explain themselves, a link column is a relationship. |
|||
* @enum {string} |
|||
*/ |
|||
type?: |
|||
| "string" |
|||
| "longform" |
|||
| "options" |
|||
| "number" |
|||
| "boolean" |
|||
| "array" |
|||
| "datetime" |
|||
| "attachment" |
|||
| "link" |
|||
| "formula" |
|||
| "auto" |
|||
| "json" |
|||
| "internal" |
|||
/** @description A constraint can be applied to the column which will be validated against when a row is saved. */ |
|||
constraints?: { |
|||
/** @enum {string} */ |
|||
type?: "string" | "number" | "object" | "boolean" |
|||
/** @description Defines whether the column is required or not. */ |
|||
presence?: boolean |
|||
} |
|||
/** @description The name of the column. */ |
|||
name?: string |
|||
/** @description Defines whether the column is automatically generated. */ |
|||
autocolumn?: boolean |
|||
} |
|||
} |
|||
} |
|||
tableOutput: { |
|||
/** @description The table to be created/updated. */ |
|||
data: { |
|||
/** @description The name of the table. */ |
|||
name: string |
|||
/** @description The name of the column which should be used in relationship tags when relating to this table. */ |
|||
primaryDisplay?: string |
|||
schema: { |
|||
[key: string]: |
|||
| { |
|||
/** |
|||
* @description A relationship column. |
|||
* @enum {string} |
|||
*/ |
|||
type?: "link" |
|||
/** @description A constraint can be applied to the column which will be validated against when a row is saved. */ |
|||
constraints?: { |
|||
/** @enum {string} */ |
|||
type?: "string" | "number" | "object" | "boolean" |
|||
/** @description Defines whether the column is required or not. */ |
|||
presence?: boolean |
|||
} |
|||
/** @description The name of the column. */ |
|||
name?: string |
|||
/** @description Defines whether the column is automatically generated. */ |
|||
autocolumn?: boolean |
|||
/** @description The name of the column which a relationship column is related to in another table. */ |
|||
fieldName?: string |
|||
/** @description The ID of the table which a relationship column is related to. */ |
|||
tableId?: string |
|||
/** |
|||
* @description Defines the type of relationship that this column will be used for. |
|||
* @enum {string} |
|||
*/ |
|||
relationshipType?: |
|||
| "one-to-many" |
|||
| "many-to-one" |
|||
| "many-to-many" |
|||
/** @description When using a SQL table that contains many to many relationships this defines the table the relationships are linked through. */ |
|||
through?: string |
|||
/** @description When using a SQL table that contains a one to many relationship this defines the foreign key. */ |
|||
foreignKey?: string |
|||
/** @description When using a SQL table that utilises a through table, this defines the primary key in the through table for this table. */ |
|||
throughFrom?: string |
|||
/** @description When using a SQL table that utilises a through table, this defines the primary key in the through table for the related table. */ |
|||
throughTo?: string |
|||
} |
|||
| { |
|||
/** |
|||
* @description A formula column. |
|||
* @enum {string} |
|||
*/ |
|||
type?: "formula" |
|||
/** @description A constraint can be applied to the column which will be validated against when a row is saved. */ |
|||
constraints?: { |
|||
/** @enum {string} */ |
|||
type?: "string" | "number" | "object" | "boolean" |
|||
/** @description Defines whether the column is required or not. */ |
|||
presence?: boolean |
|||
} |
|||
/** @description The name of the column. */ |
|||
name?: string |
|||
/** @description Defines whether the column is automatically generated. */ |
|||
autocolumn?: boolean |
|||
/** @description Defines a Handlebars or JavaScript formula to use, note that Javascript formulas are expected to be provided in the base64 format. */ |
|||
formula?: string |
|||
/** |
|||
* @description Defines whether this is a static or dynamic formula. |
|||
* @enum {string} |
|||
*/ |
|||
formulaType?: "static" | "dynamic" |
|||
} |
|||
| { |
|||
/** |
|||
* @description Defines the type of the column, most explain themselves, a link column is a relationship. |
|||
* @enum {string} |
|||
*/ |
|||
type?: |
|||
| "string" |
|||
| "longform" |
|||
| "options" |
|||
| "number" |
|||
| "boolean" |
|||
| "array" |
|||
| "datetime" |
|||
| "attachment" |
|||
| "link" |
|||
| "formula" |
|||
| "auto" |
|||
| "json" |
|||
| "internal" |
|||
/** @description A constraint can be applied to the column which will be validated against when a row is saved. */ |
|||
constraints?: { |
|||
/** @enum {string} */ |
|||
type?: "string" | "number" | "object" | "boolean" |
|||
/** @description Defines whether the column is required or not. */ |
|||
presence?: boolean |
|||
} |
|||
/** @description The name of the column. */ |
|||
name?: string |
|||
/** @description Defines whether the column is automatically generated. */ |
|||
autocolumn?: boolean |
|||
} |
|||
} |
|||
/** @description The ID of the table. */ |
|||
_id: string |
|||
} |
|||
} |
|||
/** @description The query body must contain the required parameters for the query, this depends on query type, setup and bindings. */ |
|||
executeQuery: { |
|||
[key: string]: |
|||
| string |
|||
| { [key: string]: unknown } |
|||
| number |
|||
| unknown[] |
|||
| boolean |
|||
} |
|||
executeQueryOutput: { |
|||
/** @description The data response from the query. */ |
|||
data: { [key: string]: unknown }[] |
|||
/** @description Extra information that is not part of the main data, e.g. headers. */ |
|||
extra?: { |
|||
/** @description If carrying out a REST request, this will contain the response headers. */ |
|||
headers?: { [key: string]: unknown } |
|||
/** @description The raw query response, as a string. */ |
|||
raw?: string |
|||
} |
|||
/** @description Extra info from the query in a key-value map, like response times. */ |
|||
info?: { [key: string]: unknown } |
|||
/** @description If pagination is supported, this will contain the bookmark/anchor information for it. */ |
|||
pagination?: { [key: string]: unknown } |
|||
} |
|||
query: { |
|||
/** @description The ID of the query. */ |
|||
_id: string |
|||
/** @description The ID of the data source the query belongs to. */ |
|||
datasourceId?: string |
|||
/** @description The bindings which are required to perform this query. */ |
|||
parameters?: string[] |
|||
/** @description The fields that are used to perform this query, e.g. the sql statement */ |
|||
fields?: { [key: string]: unknown } |
|||
/** |
|||
* @description The verb that describes this query. |
|||
* @enum {undefined} |
|||
*/ |
|||
queryVerb?: "create" | "read" | "update" | "delete" |
|||
/** @description The name of the query. */ |
|||
name: string |
|||
/** @description The schema of the data returned when the query is executed. */ |
|||
schema: { [key: string]: unknown } |
|||
/** @description The JavaScript transformer function, applied after the query responds with data. */ |
|||
transformer?: string |
|||
/** @description Whether the query has readable data. */ |
|||
readable?: boolean |
|||
} |
|||
user: { |
|||
/** @description The email address of the user, this must be unique. */ |
|||
email: string |
|||
/** @description The password of the user if using password based login - this will never be returned. This can be left out of subsequent requests (updates) and will be enriched back into the user structure. */ |
|||
password?: string |
|||
/** |
|||
* @description The status of the user, if they are active. |
|||
* @enum {string} |
|||
*/ |
|||
status?: "active" |
|||
/** @description The first name of the user */ |
|||
firstName?: string |
|||
/** @description The last name of the user */ |
|||
lastName?: string |
|||
/** @description If set to true forces the user to reset their password on first login. */ |
|||
forceResetPassword?: boolean |
|||
/** @description Describes if the user is a builder user or not. */ |
|||
builder?: { |
|||
/** @description If set to true the user will be able to build any app in the system. */ |
|||
global?: boolean |
|||
} |
|||
/** @description Describes if the user is an admin user or not. */ |
|||
admin?: { |
|||
/** @description If set to true the user will be able to administrate the system. */ |
|||
global?: boolean |
|||
} |
|||
/** @description Contains the roles of the user per app (assuming they are not a builder user). */ |
|||
roles: { [key: string]: string } |
|||
} |
|||
userOutput: { |
|||
data: { |
|||
/** @description The email address of the user, this must be unique. */ |
|||
email: string |
|||
/** @description The password of the user if using password based login - this will never be returned. This can be left out of subsequent requests (updates) and will be enriched back into the user structure. */ |
|||
password?: string |
|||
/** |
|||
* @description The status of the user, if they are active. |
|||
* @enum {string} |
|||
*/ |
|||
status?: "active" |
|||
/** @description The first name of the user */ |
|||
firstName?: string |
|||
/** @description The last name of the user */ |
|||
lastName?: string |
|||
/** @description If set to true forces the user to reset their password on first login. */ |
|||
forceResetPassword?: boolean |
|||
/** @description Describes if the user is a builder user or not. */ |
|||
builder?: { |
|||
/** @description If set to true the user will be able to build any app in the system. */ |
|||
global?: boolean |
|||
} |
|||
/** @description Describes if the user is an admin user or not. */ |
|||
admin?: { |
|||
/** @description If set to true the user will be able to administrate the system. */ |
|||
global?: boolean |
|||
} |
|||
/** @description Contains the roles of the user per app (assuming they are not a builder user). */ |
|||
roles: { [key: string]: string } |
|||
/** @description The ID of the user. */ |
|||
_id: string |
|||
} |
|||
} |
|||
nameSearch: { |
|||
/** @description The name to be used when searching - this will be used in a case insensitive starts with match. */ |
|||
name: string |
|||
} |
|||
} |
|||
parameters: { |
|||
/** @description The ID of the table which this request is targeting. */ |
|||
tableId: string |
|||
/** @description The ID of the row which this request is targeting. */ |
|||
rowId: string |
|||
/** @description The ID of the app which this request is targeting. */ |
|||
appId: string |
|||
/** @description The ID of the app which this request is targeting. */ |
|||
appIdUrl: string |
|||
/** @description The ID of the query which this request is targeting. */ |
|||
queryId: string |
|||
/** @description The ID of the user which this request is targeting. */ |
|||
userId: string |
|||
} |
|||
} |
|||
|
|||
export interface operations {} |
|||
|
|||
export interface external {} |
|||
@ -0,0 +1,81 @@ |
|||
import mapping from "../../../controllers/public/mapping" |
|||
|
|||
enum Resources { |
|||
APPLICATION = "applications", |
|||
TABLES = "tables", |
|||
ROWS = "rows", |
|||
USERS = "users", |
|||
QUERIES = "queries", |
|||
SEARCH = "search", |
|||
} |
|||
|
|||
function isSearch(ctx: any) { |
|||
return ctx.url.endsWith(Resources.SEARCH) |
|||
} |
|||
|
|||
function processApplications(ctx: any) { |
|||
if (isSearch(ctx)) { |
|||
return mapping.mapApplications(ctx) |
|||
} else { |
|||
return mapping.mapApplication(ctx) |
|||
} |
|||
} |
|||
|
|||
function processTables(ctx: any) { |
|||
if (isSearch(ctx)) { |
|||
return mapping.mapTables(ctx) |
|||
} else { |
|||
return mapping.mapTable(ctx) |
|||
} |
|||
} |
|||
|
|||
function processRows(ctx: any) { |
|||
if (isSearch(ctx)) { |
|||
return mapping.mapRowSearch(ctx) |
|||
} else { |
|||
return mapping.mapRow(ctx) |
|||
} |
|||
} |
|||
|
|||
function processUsers(ctx: any) { |
|||
if (isSearch(ctx)) { |
|||
return mapping.mapUsers(ctx) |
|||
} else { |
|||
return mapping.mapUser(ctx) |
|||
} |
|||
} |
|||
|
|||
function processQueries(ctx: any) { |
|||
if (isSearch(ctx)) { |
|||
return mapping.mapQueries(ctx) |
|||
} else { |
|||
return mapping.mapQueryExecution(ctx) |
|||
} |
|||
} |
|||
|
|||
export default async (ctx: any, next: any) => { |
|||
let urlParts = ctx.url.split("/") |
|||
urlParts = urlParts.slice(4, urlParts.length) |
|||
let body = {} |
|||
switch (urlParts[0]) { |
|||
case Resources.APPLICATION: |
|||
body = processApplications(ctx) |
|||
break |
|||
case Resources.TABLES: |
|||
if (urlParts[2] === Resources.ROWS) { |
|||
body = processRows(ctx) |
|||
} else { |
|||
body = processTables(ctx) |
|||
} |
|||
break |
|||
case Resources.USERS: |
|||
body = processUsers(ctx) |
|||
break |
|||
case Resources.QUERIES: |
|||
body = processQueries(ctx) |
|||
break |
|||
} |
|||
// update the body based on what has occurred in the mapper
|
|||
ctx.body = body |
|||
await next() |
|||
} |
|||
File diff suppressed because it is too large
Loading…
Reference in new issue