diff --git a/packages/server/specs/generate.js b/packages/server/specs/generate.js index eaace0fee3..fead64bb66 100644 --- a/packages/server/specs/generate.js +++ b/packages/server/specs/generate.js @@ -46,7 +46,7 @@ const options = { ], }, format: ".json", - apis: [join(__dirname, "..", "src", "api", "routes", "public", "*.js")], + apis: [join(__dirname, "..", "src", "api", "routes", "public", "*.ts")], } function writeFile(output, { isJson } = {}) { diff --git a/packages/server/specs/openapi.json b/packages/server/specs/openapi.json index 78b86a3c6b..c78f7096a4 100644 --- a/packages/server/specs/openapi.json +++ b/packages/server/specs/openapi.json @@ -445,13 +445,16 @@ "type": "object", "properties": { "name": { - "type": "string", - "required": true + "type": "string" }, "url": { "type": "string" } - } + }, + "required": [ + "name", + "url" + ] }, "applicationOutput": { "type": "object", @@ -460,13 +463,16 @@ "type": "object", "properties": { "name": { - "type": "string", - "required": true + "type": "string" }, "url": { "type": "string" } - } + }, + "required": [ + "name", + "url" + ] } } }, @@ -943,6 +949,1027 @@ "ApiKeyAuth": [] } ], - "paths": {}, + "paths": { + "/applications/search": { + "post": { + "summary": "Search for an application based on its app name.", + "tags": [ + "applications" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/nameSearch" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the applications that were found based on the search parameters.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/application" + } + } + } + }, + "examples": { + "applications": { + "$ref": "#/components/examples/applications" + } + } + } + } + } + } + } + }, + "/applications": { + "post": { + "summary": "Create a new application.", + "tags": [ + "applications" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the created application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/applicationOutput" + }, + "examples": { + "application": { + "$ref": "#/components/examples/application" + } + } + } + } + } + } + } + }, + "/applications/{appId}": { + "put": { + "summary": "Update an existing application by its ID.", + "tags": [ + "applications" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appIdUrl" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/application" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the updated application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/applicationOutput" + }, + "examples": { + "application": { + "$ref": "#/components/examples/application" + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete an existing application by its ID.", + "tags": [ + "applications" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appIdUrl" + } + ], + "responses": { + "200": { + "description": "Returns the deleted application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/applicationOutput" + }, + "examples": { + "application": { + "$ref": "#/components/examples/application" + } + } + } + } + } + } + }, + "get": { + "summary": "Retrieve a single application by its ID.", + "tags": [ + "applications" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appIdUrl" + } + ], + "responses": { + "200": { + "description": "Returns the retrieved application.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/applicationOutput" + }, + "examples": { + "application": { + "$ref": "#/components/examples/application" + } + } + } + } + } + } + } + }, + "/queries/search": { + "post": { + "summary": "Search for a query based on its name.", + "tags": [ + "queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/nameSearch" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the queries found based on the search parameters.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "queries": { + "type": "array", + "items": { + "$ref": "#/components/schemas/query" + } + } + } + }, + "examples": { + "queries": { + "$ref": "#/components/examples/queries" + } + } + } + } + } + } + } + }, + "/queries/{queryId}": { + "post": { + "summary": "Execute a query and retrieve its response.", + "tags": [ + "queries" + ], + "parameters": [ + { + "$ref": "#/components/parameters/queryId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the result of the query execution.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "description": "The data retrieved from the query.", + "items": { + "type": "object", + "description": "The structure of the returned data will be an object, if it is just a string then this will be an object containing \"value\"." + } + }, + "pagination": { + "type": "object", + "description": "For supported query types this returns pagination information.", + "properties": { + "cursor": { + "type": "string", + "description": "The pagination cursor location." + } + } + }, + "raw": { + "type": "string", + "description": "The raw query response." + }, + "headers": { + "type": "object", + "description": "For REST queries the headers in the response will be returned here." + } + } + }, + "examples": { + "REST": { + "$ref": "#/components/examples/restResponse" + }, + "SQL": { + "$ref": "#/components/examples/sqlResponse" + } + } + } + } + } + } + } + }, + "/tables/{tableId}/rows/search": { + "post": { + "summary": "Used to search for rows within a table.", + "tags": [ + "rows" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "query": { + "type": "object", + "properties": { + "string": { + "type": "object", + "example": { + "columnName1": "value", + "columnName2": "value" + }, + "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.", + "additionalProperties": { + "type": "string", + "description": "The value to search for in the column." + } + }, + "fuzzy": { + "type": "object", + "description": "A fuzzy search, only supported by internal tables." + }, + "range": { + "type": "object", + "description": "Searches within a range, the format of this must be columnName -> [low, high].", + "example": { + "columnName1": [ + 10, + 20 + ] + } + }, + "equal": { + "type": "object", + "description": "Searches for rows that have a column value that is exactly the value set." + }, + "notEqual": { + "type": "object", + "description": "Searches for any row which does not contain the specified column value." + }, + "empty": { + "type": "object", + "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": { + "columnName1": "" + } + }, + "notEmpty": { + "type": "object", + "description": "Searches for rows which have the specified column." + }, + "oneOf": { + "type": "object", + "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]." + } + } + }, + "paginate": { + "type": "boolean", + "description": "Enables pagination, by default this is disabled." + }, + "bookmark": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "If retrieving another page, the bookmark from the previous request must be supplied." + }, + "limit": { + "type": "integer", + "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." + }, + "sort": { + "type": "object", + "description": "A set of parameters describing the sort behaviour of the search.", + "properties": { + "order": { + "type": "string", + "enum": [ + "ascending", + "descending" + ], + "description": "The order of the sort, by default this is ascending." + }, + "column": { + "type": "string", + "description": "The name of the column by which the rows will be sorted." + }, + "type": { + "type": "string", + "enum": [ + "string", + "number" + ], + "description": "Defines whether the column should be treated as a string or as numbers when sorting." + } + } + } + } + } + } + } + }, + "responses": { + "200": { + "description": "The response will contain an array of rows that match the search parameters.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "rows": { + "description": "An array of rows, these will each contain an _id field which can be used to update or delete them.", + "type": "array", + "items": { + "type": "object" + } + }, + "bookmark": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "description": "If pagination in use, this should be provided." + }, + "hasNextPage": { + "description": "If pagination in use, this will determine if there is another page to fetch.", + "type": "boolean" + } + } + }, + "examples": { + "search": { + "$ref": "#/components/examples/rows" + } + } + } + } + } + } + } + }, + "/tables/{tableId}/rows": { + "post": { + "summary": "Creates a new row within a specified table.", + "tags": [ + "rows" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/row" + }, + "examples": { + "row": { + "$ref": "#/components/examples/inputRow" + } + } + } + } + }, + "responses": { + "200": { + "description": "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.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rowOutput" + }, + "examples": { + "row": { + "$ref": "#/components/examples/row" + } + } + } + } + } + } + } + }, + "/tables/{tableId}/rows/{rowId}": { + "put": { + "summary": "Update a single row within a specified table.", + "tags": [ + "rows" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/rowId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/row" + }, + "examples": { + "row": { + "$ref": "#/components/examples/inputRow" + } + } + } + } + }, + "responses": { + "200": { + "description": "Returns the created row, including the ID which has been generated for it.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rowOutput" + }, + "examples": { + "row": { + "$ref": "#/components/examples/row" + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete a single row from the specified table.", + "tags": [ + "rows" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/rowId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the deleted row, including the ID which has been generated for it.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rowOutput" + }, + "examples": { + "row": { + "$ref": "#/components/examples/row" + } + } + } + } + } + } + }, + "get": { + "summary": "Get a single row from the specified table.", + "tags": [ + "rows" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/rowId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the retrieved row.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/rowOutput" + }, + "examples": { + "row": { + "$ref": "#/components/examples/row" + } + } + } + } + } + } + } + }, + "/tables/search": { + "post": { + "summary": "Search internal and external tables based on their name.", + "tags": [ + "tables" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/nameSearch" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the found tables, based on the search parameters.", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "applications": { + "type": "array", + "items": { + "$ref": "#/components/schemas/table" + } + } + } + }, + "examples": { + "tables": { + "$ref": "#/components/examples/tables" + } + } + } + } + } + } + } + }, + "/tables": { + "post": { + "summary": "Create a new table.", + "tags": [ + "tables" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/table" + }, + "examples": { + "table": { + "$ref": "#/components/examples/table" + } + } + } + } + }, + "responses": { + "200": { + "description": "Returns the created table, including the ID which has been generated for it. This can be internal or external data sources.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tableOutput" + }, + "examples": { + "table": { + "$ref": "#/components/examples/table" + } + } + } + } + } + } + } + }, + "/tables/{tableId}": { + "put": { + "summary": "Update the specified table.", + "tags": [ + "tables" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/table" + }, + "examples": { + "table": { + "$ref": "#/components/examples/table" + } + } + } + } + }, + "responses": { + "200": { + "description": "Returns the updated table.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tableOutput" + }, + "examples": { + "table": { + "$ref": "#/components/examples/table" + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete a single table and all of its data.", + "tags": [ + "tables" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the deleted table.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tableOutput" + }, + "examples": { + "table": { + "$ref": "#/components/examples/table" + } + } + } + } + } + } + }, + "get": { + "summary": "Gets a single table by its ID.", + "tags": [ + "tables" + ], + "parameters": [ + { + "$ref": "#/components/parameters/tableId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the retrieved table.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/tableOutput" + }, + "examples": { + "table": { + "$ref": "#/components/examples/table" + } + } + } + } + } + } + } + }, + "/users/search": { + "post": { + "summary": "Search for a user based on their email/username.", + "tags": [ + "users" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/nameSearch" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the found users based on search parameters.", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/user" + } + }, + "examples": { + "users": { + "$ref": "#/components/examples/users" + } + } + } + } + } + } + } + }, + "/users": { + "post": { + "summary": "Create a new user in the Budibase portal.", + "tags": [ + "users" + ], + "parameters": [ + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/user" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the created user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userOutput" + }, + "examples": { + "user": { + "$ref": "#/components/examples/user" + } + } + } + } + } + } + } + }, + "/users/{userId}": { + "put": { + "summary": "Update an existing user by their ID.", + "tags": [ + "users" + ], + "parameters": [ + { + "$ref": "#/components/parameters/userId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/user" + } + } + } + }, + "responses": { + "200": { + "description": "Returns the updated user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userOutput" + }, + "examples": { + "user": { + "$ref": "#/components/examples/user" + } + } + } + } + } + } + }, + "delete": { + "summary": "Delete an existing user by their ID.", + "tags": [ + "users" + ], + "parameters": [ + { + "$ref": "#/components/parameters/userId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the deleted user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userOutput" + }, + "examples": { + "user": { + "$ref": "#/components/examples/user" + } + } + } + } + } + } + }, + "get": { + "summary": "Retrieve a single user by their ID.", + "tags": [ + "users" + ], + "parameters": [ + { + "$ref": "#/components/parameters/userId" + }, + { + "$ref": "#/components/parameters/appId" + } + ], + "responses": { + "200": { + "description": "Returns the retrieved user.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/userOutput" + }, + "examples": { + "user": { + "$ref": "#/components/examples/user" + } + } + } + } + } + } + } + } + }, "tags": [] } \ No newline at end of file diff --git a/packages/server/specs/openapi.yaml b/packages/server/specs/openapi.yaml index 63b4b25bfb..2b74bbd16a 100644 --- a/packages/server/specs/openapi.yaml +++ b/packages/server/specs/openapi.yaml @@ -321,9 +321,11 @@ components: properties: name: type: string - required: true url: type: string + required: + - name + - url applicationOutput: type: object properties: @@ -332,9 +334,11 @@ components: properties: name: type: string - required: true url: type: string + required: + - name + - url row: description: The row to be created/updated, based on the table schema. type: object @@ -686,5 +690,619 @@ components: insensitive starts with match. security: - ApiKeyAuth: [] -paths: {} +paths: + /applications/search: + post: + summary: Search for an application based on its app name. + tags: + - applications + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/nameSearch" + responses: + "200": + description: Returns the applications that were found based on the search + parameters. + content: + application/json: + schema: + type: object + properties: + applications: + type: array + items: + $ref: "#/components/schemas/application" + examples: + applications: + $ref: "#/components/examples/applications" + /applications: + post: + summary: Create a new application. + tags: + - applications + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/application" + responses: + "200": + description: Returns the created application. + content: + application/json: + schema: + $ref: "#/components/schemas/applicationOutput" + examples: + application: + $ref: "#/components/examples/application" + "/applications/{appId}": + put: + summary: Update an existing application by its ID. + tags: + - applications + parameters: + - $ref: "#/components/parameters/appIdUrl" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/application" + responses: + "200": + description: Returns the updated application. + content: + application/json: + schema: + $ref: "#/components/schemas/applicationOutput" + examples: + application: + $ref: "#/components/examples/application" + delete: + summary: Delete an existing application by its ID. + tags: + - applications + parameters: + - $ref: "#/components/parameters/appIdUrl" + responses: + "200": + description: Returns the deleted application. + content: + application/json: + schema: + $ref: "#/components/schemas/applicationOutput" + examples: + application: + $ref: "#/components/examples/application" + get: + summary: Retrieve a single application by its ID. + tags: + - applications + parameters: + - $ref: "#/components/parameters/appIdUrl" + responses: + "200": + description: Returns the retrieved application. + content: + application/json: + schema: + $ref: "#/components/schemas/applicationOutput" + examples: + application: + $ref: "#/components/examples/application" + /queries/search: + post: + summary: Search for a query based on its name. + tags: + - queries + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/nameSearch" + responses: + "200": + description: Returns the queries found based on the search parameters. + content: + application/json: + schema: + type: object + properties: + queries: + type: array + items: + $ref: "#/components/schemas/query" + examples: + queries: + $ref: "#/components/examples/queries" + "/queries/{queryId}": + post: + summary: Execute a query and retrieve its response. + tags: + - queries + parameters: + - $ref: "#/components/parameters/queryId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the result of the query execution. + content: + application/json: + schema: + type: object + properties: + data: + type: array + description: The data retrieved from the query. + items: + type: object + description: The structure of the returned data will be an object, if it is just + a string then this will be an object containing "value". + pagination: + type: object + description: For supported query types this returns pagination information. + properties: + cursor: + type: string + description: The pagination cursor location. + raw: + type: string + description: The raw query response. + headers: + type: object + description: For REST queries the headers in the response will be returned here. + examples: + REST: + $ref: "#/components/examples/restResponse" + SQL: + $ref: "#/components/examples/sqlResponse" + "/tables/{tableId}/rows/search": + post: + summary: Used to search for rows within a table. + tags: + - rows + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + query: + type: object + properties: + string: + type: object + example: + columnName1: value + columnName2: value + 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. + additionalProperties: + type: string + description: The value to search for in the column. + fuzzy: + type: object + description: A fuzzy search, only supported by internal tables. + range: + type: object + description: Searches within a range, the format of this must be columnName -> + [low, high]. + example: + columnName1: + - 10 + - 20 + equal: + type: object + description: Searches for rows that have a column value that is exactly the + value set. + notEqual: + type: object + description: Searches for any row which does not contain the specified column + value. + empty: + type: object + 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: + columnName1: "" + notEmpty: + type: object + description: Searches for rows which have the specified column. + oneOf: + type: object + 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]. + paginate: + type: boolean + description: Enables pagination, by default this is disabled. + bookmark: + oneOf: + - type: string + - type: integer + description: If retrieving another page, the bookmark from the previous request + must be supplied. + limit: + type: integer + 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. + sort: + type: object + description: A set of parameters describing the sort behaviour of the search. + properties: + order: + type: string + enum: + - ascending + - descending + description: The order of the sort, by default this is ascending. + column: + type: string + description: The name of the column by which the rows will be sorted. + type: + type: string + enum: + - string + - number + description: Defines whether the column should be treated as a string or as + numbers when sorting. + responses: + "200": + description: The response will contain an array of rows that match the search + parameters. + content: + application/json: + schema: + type: object + properties: + rows: + description: An array of rows, these will each contain an _id field which can be + used to update or delete them. + type: array + items: + type: object + bookmark: + oneOf: + - type: string + - type: integer + description: If pagination in use, this should be provided. + hasNextPage: + description: If pagination in use, this will determine if there is another page + to fetch. + type: boolean + examples: + search: + $ref: "#/components/examples/rows" + "/tables/{tableId}/rows": + post: + summary: Creates a new row within a specified table. + tags: + - rows + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/row" + examples: + row: + $ref: "#/components/examples/inputRow" + responses: + "200": + description: 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. + content: + application/json: + schema: + $ref: "#/components/schemas/rowOutput" + examples: + row: + $ref: "#/components/examples/row" + "/tables/{tableId}/rows/{rowId}": + put: + summary: Update a single row within a specified table. + tags: + - rows + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/rowId" + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/row" + examples: + row: + $ref: "#/components/examples/inputRow" + responses: + "200": + description: Returns the created row, including the ID which has been generated + for it. + content: + application/json: + schema: + $ref: "#/components/schemas/rowOutput" + examples: + row: + $ref: "#/components/examples/row" + delete: + summary: Delete a single row from the specified table. + tags: + - rows + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/rowId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the deleted row, including the ID which has been generated + for it. + content: + application/json: + schema: + $ref: "#/components/schemas/rowOutput" + examples: + row: + $ref: "#/components/examples/row" + get: + summary: Get a single row from the specified table. + tags: + - rows + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/rowId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the retrieved row. + content: + application/json: + schema: + $ref: "#/components/schemas/rowOutput" + examples: + row: + $ref: "#/components/examples/row" + /tables/search: + post: + summary: Search internal and external tables based on their name. + tags: + - tables + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/nameSearch" + responses: + "200": + description: Returns the found tables, based on the search parameters. + content: + application/json: + schema: + type: object + properties: + applications: + type: array + items: + $ref: "#/components/schemas/table" + examples: + tables: + $ref: "#/components/examples/tables" + /tables: + post: + summary: Create a new table. + tags: + - tables + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/table" + examples: + table: + $ref: "#/components/examples/table" + responses: + "200": + description: Returns the created table, including the ID which has been + generated for it. This can be internal or external data sources. + content: + application/json: + schema: + $ref: "#/components/schemas/tableOutput" + examples: + table: + $ref: "#/components/examples/table" + "/tables/{tableId}": + put: + summary: Update the specified table. + tags: + - tables + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/appId" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/table" + examples: + table: + $ref: "#/components/examples/table" + responses: + "200": + description: Returns the updated table. + content: + application/json: + schema: + $ref: "#/components/schemas/tableOutput" + examples: + table: + $ref: "#/components/examples/table" + delete: + summary: Delete a single table and all of its data. + tags: + - tables + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the deleted table. + content: + application/json: + schema: + $ref: "#/components/schemas/tableOutput" + examples: + table: + $ref: "#/components/examples/table" + get: + summary: Gets a single table by its ID. + tags: + - tables + parameters: + - $ref: "#/components/parameters/tableId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the retrieved table. + content: + application/json: + schema: + $ref: "#/components/schemas/tableOutput" + examples: + table: + $ref: "#/components/examples/table" + /users/search: + post: + summary: Search for a user based on their email/username. + tags: + - users + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/nameSearch" + responses: + "200": + description: Returns the found users based on search parameters. + content: + application/json: + schema: + type: array + items: + $ref: "#/components/schemas/user" + examples: + users: + $ref: "#/components/examples/users" + /users: + post: + summary: Create a new user in the Budibase portal. + tags: + - users + parameters: + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/user" + responses: + "200": + description: Returns the created user. + content: + application/json: + schema: + $ref: "#/components/schemas/userOutput" + examples: + user: + $ref: "#/components/examples/user" + "/users/{userId}": + put: + summary: Update an existing user by their ID. + tags: + - users + parameters: + - $ref: "#/components/parameters/userId" + - $ref: "#/components/parameters/appId" + requestBody: + required: true + content: + application/json: + schema: + $ref: "#/components/schemas/user" + responses: + "200": + description: Returns the updated user. + content: + application/json: + schema: + $ref: "#/components/schemas/userOutput" + examples: + user: + $ref: "#/components/examples/user" + delete: + summary: Delete an existing user by their ID. + tags: + - users + parameters: + - $ref: "#/components/parameters/userId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the deleted user. + content: + application/json: + schema: + $ref: "#/components/schemas/userOutput" + examples: + user: + $ref: "#/components/examples/user" + get: + summary: Retrieve a single user by their ID. + tags: + - users + parameters: + - $ref: "#/components/parameters/userId" + - $ref: "#/components/parameters/appId" + responses: + "200": + description: Returns the retrieved user. + content: + application/json: + schema: + $ref: "#/components/schemas/userOutput" + examples: + user: + $ref: "#/components/examples/user" tags: [] diff --git a/packages/server/specs/resources/application.js b/packages/server/specs/resources/application.js index d753a6a45b..cc999cd10d 100644 --- a/packages/server/specs/resources/application.js +++ b/packages/server/specs/resources/application.js @@ -15,15 +15,17 @@ const application = { lockedBy: userResource.getExamples().user.value.user, } -const applicationSchema = object({ - name: { - type: "string", - required: true, +const applicationSchema = object( + { + name: { + type: "string", + }, + url: { + type: "string", + }, }, - url: { - type: "string", - }, -}) + { required: ["name", "url"] } +) module.exports = new Resource() .setExamples({ diff --git a/packages/server/specs/resources/utils/index.js b/packages/server/specs/resources/utils/index.js index d42a582f63..91f1f056b3 100644 --- a/packages/server/specs/resources/utils/index.js +++ b/packages/server/specs/resources/utils/index.js @@ -1,6 +1,7 @@ -exports.object = props => { +exports.object = (props, opts) => { return { type: "object", properties: props, + ...opts, } }