Deprecate FieldMetadataInterface (#13264)

# Introduction

From the moment replaced the FieldMetadataInterface definition to:
```ts
import { FieldMetadataType } from 'twenty-shared/types';

import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';

export type FieldMetadataInterface<
  T extends FieldMetadataType = FieldMetadataType,
> = FieldMetadataEntity<T>;
```
After this PR merge will create a new one removing the type and
replacing it to `FieldMetadataEntity`.
Did not renamed it here to avoid conflicts on naming + type issues fixs
within the same PR

## Field metadata entity RELATION or MORPH
Relations fields cannot be null for those field metadata entity instance
anymore, but are never for the others see
`packages/twenty-server/src/engine/metadata-modules/field-metadata/types/field-metadata-entity-test.type.ts`
( introduced TypeScript tests )

## Concerns
- TS_VECTOR is the most at risk with the `generatedType` and
`asExpression` removal from interface

## What's next
- `FielMetadataInterface` removal and rename ( see introduction )
- Depcrecating `ObjectMetadataInterface`
- Refactor `FieldMetadataEntity` optional fiels to be nullable only
- TO DIG `never` occurences on settings, defaultValue etc
- Some interfaces will be replaced by the `FlatFieldMetadata` when
deprecating the current sync and comparators tools
This commit is contained in:
Paul Rastoin
2025-07-21 11:30:18 +02:00
committed by GitHub
parent c2a5f95675
commit 47b60bd49f
67 changed files with 1780 additions and 769 deletions
@@ -11,13 +11,14 @@ type FlatFieldMetadataOverrides<
Partial<FlatFieldMetadata<T>>;
export const getFlatFieldMetadataMock = <
T extends FieldMetadataType = FieldMetadataType,
T extends FieldMetadataType = FieldMetadataType.TEXT,
>(
overrides: FlatFieldMetadataOverrides<T>,
): FlatFieldMetadata<T> => {
const createdAt = faker.date.anytime();
return {
type: FieldMetadataType.TEXT as T,
createdAt,
description: 'default flat field metadata description',
icon: 'icon',
@@ -28,15 +29,18 @@ export const getFlatFieldMetadataMock = <
label: 'flat field metadata label',
isNullable: true,
isUnique: false,
relationTargetFieldMetadataId: undefined,
relationTargetObjectMetadataId: undefined,
type: FieldMetadataType.TEXT as T,
isLabelSyncedWithName: false,
isSystem: false,
standardId: undefined,
standardId: null,
standardOverrides: undefined,
updatedAt: createdAt,
workspaceId: faker.string.uuid(),
defaultValue: null,
options: null,
relationTargetFieldMetadata: undefined as never,
relationTargetFieldMetadataId: undefined as never,
relationTargetObjectMetadata: undefined as never,
relationTargetObjectMetadataId: undefined as never,
...overrides,
};
};
@@ -11,8 +11,6 @@ type FieldMetadataEntityRelationProperties =
>;
export type FlatFieldMetadata<T extends FieldMetadataType = FieldMetadataType> =
Partial<
Omit<FieldMetadataEntity<T>, FieldMetadataEntityRelationProperties>
> & {
Omit<FieldMetadataEntity<T>, FieldMetadataEntityRelationProperties> & {
uniqueIdentifier: string;
};
@@ -104,20 +104,19 @@ const relationTestCases: WorkspaceMigrationBuilderTestCase[] = [
context: {
input: () => {
const objectMetadataId = faker.string.uuid();
const updatedFieldMetadata =
getFlatFieldMetadataMock<FieldMetadataType.RELATION>({
uniqueIdentifier: 'field-metadata-unique-identifier-1',
objectMetadataId,
type: FieldMetadataType.RELATION,
settings: {
relationType: RelationType.MANY_TO_ONE,
isForeignKey: true,
joinColumnName: 'column-name',
onDelete: undefined,
},
relationTargetFieldMetadataId: faker.string.uuid(),
relationTargetObjectMetadataId: faker.string.uuid(),
});
const updatedFieldMetadata = getFlatFieldMetadataMock({
uniqueIdentifier: 'field-metadata-unique-identifier-1',
objectMetadataId,
type: FieldMetadataType.RELATION,
settings: {
relationType: RelationType.MANY_TO_ONE,
isForeignKey: true,
joinColumnName: 'column-name',
onDelete: undefined,
},
relationTargetFieldMetadataId: faker.string.uuid(),
relationTargetObjectMetadataId: faker.string.uuid(),
});
const flatObjectMetadata = getFlatObjectMetadataMock({
uniqueIdentifier: 'object-metadata-unique-identifier-1',
isLabelSyncedWithName: true,
@@ -130,7 +129,7 @@ const relationTestCases: WorkspaceMigrationBuilderTestCase[] = [
{
...flatObjectMetadata,
flatFieldMetadatas: [
{
getFlatFieldMetadataMock({
...updatedFieldMetadata,
settings: {
relationType: RelationType.ONE_TO_MANY,
@@ -140,7 +139,7 @@ const relationTestCases: WorkspaceMigrationBuilderTestCase[] = [
},
relationTargetFieldMetadataId: faker.string.uuid(),
relationTargetObjectMetadataId: faker.string.uuid(),
},
}),
],
},
],