700 fix rest api issues (#11326)

fixes issues listed here
https://github.com/twentyhq/core-team-issues/issues/700
This commit is contained in:
martmull
2025-04-01 17:22:24 +02:00
committed by GitHub
parent 51ea241a1c
commit 8e6b175f34
7 changed files with 42 additions and 24 deletions

View File

@ -7,7 +7,7 @@ const formatMessage = (error: BaseGraphQLError) => {
? error.extensions.response?.error ||
error.extensions.response ||
error.message
: error.error;
: error.error || error.message;
formattedMessage = formattedMessage
.replace(/"/g, "'")

View File

@ -6,10 +6,14 @@ import { capitalize } from 'twenty-shared/utils';
export class DeleteMetadataQueryFactory {
create(objectNameSingular: string): string {
const objectNameCapitalized = capitalize(objectNameSingular);
const formattedObjectName =
objectNameCapitalized === 'RelationMetadata'
? 'Relation'
: objectNameCapitalized;
return `
mutation Delete${objectNameCapitalized}($input: DeleteOne${objectNameCapitalized}Input!) {
deleteOne${objectNameCapitalized}(input: $input) {
mutation Delete${objectNameCapitalized}($input: DeleteOne${formattedObjectName}Input!) {
deleteOne${formattedObjectName}(input: $input) {
id
}
}

View File

@ -77,7 +77,7 @@ export const fetchMetadataFields = (objectNamePlural: string) => {
`;
case 'fields':
return fields;
case 'relations':
case 'relationMetadata':
return `
id
relationType

View File

@ -26,19 +26,19 @@ export const parseMetadataPath = (
case 'fields':
return {
objectNameSingular: 'field',
objectNamePlural: objectName,
objectNamePlural: 'fields',
id: queryAction[1],
};
case 'objects':
return {
objectNameSingular: 'object',
objectNamePlural: objectName,
objectNamePlural: 'objects',
id: queryAction[1],
};
case 'relations':
return {
objectNameSingular: 'relation',
objectNamePlural: objectName,
objectNameSingular: 'relationMetadata',
objectNamePlural: 'relationMetadata',
id: queryAction[1],
};
default:
@ -47,11 +47,14 @@ export const parseMetadataPath = (
} else {
switch (objectName) {
case 'fields':
return { objectNameSingular: 'field', objectNamePlural: objectName };
return { objectNameSingular: 'field', objectNamePlural: 'fields' };
case 'objects':
return { objectNameSingular: 'object', objectNamePlural: objectName };
return { objectNameSingular: 'object', objectNamePlural: 'objects' };
case 'relations':
return { objectNameSingular: 'relation', objectNamePlural: objectName };
return {
objectNameSingular: 'relationMetadata',
objectNamePlural: 'relationMetadata',
};
default:
return { objectNameSingular: '', objectNamePlural: '' };
}

View File

@ -7,14 +7,18 @@ import {
Res,
Patch,
Put,
UseGuards,
} from '@nestjs/common';
import { Request, Response } from 'express';
import { RestApiMetadataService } from 'src/engine/api/rest/metadata/rest-api-metadata.service';
import { cleanGraphQLResponse } from 'src/engine/api/rest/utils/clean-graphql-response.utils';
import { JwtAuthGuard } from 'src/engine/guards/jwt-auth.guard';
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
@Controller('rest/metadata/*')
@UseGuards(JwtAuthGuard, WorkspaceAuthGuard)
export class RestApiMetadataController {
constructor(
private readonly restApiMetadataService: RestApiMetadataService,

View File

@ -174,16 +174,6 @@ export class OpenApiService {
},
} as OpenAPIV3_1.PathItemObject;
path[`/${item.namePlural}/{id}`] = {
get: {
tags: [item.namePlural],
summary: `Find One ${item.nameSingular}`,
parameters: [{ $ref: '#/components/parameters/idPath' }],
responses: {
'200': getFindOneResponse200(item),
'400': { $ref: '#/components/responses/400' },
'401': { $ref: '#/components/responses/401' },
},
},
delete: {
tags: [item.namePlural],
summary: `Delete One ${item.nameSingular}`,
@ -196,6 +186,16 @@ export class OpenApiService {
},
},
...(item.nameSingular !== 'relation' && {
get: {
tags: [item.namePlural],
summary: `Find One ${item.nameSingular}`,
parameters: [{ $ref: '#/components/parameters/idPath' }],
responses: {
'200': getFindOneResponse200(item),
'400': { $ref: '#/components/responses/400' },
'401': { $ref: '#/components/responses/401' },
},
},
patch: {
tags: [item.namePlural],
summary: `Update One ${item.nameSingular}`,

View File

@ -10,6 +10,9 @@ export const getFindManyResponse200 = (
item.nameSingular,
)} for Response`;
const namePlural =
item.namePlural === 'relations' ? 'relationMetadata' : item.namePlural;
return {
description: 'Successful operation',
content: {
@ -20,7 +23,7 @@ export const getFindManyResponse200 = (
data: {
type: 'object',
properties: {
[item.namePlural]: {
[namePlural]: {
type: 'array',
items: {
$ref: schemaRef,
@ -86,7 +89,11 @@ export const getCreateOneResponse201 = (
fromMetadata = false,
) => {
const one = fromMetadata ? 'One' : '';
const schemaRef = `#/components/schemas/${capitalize(item.nameSingular)} for Response`;
const nameSingular =
item.nameSingular === 'relation' ? 'relationMetadata' : item.nameSingular;
const schemaRef = `#/components/schemas/${capitalize(nameSingular)} for Response`;
return {
description: 'Successful operation',
@ -98,7 +105,7 @@ export const getCreateOneResponse201 = (
data: {
type: 'object',
properties: {
[`create${one}${capitalize(item.nameSingular)}`]: {
[`create${one}${capitalize(nameSingular)}`]: {
$ref: schemaRef,
},
},