forked from tsai/budibase
11 changed files with 1109 additions and 31 deletions
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
"apiKey": "", |
||||
|
"appName": "", |
||||
|
"host": "http://localhost:10000" |
||||
|
} |
||||
@ -0,0 +1,17 @@ |
|||||
|
version: "3.8" |
||||
|
services: |
||||
|
db: |
||||
|
container_name: postgres |
||||
|
image: postgres |
||||
|
restart: always |
||||
|
environment: |
||||
|
POSTGRES_USER: root |
||||
|
POSTGRES_PASSWORD: root |
||||
|
POSTGRES_DB: postgres |
||||
|
ports: |
||||
|
- "5432:5432" |
||||
|
volumes: |
||||
|
- pg_data:/var/lib/postgresql/data/ |
||||
|
- ./init.sql:/docker-entrypoint-initdb.d/init.sql |
||||
|
volumes: |
||||
|
pg_data: |
||||
@ -0,0 +1,23 @@ |
|||||
|
CREATE TABLE IF NOT EXISTS sales_people ( |
||||
|
person_id INT NOT NULL, |
||||
|
name varchar(200) NOT NULL, |
||||
|
PRIMARY KEY (person_id) |
||||
|
); |
||||
|
|
||||
|
CREATE TABLE IF NOT EXISTS sales ( |
||||
|
sale_id INT NOT NULL, |
||||
|
sale_name varchar(200) NOT NULL, |
||||
|
sold_by INT, |
||||
|
PRIMARY KEY (sale_id), |
||||
|
CONSTRAINT sold_by_fk |
||||
|
FOREIGN KEY(sold_by) |
||||
|
REFERENCES sales_people(person_id) |
||||
|
); |
||||
|
|
||||
|
INSERT INTO sales_people |
||||
|
select id, concat('Sales person ', id) |
||||
|
FROM GENERATE_SERIES(1, 50) as id; |
||||
|
|
||||
|
INSERT INTO sales |
||||
|
select id, concat('Sale ', id), floor(random() * 50 + 1)::int |
||||
|
FROM GENERATE_SERIES(1, 200) as id; |
||||
@ -0,0 +1,7 @@ |
|||||
|
import { components } from "./openapi" |
||||
|
|
||||
|
export type App = components["schemas"]["applicationOutput"]["data"] |
||||
|
export type AppSearch = { |
||||
|
data: App[] |
||||
|
} |
||||
|
export type RowSearch = components["schemas"]["searchOutput"] |
||||
@ -0,0 +1,943 @@ |
|||||
|
/** |
||||
|
* 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]: 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 }[] |
||||
|
/** @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]: unknown } |
||||
|
} |
||||
|
/** @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]: unknown } |
||||
|
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 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 {} |
||||
@ -1,13 +0,0 @@ |
|||||
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
|
|
||||
import type { NextApiRequest, NextApiResponse } from 'next' |
|
||||
|
|
||||
type Data = { |
|
||||
name: string |
|
||||
} |
|
||||
|
|
||||
export default function handler( |
|
||||
req: NextApiRequest, |
|
||||
res: NextApiResponse<Data> |
|
||||
) { |
|
||||
res.status(200).json({ name: 'John Doe' }) |
|
||||
} |
|
||||
@ -0,0 +1,66 @@ |
|||||
|
import getConfig from "next/config" |
||||
|
import fetch from "node-fetch" |
||||
|
import { App, AppSearch, RowSearch } from "../../definitions" |
||||
|
|
||||
|
const { serverRuntimeConfig } = getConfig() |
||||
|
const apiKey = serverRuntimeConfig["apiKey"] |
||||
|
const appName = serverRuntimeConfig["appName"] |
||||
|
const host = serverRuntimeConfig["host"] |
||||
|
|
||||
|
async function makeCall(method: string, url: string, opts?: { body?: any, appId?: string } = {}): Promise<any> { |
||||
|
const fetchOpts: any = { |
||||
|
method, |
||||
|
headers: { |
||||
|
"x-budibase-api-key": apiKey, |
||||
|
} |
||||
|
} |
||||
|
if (opts?.appId) { |
||||
|
fetchOpts.headers["x-budibase-app-id"] = opts.appId |
||||
|
} |
||||
|
if (opts?.body) { |
||||
|
fetchOpts.body = JSON.stringify(opts?.body) |
||||
|
fetchOpts.headers["Content-Type"] = "application/json" |
||||
|
} |
||||
|
const response = await fetch(`${host}/public/v1/${url}`, fetchOpts) |
||||
|
if (response.status === 200) { |
||||
|
return response.json() |
||||
|
} else { |
||||
|
throw new Error(await response.text()) |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
async function getApp(): Promise<App> { |
||||
|
const apps: AppSearch = await makeCall("post", "applications/search", { |
||||
|
body: { |
||||
|
name: appName, |
||||
|
} |
||||
|
}) |
||||
|
if (!Array.isArray(apps?.data)) { |
||||
|
throw new Error("Fatal error, no apps found.") |
||||
|
} |
||||
|
const app = apps.data.find((app: App) => app.name === appName) |
||||
|
if (!app) { |
||||
|
throw new Error("Could not find app, please make sure app name in config is correct.") |
||||
|
} |
||||
|
return app |
||||
|
} |
||||
|
|
||||
|
async function getSales(req: any) { |
||||
|
const { _id: appId } = await getApp() |
||||
|
} |
||||
|
|
||||
|
async function saveSale(req: any) { |
||||
|
const { _id: appId } = await getApp() |
||||
|
} |
||||
|
|
||||
|
export default async function handler(req: any, res: any) { |
||||
|
let response: any = {} |
||||
|
if (req.method === "POST") { |
||||
|
response = await saveSale(req) |
||||
|
} else if (req.method === "GET") { |
||||
|
response = await getSales(req) |
||||
|
} else { |
||||
|
res.status(404) |
||||
|
} |
||||
|
res.status(200).json(response) |
||||
|
} |
||||
Loading…
Reference in new issue