CreateFieldInput transpilation to FlatFieldMetadata, FlatFieldMetadata validation (#13493)

# Introduction
Following https://github.com/twentyhq/twenty/pull/13420

What has been done:
- `CreateFieldInput` transpilation to `FlatFieldMetadata`
- `FlatFieldMetadata` validator service
- A lof of transpilation utils from `input` to `flatObject` or
`flatField`
- Created dedicated v2 api metadata services
- Introducing `inferDeletionFromMissingObjectFieldIndex` in the builder,
to avoid diffing every object and field of the current workspace we
allow only generating create/update migration operations, usefull when
passing by the api metadata


## We still need to in another PR:
- Implement a strong unit test coverage and critical functions and
services
- Finalize flat field metadata validation exception for `options`
`defaultValue` `settings` and `relations`
- Finalize `flatObjectMetadata` validation and v2 service refactor
- Plug the new service when feature flag is enabled
This commit is contained in:
Paul Rastoin
2025-07-30 15:08:11 +02:00
committed by GitHub
parent 0e4e3acaba
commit 29a4f4d685
41 changed files with 1346 additions and 351 deletions
@@ -117,25 +117,21 @@ export const buildDefaultFieldsForCustomObject = (
];
type BuildDefaultFlatFieldMetadataForCustomObjectArgs = {
createdAt: Date;
workspaceId: string;
objectMetadataId: string;
};
export const buildDefaultFlatFieldMetadataForCustomObject = ({
createdAt,
workspaceId,
objectMetadataId,
}: BuildDefaultFlatFieldMetadataForCustomObjectArgs) => {
const idField: FlatFieldMetadata<FieldMetadataType.UUID> = {
type: FieldMetadataType.UUID,
createdAt,
id: v4(),
isLabelSyncedWithName: false, // TO CHECK
isUnique: true, // Was false before but unsure if normal ?
isLabelSyncedWithName: false,
isUnique: true,
objectMetadataId,
uniqueIdentifier: BASE_OBJECT_STANDARD_FIELD_IDS.id,
updatedAt: createdAt,
workspaceId,
standardId: BASE_OBJECT_STANDARD_FIELD_IDS.id,
name: 'id',
@@ -159,13 +155,11 @@ export const buildDefaultFlatFieldMetadataForCustomObject = ({
const nameField: FlatFieldMetadata<FieldMetadataType.TEXT> = {
type: FieldMetadataType.TEXT,
createdAt,
id: v4(),
isLabelSyncedWithName: false,
isUnique: false,
objectMetadataId,
uniqueIdentifier: CUSTOM_OBJECT_STANDARD_FIELD_IDS.name,
updatedAt: createdAt,
workspaceId,
standardId: CUSTOM_OBJECT_STANDARD_FIELD_IDS.name,
name: 'name',
@@ -189,13 +183,11 @@ export const buildDefaultFlatFieldMetadataForCustomObject = ({
const createdAtField: FlatFieldMetadata<FieldMetadataType.DATE_TIME> = {
type: FieldMetadataType.DATE_TIME,
createdAt,
id: v4(),
isLabelSyncedWithName: false,
isUnique: false,
objectMetadataId,
uniqueIdentifier: BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
updatedAt: createdAt,
workspaceId,
standardId: BASE_OBJECT_STANDARD_FIELD_IDS.createdAt,
name: 'createdAt',
@@ -219,13 +211,11 @@ export const buildDefaultFlatFieldMetadataForCustomObject = ({
const updatedAtField: FlatFieldMetadata<FieldMetadataType.DATE_TIME> = {
type: FieldMetadataType.DATE_TIME,
createdAt,
id: v4(),
isLabelSyncedWithName: false,
isUnique: false,
objectMetadataId,
uniqueIdentifier: BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
updatedAt: createdAt,
workspaceId,
standardId: BASE_OBJECT_STANDARD_FIELD_IDS.updatedAt,
name: 'updatedAt',
@@ -249,13 +239,11 @@ export const buildDefaultFlatFieldMetadataForCustomObject = ({
const deletedAtField: FlatFieldMetadata<FieldMetadataType.DATE_TIME> = {
type: FieldMetadataType.DATE_TIME,
createdAt,
id: v4(),
isLabelSyncedWithName: false,
isUnique: false,
objectMetadataId,
uniqueIdentifier: BASE_OBJECT_STANDARD_FIELD_IDS.deletedAt,
updatedAt: createdAt,
workspaceId,
standardId: BASE_OBJECT_STANDARD_FIELD_IDS.deletedAt,
name: 'deletedAt',
@@ -279,13 +267,11 @@ export const buildDefaultFlatFieldMetadataForCustomObject = ({
const createdByField: FlatFieldMetadata<FieldMetadataType.ACTOR> = {
type: FieldMetadataType.ACTOR,
createdAt,
id: v4(),
isLabelSyncedWithName: false,
isUnique: false,
objectMetadataId,
uniqueIdentifier: CUSTOM_OBJECT_STANDARD_FIELD_IDS.createdBy,
updatedAt: createdAt,
workspaceId,
standardId: CUSTOM_OBJECT_STANDARD_FIELD_IDS.createdBy,
name: 'createdBy',
@@ -309,13 +295,11 @@ export const buildDefaultFlatFieldMetadataForCustomObject = ({
const positionField: FlatFieldMetadata<FieldMetadataType.POSITION> = {
type: FieldMetadataType.POSITION,
createdAt,
id: v4(),
isLabelSyncedWithName: false,
isUnique: false,
objectMetadataId,
uniqueIdentifier: CUSTOM_OBJECT_STANDARD_FIELD_IDS.position,
updatedAt: createdAt,
workspaceId,
standardId: CUSTOM_OBJECT_STANDARD_FIELD_IDS.position,
name: 'position',