-
-
+
- )
+
+
+
+
+
+
+
updateBaseUrl(event.target.value)}
+ onBlur={() => submitToken(token)}
+ />
+
+ {!location.pathname.includes('rest-api') && (
+
+
+ history.replace(
+ '/' +
+ location.pathname.split('/').at(-2) +
+ '/' +
+ event.target.value,
+ )
+ }
+ value={location.pathname.split('/').at(-1)}
+ >
+ Core
+ Metadata
+
+
+ )}
+
+
);
};
diff --git a/packages/twenty-docs/src/css/custom.css b/packages/twenty-docs/src/css/custom.css
index cb1dde333..c478da86b 100644
--- a/packages/twenty-docs/src/css/custom.css
+++ b/packages/twenty-docs/src/css/custom.css
@@ -250,7 +250,7 @@ li.coming-soon a::after {
}
.fullHeightPlayground {
- height: calc(100vh - var(--ifm-navbar-height));
+ height: calc(100vh - var(--ifm-navbar-height) - 45px);
}
.display-none {
diff --git a/packages/twenty-docs/src/pages/graphql/core.tsx b/packages/twenty-docs/src/pages/graphql/core.tsx
new file mode 100644
index 000000000..365ba3674
--- /dev/null
+++ b/packages/twenty-docs/src/pages/graphql/core.tsx
@@ -0,0 +1,9 @@
+import React from 'react';
+
+import GraphQlPlayground from '../../components/graphql-playground';
+
+const CoreGraphql = () => {
+ return
;
+};
+
+export default CoreGraphql;
diff --git a/packages/twenty-docs/src/pages/graphql/metadata.tsx b/packages/twenty-docs/src/pages/graphql/metadata.tsx
new file mode 100644
index 000000000..a5d760d6d
--- /dev/null
+++ b/packages/twenty-docs/src/pages/graphql/metadata.tsx
@@ -0,0 +1,9 @@
+import React from 'react';
+
+import GraphQlPlayground from '../../components/graphql-playground';
+
+const CoreGraphql = () => {
+ return
;
+};
+
+export default CoreGraphql;
diff --git a/packages/twenty-docs/src/pages/rest-api.tsx b/packages/twenty-docs/src/pages/rest-api/core.tsx
similarity index 58%
rename from packages/twenty-docs/src/pages/rest-api.tsx
rename to packages/twenty-docs/src/pages/rest-api/core.tsx
index de1c989d3..abc4be281 100644
--- a/packages/twenty-docs/src/pages/rest-api.tsx
+++ b/packages/twenty-docs/src/pages/rest-api/core.tsx
@@ -1,13 +1,13 @@
-import Layout from '@theme/Layout';
-import BrowserOnly from '@docusaurus/BrowserOnly';
import React, { useEffect, useState } from 'react';
+import BrowserOnly from '@docusaurus/BrowserOnly';
import { API } from '@stoplight/elements';
-import Playground from '../components/playground';
+import Layout from '@theme/Layout';
+
+import Playground from '../../components/playground';
+
import spotlightTheme from '!css-loader!@stoplight/elements/styles.min.css';
-
-const RestApiComponent = ({openApiJson}) => {
-
+const RestApiComponent = ({ openApiJson }) => {
// We load spotlightTheme style using useEffect as it breaks remaining docs style
useEffect(() => {
const styleElement = document.createElement('style');
@@ -18,31 +18,38 @@ const RestApiComponent = ({openApiJson}) => {
}, []);
return (
-
- )
-}
+
+ );
+};
const restApi = () => {
- const [openApiJson, setOpenApiJson] = useState({})
+ const [openApiJson, setOpenApiJson] = useState({});
- const children =
+ const children =
;
return (
- {
- () =>
- }
+
+ {() => (
+
+ )}
+
- )
+ );
};
export default restApi;
diff --git a/packages/twenty-docs/src/theme/icons.js b/packages/twenty-docs/src/theme/icons.js
index 4059b432d..85e365241 100644
--- a/packages/twenty-docs/src/theme/icons.js
+++ b/packages/twenty-docs/src/theme/icons.js
@@ -21,6 +21,7 @@ export {
TbCheck,
TbCheckbox,
TbChecklist,
+ TbChevronLeft,
TbCircleCheckFilled,
TbCircleDot,
TbCloud,
diff --git a/packages/twenty-server/src/core/open-api/open-api.controller.ts b/packages/twenty-server/src/core/open-api/open-api.controller.ts
index 60b485f4a..2dcaf8a4b 100644
--- a/packages/twenty-server/src/core/open-api/open-api.controller.ts
+++ b/packages/twenty-server/src/core/open-api/open-api.controller.ts
@@ -8,9 +8,22 @@ import { OpenApiService } from 'src/core/open-api/open-api.service';
export class OpenApiController {
constructor(private readonly openApiService: OpenApiService) {}
- @Get()
- async generateOpenApiSchema(@Req() request: Request, @Res() res: Response) {
- const data = await this.openApiService.generateSchema(request);
+ @Get('core')
+ async generateOpenApiSchemaCore(
+ @Req() request: Request,
+ @Res() res: Response,
+ ) {
+ const data = await this.openApiService.generateCoreSchema(request);
+
+ res.send(data);
+ }
+
+ @Get('metadata')
+ async generateOpenApiSchemaMetaData(
+ @Req() request: Request,
+ @Res() res: Response,
+ ) {
+ const data = await this.openApiService.generateMetaDataSchema();
res.send(data);
}
diff --git a/packages/twenty-server/src/core/open-api/open-api.service.ts b/packages/twenty-server/src/core/open-api/open-api.service.ts
index c9426c0ee..6f6051e58 100644
--- a/packages/twenty-server/src/core/open-api/open-api.service.ts
+++ b/packages/twenty-server/src/core/open-api/open-api.service.ts
@@ -24,7 +24,7 @@ export class OpenApiService {
private readonly objectMetadataService: ObjectMetadataService,
) {}
- async generateSchema(request: Request): Promise
{
+ async generateCoreSchema(request: Request): Promise {
const schema = baseSchema();
let objectMetadataItems;
@@ -42,8 +42,8 @@ export class OpenApiService {
return schema;
}
schema.paths = objectMetadataItems.reduce((paths, item) => {
- paths[`/rest/${item.namePlural}`] = computeManyResultPath(item);
- paths[`/rest/${item.namePlural}/{id}`] = computeSingleResultPath(item);
+ paths[`/${item.namePlural}`] = computeManyResultPath(item);
+ paths[`/${item.namePlural}/{id}`] = computeSingleResultPath(item);
return paths;
}, schema.paths as OpenAPIV3.PathsObject);
@@ -62,4 +62,13 @@ export class OpenApiService {
return schema;
}
+
+ async generateMetaDataSchema(): Promise {
+ //TODO Add once Rest MetaData api is ready
+ const schema = baseSchema();
+
+ schema.tags = [{ name: 'placeholder' }];
+
+ return schema;
+ }
}
diff --git a/packages/twenty-server/src/core/open-api/utils/base-schema.utils.ts b/packages/twenty-server/src/core/open-api/utils/base-schema.utils.ts
index 2b07d60ca..e916d4513 100644
--- a/packages/twenty-server/src/core/open-api/utils/base-schema.utils.ts
+++ b/packages/twenty-server/src/core/open-api/utils/base-schema.utils.ts
@@ -21,7 +21,7 @@ export const baseSchema = (): OpenAPIV3.Document => {
// Testing purposes
servers: [
{
- url: 'https://api.twenty.com/',
+ url: 'https://api.twenty.com/rest',
description: 'Production Development',
},
],