From dadf3fef02d9ca01bb6132f47f82e4f8f82634ee Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Tue, 1 Mar 2022 22:37:42 +0000 Subject: [PATCH] Review comments and linting. --- packages/server/specs/openapi.json | 54 +- packages/server/specs/openapi.yaml | 21 +- packages/server/specs/resources/query.js | 9 +- packages/server/specs/resources/row.js | 9 +- .../public/mapping/applications.ts | 4 +- .../api/controllers/public/mapping/queries.ts | 4 +- .../api/controllers/public/mapping/rows.ts | 4 +- .../api/controllers/public/mapping/tables.ts | 4 +- .../api/controllers/public/mapping/types.ts | 6 +- .../api/controllers/public/mapping/users.ts | 4 +- packages/server/src/definitions/openapi.ts | 839 +++++++++--------- 11 files changed, 430 insertions(+), 528 deletions(-) diff --git a/packages/server/specs/openapi.json b/packages/server/specs/openapi.json index 9ee081eb09..3e68d3edca 100644 --- a/packages/server/specs/openapi.json +++ b/packages/server/specs/openapi.json @@ -497,23 +497,7 @@ "description": "The row to be created/updated, based on the table schema.", "type": "object", "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - }, - { - "type": "integer" - }, - { - "type": "array" - }, - { - "type": "boolean" - } - ] + "description": "Key value properties of any type, depending on the table schema." } }, "searchOutput": { @@ -553,23 +537,7 @@ "description": "The row to be created/updated, based on the table schema.", "type": "object", "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - }, - { - "type": "integer" - }, - { - "type": "array" - }, - { - "type": "boolean" - } - ] + "description": "Key value properties of any type, depending on the table schema." }, "properties": { "_id": { @@ -1006,23 +974,7 @@ "description": "The query body must contain the required parameters for the query, this depends on query type, setup and bindings.", "type": "object", "additionalProperties": { - "oneOf": [ - { - "type": "string" - }, - { - "type": "object" - }, - { - "type": "integer" - }, - { - "type": "array" - }, - { - "type": "boolean" - } - ] + "description": "Key value properties of any type, depending on the query output schema." } }, "executeQueryOutput": { diff --git a/packages/server/specs/openapi.yaml b/packages/server/specs/openapi.yaml index c9b7a38e0d..298eb73636 100644 --- a/packages/server/specs/openapi.yaml +++ b/packages/server/specs/openapi.yaml @@ -356,12 +356,7 @@ components: description: The row to be created/updated, based on the table schema. type: object additionalProperties: - oneOf: - - type: string - - type: object - - type: integer - - type: array - - type: boolean + description: Key value properties of any type, depending on the table schema. searchOutput: type: object required: @@ -389,12 +384,7 @@ components: description: The row to be created/updated, based on the table schema. type: object additionalProperties: - oneOf: - - type: string - - type: object - - type: integer - - type: array - - type: boolean + description: Key value properties of any type, depending on the table schema. properties: _id: description: The ID of the row. @@ -737,12 +727,7 @@ components: this depends on query type, setup and bindings. type: object additionalProperties: - oneOf: - - type: string - - type: object - - type: integer - - type: array - - type: boolean + description: Key value properties of any type, depending on the query output schema. executeQueryOutput: type: object properties: diff --git a/packages/server/specs/resources/query.js b/packages/server/specs/resources/query.js index 8a0b888024..46498ddd27 100644 --- a/packages/server/specs/resources/query.js +++ b/packages/server/specs/resources/query.js @@ -128,13 +128,8 @@ const executeQuerySchema = { "The query body must contain the required parameters for the query, this depends on query type, setup and bindings.", type: "object", additionalProperties: { - oneOf: [ - { type: "string" }, - { type: "object" }, - { type: "integer" }, - { type: "array" }, - { type: "boolean" }, - ], + description: + "Key value properties of any type, depending on the query output schema.", }, } diff --git a/packages/server/specs/resources/row.js b/packages/server/specs/resources/row.js index 2bd540af0e..4e6359a029 100644 --- a/packages/server/specs/resources/row.js +++ b/packages/server/specs/resources/row.js @@ -48,13 +48,8 @@ const rowSchema = { description: "The row to be created/updated, based on the table schema.", type: "object", additionalProperties: { - oneOf: [ - { type: "string" }, - { type: "object" }, - { type: "integer" }, - { type: "array" }, - { type: "boolean" }, - ], + description: + "Key value properties of any type, depending on the table schema.", }, } diff --git a/packages/server/src/api/controllers/public/mapping/applications.ts b/packages/server/src/api/controllers/public/mapping/applications.ts index a78c51bfb1..0b729fc610 100644 --- a/packages/server/src/api/controllers/public/mapping/applications.ts +++ b/packages/server/src/api/controllers/public/mapping/applications.ts @@ -1,4 +1,4 @@ -import { Application, ApplicationOutput } from "./types" +import { Application } from "./types" function application(body: any): Application { let app = body?.application ? body.application : body @@ -15,7 +15,7 @@ function application(body: any): Application { } } -function mapApplication(ctx: any): ApplicationOutput { +function mapApplication(ctx: any): { data: Application } { return { data: application(ctx.body), } diff --git a/packages/server/src/api/controllers/public/mapping/queries.ts b/packages/server/src/api/controllers/public/mapping/queries.ts index a9f220442d..481b5f18c4 100644 --- a/packages/server/src/api/controllers/public/mapping/queries.ts +++ b/packages/server/src/api/controllers/public/mapping/queries.ts @@ -1,4 +1,4 @@ -import { Query, ExecuteQueryOutput } from "./types" +import { Query, ExecuteQuery } from "./types" function query(body: any): Query { return { @@ -21,7 +21,7 @@ function mapQueries(ctx: any): { data: Query[] } { } } -function mapQueryExecution(ctx: any): ExecuteQueryOutput { +function mapQueryExecution(ctx: any): ExecuteQuery { // very little we can map here, structure mostly unknown return { data: ctx.body.data, diff --git a/packages/server/src/api/controllers/public/mapping/rows.ts b/packages/server/src/api/controllers/public/mapping/rows.ts index 623a210b3d..c1cba43718 100644 --- a/packages/server/src/api/controllers/public/mapping/rows.ts +++ b/packages/server/src/api/controllers/public/mapping/rows.ts @@ -1,4 +1,4 @@ -import { Row, RowSearch, RowOutput } from "./types" +import { Row, RowSearch } from "./types" function row(body: any): Row { delete body._rev @@ -19,7 +19,7 @@ function mapRowSearch(ctx: any): RowSearch { } } -function mapRow(ctx: any): RowOutput { +function mapRow(ctx: any): { data: Row } { return { data: row(ctx.body), } diff --git a/packages/server/src/api/controllers/public/mapping/tables.ts b/packages/server/src/api/controllers/public/mapping/tables.ts index 7c582becc7..72ed9f1a9a 100644 --- a/packages/server/src/api/controllers/public/mapping/tables.ts +++ b/packages/server/src/api/controllers/public/mapping/tables.ts @@ -1,4 +1,4 @@ -import { Table, TableOutput } from "./types" +import { Table } from "./types" function table(body: any): Table { return { @@ -9,7 +9,7 @@ function table(body: any): Table { } } -function mapTable(ctx: any): TableOutput { +function mapTable(ctx: any): { data: Table } { return { data: table(ctx.body), } diff --git a/packages/server/src/api/controllers/public/mapping/types.ts b/packages/server/src/api/controllers/public/mapping/types.ts index b2559ce9ba..a82a525f9c 100644 --- a/packages/server/src/api/controllers/public/mapping/types.ts +++ b/packages/server/src/api/controllers/public/mapping/types.ts @@ -1,17 +1,13 @@ import { components } from "../../../../definitions/openapi" export type Query = components["schemas"]["query"] -export type ExecuteQueryOutput = components["schemas"]["executeQueryOutput"] +export type ExecuteQuery = 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"] diff --git a/packages/server/src/api/controllers/public/mapping/users.ts b/packages/server/src/api/controllers/public/mapping/users.ts index 847378c7c3..db08b16552 100644 --- a/packages/server/src/api/controllers/public/mapping/users.ts +++ b/packages/server/src/api/controllers/public/mapping/users.ts @@ -1,4 +1,4 @@ -import { User, UserOutput } from "./types" +import { User } from "./types" function user(body: any): User { return { @@ -15,7 +15,7 @@ function user(body: any): User { } } -function mapUser(ctx: any): UserOutput { +function mapUser(ctx: any): { data: User } { return { data: user(ctx.body), } diff --git a/packages/server/src/definitions/openapi.ts b/packages/server/src/definitions/openapi.ts index af2c2e2bb8..71a9298040 100644 --- a/packages/server/src/definitions/openapi.ts +++ b/packages/server/src/definitions/openapi.ts @@ -9,283 +9,283 @@ export interface paths { parameters: { header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "x-budibase-app-id": components["parameters"]["appId"] + } + } responses: { /** Returns the created application. */ 200: { content: { - "application/json": components["schemas"]["applicationOutput"]; - }; - }; - }; + "application/json": components["schemas"]["applicationOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["application"]; - }; - }; - }; - }; + "application/json": components["schemas"]["application"] + } + } + } + } "/applications/{appId}": { get: { parameters: { path: { /** The ID of the app which this request is targeting. */ - appId: components["parameters"]["appIdUrl"]; - }; - }; + appId: components["parameters"]["appIdUrl"] + } + } responses: { /** Returns the retrieved application. */ 200: { content: { - "application/json": components["schemas"]["applicationOutput"]; - }; - }; - }; - }; + "application/json": components["schemas"]["applicationOutput"] + } + } + } + } put: { parameters: { path: { /** The ID of the app which this request is targeting. */ - appId: components["parameters"]["appIdUrl"]; - }; - }; + appId: components["parameters"]["appIdUrl"] + } + } responses: { /** Returns the updated application. */ 200: { content: { - "application/json": components["schemas"]["applicationOutput"]; - }; - }; - }; + "application/json": components["schemas"]["applicationOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["application"]; - }; - }; - }; + "application/json": components["schemas"]["application"] + } + } + } delete: { parameters: { path: { /** The ID of the app which this request is targeting. */ - appId: components["parameters"]["appIdUrl"]; - }; - }; + appId: components["parameters"]["appIdUrl"] + } + } responses: { /** Returns the deleted application. */ 200: { content: { - "application/json": components["schemas"]["applicationOutput"]; - }; - }; - }; - }; - }; + "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"]; - }; - }; + "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"][]; - }; - }; - }; - }; + data: components["schemas"]["application"][] + } + } + } + } requestBody: { content: { - "application/json": components["schemas"]["nameSearch"]; - }; - }; - }; - }; + "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"]; - }; + queryId: components["parameters"]["queryId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "x-budibase-app-id": components["parameters"]["appId"] + } + } responses: { /** Returns the result of the query execution. */ 200: { content: { - "application/json": components["schemas"]["executeQueryOutput"]; - }; - }; - }; + "application/json": components["schemas"]["executeQueryOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["executeQuery"]; - }; - }; - }; - }; + "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"]; - }; - }; + "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"][]; - }; - }; - }; - }; + data: components["schemas"]["query"][] + } + } + } + } requestBody: { content: { - "application/json": components["schemas"]["nameSearch"]; - }; - }; - }; - }; + "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"]; - }; + tableId: components["parameters"]["tableId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "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"]; - }; - }; - }; + "application/json": components["schemas"]["rowOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["row"]; - }; - }; - }; - }; + "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"]; + tableId: components["parameters"]["tableId"] /** The ID of the row which this request is targeting. */ - rowId: components["parameters"]["rowId"]; - }; + rowId: components["parameters"]["rowId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "x-budibase-app-id": components["parameters"]["appId"] + } + } responses: { /** Returns the retrieved row. */ 200: { content: { - "application/json": components["schemas"]["rowOutput"]; - }; - }; - }; - }; + "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"]; + tableId: components["parameters"]["tableId"] /** The ID of the row which this request is targeting. */ - rowId: components["parameters"]["rowId"]; - }; + rowId: components["parameters"]["rowId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "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"]; - }; - }; - }; + "application/json": components["schemas"]["rowOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["row"]; - }; - }; - }; + "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"]; + tableId: components["parameters"]["tableId"] /** The ID of the row which this request is targeting. */ - rowId: components["parameters"]["rowId"]; - }; + rowId: components["parameters"]["rowId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "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"]; - }; - }; - }; - }; - }; + "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"]; - }; + tableId: components["parameters"]["tableId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "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"]; - }; - }; - }; + "application/json": components["schemas"]["searchOutput"] + } + } + } requestBody: { content: { "application/json": { @@ -294,246 +294,246 @@ export interface paths { * @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 }; + string?: { [key: string]: string } /** @description A fuzzy search, only supported by internal tables. */ - fuzzy?: { [key: string]: unknown }; + 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 }; + range?: { [key: string]: unknown } /** @description Searches for rows that have a column value that is exactly the value set. */ - equal?: { [key: string]: unknown }; + equal?: { [key: string]: unknown } /** @description Searches for any row which does not contain the specified column value. */ - notEqual?: { [key: string]: unknown }; + 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 }; + empty?: { [key: string]: unknown } /** @description Searches for rows which have the specified column. */ - notEmpty?: { [key: string]: unknown }; + 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 }; - }; + oneOf?: { [key: string]: unknown } + } /** @description Enables pagination, by default this is disabled. */ - paginate?: boolean; + paginate?: boolean /** @description If retrieving another page, the bookmark from the previous request must be supplied. */ - bookmark?: string | number; + 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; + 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"; + order?: "ascending" | "descending" /** @description The name of the column by which the rows will be sorted. */ - column?: string; + column?: string /** * @description Defines whether the column should be treated as a string or as numbers when sorting. * @enum {string} */ - type?: "string" | "number"; - }; - }; - }; - }; - }; - }; + 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"]; - }; - }; + "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"]; - }; - }; - }; + "application/json": components["schemas"]["tableOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["table"]; - }; - }; - }; - }; + "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"]; - }; + tableId: components["parameters"]["tableId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "x-budibase-app-id": components["parameters"]["appId"] + } + } responses: { /** Returns the retrieved table. */ 200: { content: { - "application/json": components["schemas"]["tableOutput"]; - }; - }; - }; - }; + "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"]; - }; + tableId: components["parameters"]["tableId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "x-budibase-app-id": components["parameters"]["appId"] + } + } responses: { /** Returns the updated table. */ 200: { content: { - "application/json": components["schemas"]["tableOutput"]; - }; - }; - }; + "application/json": components["schemas"]["tableOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["table"]; - }; - }; - }; + "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"]; - }; + tableId: components["parameters"]["tableId"] + } header: { /** The ID of the app which this request is targeting. */ - "x-budibase-app-id": components["parameters"]["appId"]; - }; - }; + "x-budibase-app-id": components["parameters"]["appId"] + } + } responses: { /** Returns the deleted table. */ 200: { content: { - "application/json": components["schemas"]["tableOutput"]; - }; - }; - }; - }; - }; + "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"]; - }; - }; + "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"][]; - }; - }; - }; - }; + data: components["schemas"]["table"][] + } + } + } + } requestBody: { content: { - "application/json": components["schemas"]["nameSearch"]; - }; - }; - }; - }; + "application/json": components["schemas"]["nameSearch"] + } + } + } + } "/users": { post: { responses: { /** Returns the created user. */ 200: { content: { - "application/json": components["schemas"]["userOutput"]; - }; - }; - }; + "application/json": components["schemas"]["userOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["user"]; - }; - }; - }; - }; + "application/json": components["schemas"]["user"] + } + } + } + } "/users/{userId}": { get: { parameters: { path: { /** The ID of the user which this request is targeting. */ - userId: components["parameters"]["userId"]; - }; - }; + userId: components["parameters"]["userId"] + } + } responses: { /** Returns the retrieved user. */ 200: { content: { - "application/json": components["schemas"]["userOutput"]; - }; - }; - }; - }; + "application/json": components["schemas"]["userOutput"] + } + } + } + } put: { parameters: { path: { /** The ID of the user which this request is targeting. */ - userId: components["parameters"]["userId"]; - }; - }; + userId: components["parameters"]["userId"] + } + } responses: { /** Returns the updated user. */ 200: { content: { - "application/json": components["schemas"]["userOutput"]; - }; - }; - }; + "application/json": components["schemas"]["userOutput"] + } + } + } requestBody: { content: { - "application/json": components["schemas"]["user"]; - }; - }; - }; + "application/json": components["schemas"]["user"] + } + } + } delete: { parameters: { path: { /** The ID of the user which this request is targeting. */ - userId: components["parameters"]["userId"]; - }; - }; + userId: components["parameters"]["userId"] + } + } responses: { /** Returns the deleted user. */ 200: { content: { - "application/json": components["schemas"]["userOutput"]; - }; - }; - }; - }; - }; + "application/json": components["schemas"]["userOutput"] + } + } + } + } + } "/users/search": { /** Based on user properties (currently only name) search for users. */ post: { @@ -542,92 +542,78 @@ export interface paths { 200: { content: { "application/json": { - data: components["schemas"]["user"][]; - }; - }; - }; - }; + data: components["schemas"]["user"][] + } + } + } + } requestBody: { content: { - "application/json": components["schemas"]["nameSearch"]; - }; - }; - }; - }; + "application/json": components["schemas"]["nameSearch"] + } + } + } + } } export interface components { schemas: { application: { /** @description The name of the app. */ - name: string; + name: string /** @description The URL by which the app is accessed, this must be URL encoded. */ - url: string; - }; + url: string + } applicationOutput: { data: { /** @description The name of the app. */ - name: string; + name: string /** @description The URL by which the app is accessed, this must be URL encoded. */ - url: string; + url: string /** @description The ID of the app. */ - _id: string; + _id: string /** * @description The status of the app, stating it if is the development or published version. * @enum {string} */ - status: "development" | "published"; + status: "development" | "published" /** @description States when the app was created, will be constant. Stored in ISO format. */ - createdAt: string; + createdAt: string /** @description States the last time the app was updated - stored in ISO format. */ - updatedAt: string; + updatedAt: string /** @description States the version of the Budibase client this app is currently based on. */ - version: string; + version: string /** @description In a multi-tenant environment this will state the tenant this app is within. */ - tenantId?: string; + tenantId?: string /** @description The user this app is currently being built by. */ - lockedBy?: { [key: string]: unknown }; - }; - }; + 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; - }; + row: { [key: string]: unknown } 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 }[]; + data: { [key: string]: unknown }[] /** @description If pagination in use, this should be provided. */ - bookmark?: string | number; + bookmark?: string | number /** @description If pagination in use, this will determine if there is another page to fetch. */ - hasNextPage?: boolean; - }; + hasNextPage?: boolean + } rowOutput: { /** @description The row to be created/updated, based on the table schema. */ data: { /** @description The ID of the row. */ - _id: string; + _id: string /** @description The ID of the table this row comes from. */ - tableId: string; - } & { - [key: string]: - | string - | { [key: string]: unknown } - | number - | unknown[] - | boolean; - }; - }; + tableId: string + } & { [key: string]: unknown } + } /** @description The table to be created/updated. */ table: { /** @description The name of the table. */ - name: string; + name: string /** @description The name of the column which should be used in relationship tags when relating to this table. */ - primaryDisplay?: string; + primaryDisplay?: string schema: { [key: string]: | { @@ -635,60 +621,60 @@ export interface components { * @description A relationship column. * @enum {string} */ - type?: "link"; + 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"; + type?: "string" | "number" | "object" | "boolean" /** @description Defines whether the column is required or not. */ - presence?: boolean; - }; + presence?: boolean + } /** @description The name of the column. */ - name?: string; + name?: string /** @description Defines whether the column is automatically generated. */ - autocolumn?: boolean; + autocolumn?: boolean /** @description The name of the column which a relationship column is related to in another table. */ - fieldName?: string; + fieldName?: string /** @description The ID of the table which a relationship column is related to. */ - tableId?: string; + 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"; + 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; + through?: string /** @description When using a SQL table that contains a one to many relationship this defines the foreign key. */ - foreignKey?: string; + 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; + 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; + throughTo?: string } | { /** * @description A formula column. * @enum {string} */ - type?: "formula"; + 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"; + type?: "string" | "number" | "object" | "boolean" /** @description Defines whether the column is required or not. */ - presence?: boolean; - }; + presence?: boolean + } /** @description The name of the column. */ - name?: string; + name?: string /** @description Defines whether the column is automatically generated. */ - autocolumn?: boolean; + 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; + formula?: string /** * @description Defines whether this is a static or dynamic formula. * @enum {string} */ - formulaType?: "static" | "dynamic"; + formulaType?: "static" | "dynamic" } | { /** @@ -708,28 +694,28 @@ export interface components { | "formula" | "auto" | "json" - | "internal"; + | "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"; + type?: "string" | "number" | "object" | "boolean" /** @description Defines whether the column is required or not. */ - presence?: boolean; - }; + presence?: boolean + } /** @description The name of the column. */ - name?: string; + name?: string /** @description Defines whether the column is automatically generated. */ - autocolumn?: boolean; - }; - }; - }; + autocolumn?: boolean + } + } + } tableOutput: { /** @description The table to be created/updated. */ data: { /** @description The name of the table. */ - name: string; + name: string /** @description The name of the column which should be used in relationship tags when relating to this table. */ - primaryDisplay?: string; + primaryDisplay?: string schema: { [key: string]: | { @@ -737,22 +723,22 @@ export interface components { * @description A relationship column. * @enum {string} */ - type?: "link"; + 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"; + type?: "string" | "number" | "object" | "boolean" /** @description Defines whether the column is required or not. */ - presence?: boolean; - }; + presence?: boolean + } /** @description The name of the column. */ - name?: string; + name?: string /** @description Defines whether the column is automatically generated. */ - autocolumn?: boolean; + autocolumn?: boolean /** @description The name of the column which a relationship column is related to in another table. */ - fieldName?: string; + fieldName?: string /** @description The ID of the table which a relationship column is related to. */ - tableId?: string; + tableId?: string /** * @description Defines the type of relationship that this column will be used for. * @enum {string} @@ -760,40 +746,40 @@ export interface components { relationshipType?: | "one-to-many" | "many-to-one" - | "many-to-many"; + | "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; + through?: string /** @description When using a SQL table that contains a one to many relationship this defines the foreign key. */ - foreignKey?: string; + 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; + 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; + throughTo?: string } | { /** * @description A formula column. * @enum {string} */ - type?: "formula"; + 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"; + type?: "string" | "number" | "object" | "boolean" /** @description Defines whether the column is required or not. */ - presence?: boolean; - }; + presence?: boolean + } /** @description The name of the column. */ - name?: string; + name?: string /** @description Defines whether the column is automatically generated. */ - autocolumn?: boolean; + 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; + formula?: string /** * @description Defines whether this is a static or dynamic formula. * @enum {string} */ - formulaType?: "static" | "dynamic"; + formulaType?: "static" | "dynamic" } | { /** @@ -813,150 +799,143 @@ export interface components { | "formula" | "auto" | "json" - | "internal"; + | "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"; + type?: "string" | "number" | "object" | "boolean" /** @description Defines whether the column is required or not. */ - presence?: boolean; - }; + presence?: boolean + } /** @description The name of the column. */ - name?: string; + name?: string /** @description Defines whether the column is automatically generated. */ - autocolumn?: boolean; - }; - }; + autocolumn?: boolean + } + } /** @description The ID of the table. */ - _id: string; - }; - }; + _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; - }; + executeQuery: { [key: string]: unknown } executeQueryOutput: { /** @description The data response from the query. */ - data: { [key: string]: unknown }[]; + 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 }; + headers?: { [key: string]: unknown } /** @description The raw query response, as a string. */ - raw?: string; - }; + raw?: string + } /** @description If pagination is supported, this will contain the bookmark/anchor information for it. */ - pagination?: { [key: string]: unknown }; - }; + pagination?: { [key: string]: unknown } + } query: { /** @description The ID of the query. */ - _id: string; + _id: string /** @description The ID of the data source the query belongs to. */ - datasourceId?: string; + datasourceId?: string /** @description The bindings which are required to perform this query. */ - parameters?: string[]; + parameters?: string[] /** @description The fields that are used to perform this query, e.g. the sql statement */ - fields?: { [key: string]: unknown }; + fields?: { [key: string]: unknown } /** * @description The verb that describes this query. * @enum {undefined} */ - queryVerb?: "create" | "read" | "update" | "delete"; + queryVerb?: "create" | "read" | "update" | "delete" /** @description The name of the query. */ - name: string; + name: string /** @description The schema of the data returned when the query is executed. */ - schema: { [key: string]: unknown }; + schema: { [key: string]: unknown } /** @description The JavaScript transformer function, applied after the query responds with data. */ - transformer?: string; + transformer?: string /** @description Whether the query has readable data. */ - readable?: boolean; - }; + readable?: boolean + } user: { /** @description The email address of the user, this must be unique. */ - email: string; + 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; + password?: string /** * @description The status of the user, if they are active. * @enum {string} */ - status?: "active"; + status?: "active" /** @description The first name of the user */ - firstName?: string; + firstName?: string /** @description The last name of the user */ - lastName?: string; + lastName?: string /** @description If set to true forces the user to reset their password on first login. */ - forceResetPassword?: boolean; + 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; - }; + 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; - }; + global?: boolean + } /** @description Contains the roles of the user per app (assuming they are not a builder user). */ - roles: { [key: string]: string }; - }; + roles: { [key: string]: string } + } userOutput: { data: { /** @description The email address of the user, this must be unique. */ - email: string; + 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; + password?: string /** * @description The status of the user, if they are active. * @enum {string} */ - status?: "active"; + status?: "active" /** @description The first name of the user */ - firstName?: string; + firstName?: string /** @description The last name of the user */ - lastName?: string; + lastName?: string /** @description If set to true forces the user to reset their password on first login. */ - forceResetPassword?: boolean; + 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; - }; + 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; - }; + global?: boolean + } /** @description Contains the roles of the user per app (assuming they are not a builder user). */ - roles: { [key: string]: string }; + roles: { [key: string]: string } /** @description The ID of the user. */ - _id: string; - }; - }; + _id: string + } + } nameSearch: { /** @description The name to be used when searching - this will be used in a case insensitive starts with match. */ - name: string; - }; - }; + name: string + } + } parameters: { /** @description The ID of the table which this request is targeting. */ - tableId: string; + tableId: string /** @description The ID of the row which this request is targeting. */ - rowId: string; + rowId: string /** @description The ID of the app which this request is targeting. */ - appId: string; + appId: string /** @description The ID of the app which this request is targeting. */ - appIdUrl: string; + appIdUrl: string /** @description The ID of the query which this request is targeting. */ - queryId: string; + queryId: string /** @description The ID of the user which this request is targeting. */ - userId: string; - }; + userId: string + } } export interface operations {}