Modify Decimal Fields to be treated as number in OpenAPI schema. (#11871)
Closes https://github.com/twentyhq/twenty/issues/10807 ## Description This PR will Modify Decimal Fields to be treated as `number` in OpenAPI schema. ## Testing <img width="989" alt="スクリーンショット 2025-05-05 20 49 05" src="https://github.com/user-attachments/assets/2f120317-5860-4c93-91a2-f521a69a1cd5" /> <img width="872" alt="スクリーンショット 2025-05-05 20 49 52" src="https://github.com/user-attachments/assets/0d319785-e30b-4132-be9e-12ed6f3cc46a" /> --------- Co-authored-by: Takuya Kurimoto <takuya004869@gmail.com> Co-authored-by: prastoin <paul@twenty.com>
This commit is contained in:
@ -0,0 +1,106 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`computeSchemaComponents Float without decimals 1`] = `
|
||||
{
|
||||
"ObjectName": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number2": {
|
||||
"type": "number",
|
||||
},
|
||||
},
|
||||
"required": [
|
||||
"number2",
|
||||
],
|
||||
"type": "object",
|
||||
},
|
||||
"ObjectName for Response": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number2": {
|
||||
"type": "number",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
"ObjectName for Update": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number2": {
|
||||
"type": "number",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`computeSchemaComponents Integer dataType with decimals 1`] = `
|
||||
{
|
||||
"ObjectName": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number1": {
|
||||
"type": "number",
|
||||
},
|
||||
},
|
||||
"required": [
|
||||
"number1",
|
||||
],
|
||||
"type": "object",
|
||||
},
|
||||
"ObjectName for Response": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number1": {
|
||||
"type": "number",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
"ObjectName for Update": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number1": {
|
||||
"type": "number",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
}
|
||||
`;
|
||||
|
||||
exports[`computeSchemaComponents Integer with a 0 decimals 1`] = `
|
||||
{
|
||||
"ObjectName": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number3": {
|
||||
"type": "integer",
|
||||
},
|
||||
},
|
||||
"required": [
|
||||
"number3",
|
||||
],
|
||||
"type": "object",
|
||||
},
|
||||
"ObjectName for Response": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number3": {
|
||||
"type": "integer",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
"ObjectName for Update": {
|
||||
"description": undefined,
|
||||
"properties": {
|
||||
"number3": {
|
||||
"type": "integer",
|
||||
},
|
||||
},
|
||||
"type": "object",
|
||||
},
|
||||
}
|
||||
`;
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,11 @@
|
||||
import { OpenAPIV3_1 } from 'openapi-types';
|
||||
import { capitalize } from 'twenty-shared/utils';
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
import { capitalize, isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import {
|
||||
FieldMetadataSettings,
|
||||
NumberDataType,
|
||||
} from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
|
||||
|
||||
import {
|
||||
computeDepthParameters,
|
||||
@ -36,29 +41,47 @@ const isFieldAvailable = (field: FieldMetadataEntity, forResponse: boolean) => {
|
||||
}
|
||||
};
|
||||
|
||||
const getFieldProperties = (type: FieldMetadataType): Property => {
|
||||
switch (type) {
|
||||
case FieldMetadataType.UUID:
|
||||
const getFieldProperties = (field: FieldMetadataEntity): Property => {
|
||||
switch (field.type) {
|
||||
case FieldMetadataType.UUID: {
|
||||
return { type: 'string', format: 'uuid' };
|
||||
}
|
||||
case FieldMetadataType.TEXT:
|
||||
case FieldMetadataType.RICH_TEXT:
|
||||
case FieldMetadataType.RICH_TEXT: {
|
||||
return { type: 'string' };
|
||||
case FieldMetadataType.DATE_TIME:
|
||||
}
|
||||
case FieldMetadataType.DATE_TIME: {
|
||||
return { type: 'string', format: 'date-time' };
|
||||
case FieldMetadataType.DATE:
|
||||
}
|
||||
case FieldMetadataType.DATE: {
|
||||
return { type: 'string', format: 'date' };
|
||||
case FieldMetadataType.NUMBER:
|
||||
return { type: 'integer' };
|
||||
case FieldMetadataType.NUMERIC:
|
||||
case FieldMetadataType.POSITION:
|
||||
return { type: 'number' };
|
||||
case FieldMetadataType.BOOLEAN:
|
||||
return { type: 'boolean' };
|
||||
case FieldMetadataType.RAW_JSON:
|
||||
return { type: 'object' };
|
||||
}
|
||||
case FieldMetadataType.NUMBER: {
|
||||
const settings =
|
||||
field.settings as FieldMetadataSettings<FieldMetadataType.NUMBER>;
|
||||
|
||||
default:
|
||||
if (
|
||||
settings?.dataType === NumberDataType.FLOAT ||
|
||||
(isDefined(settings?.decimals) && settings.decimals > 0)
|
||||
) {
|
||||
return { type: 'number' };
|
||||
}
|
||||
|
||||
return { type: 'integer' };
|
||||
}
|
||||
case FieldMetadataType.NUMERIC:
|
||||
case FieldMetadataType.POSITION: {
|
||||
return { type: 'number' };
|
||||
}
|
||||
case FieldMetadataType.BOOLEAN: {
|
||||
return { type: 'boolean' };
|
||||
}
|
||||
case FieldMetadataType.RAW_JSON: {
|
||||
return { type: 'object' };
|
||||
}
|
||||
default: {
|
||||
return { type: 'string' };
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -282,7 +305,7 @@ const getSchemaComponentsProperties = ({
|
||||
};
|
||||
break;
|
||||
default:
|
||||
itemProperty = getFieldProperties(field.type);
|
||||
itemProperty = getFieldProperties(field);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user