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
@@ -14,6 +14,7 @@ import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dto
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { FieldMetadataMorphRelationService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata-morph-relation.service';
import { FieldMetadataRelationService } from 'src/engine/metadata-modules/field-metadata/services/field-metadata-relation.service';
import { fromFieldMetadataEntityToFieldMetadataDto } from 'src/engine/metadata-modules/field-metadata/utils/from-field-metadata-entity-to-fieldMetadata-dto.util';
import { resolveFieldMetadataStandardOverride } from 'src/engine/metadata-modules/field-metadata/utils/resolve-field-metadata-standard-override.util';
import { IndexFieldMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-field-metadata.dto';
import { IndexMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-metadata.dto';
@@ -211,40 +212,41 @@ export class DataloaderService {
return [];
}
const fields = Object.values(objectMetadata.fieldsById).map(
// TODO: fix this as we should merge FieldMetadataEntity and FieldMetadataInterface
(fieldMetadata) => {
const overridesFieldToCompute = [
'icon',
'label',
'description',
] as const satisfies (keyof FieldMetadataInterface)[];
const fields = Object.values(
objectMetadata.fieldsById,
).map<FieldMetadataDTO>((fieldMetadata) => {
const overridesFieldToCompute = [
'icon',
'label',
'description',
] as const satisfies (keyof FieldMetadataInterface)[];
const overrides = overridesFieldToCompute.reduce<
Partial<
Record<(typeof overridesFieldToCompute)[number], string>
>
>(
(acc, field) => ({
...acc,
[field]: resolveFieldMetadataStandardOverride(
fieldMetadata,
field,
dataLoaderParams[0].locale,
),
}),
{},
);
const overrides = overridesFieldToCompute.reduce<
Partial<Record<(typeof overridesFieldToCompute)[number], string>>
>(
(acc, field) => ({
...acc,
[field]: resolveFieldMetadataStandardOverride(
{
label: fieldMetadata.label,
description: fieldMetadata.description ?? undefined,
icon: fieldMetadata.icon ?? undefined,
isCustom: fieldMetadata.isCustom,
standardOverrides:
fieldMetadata.standardOverrides ?? undefined,
},
field,
dataLoaderParams[0].locale,
),
}),
{},
);
return {
...fieldMetadata,
createdAt: new Date(fieldMetadata.createdAt),
updatedAt: new Date(fieldMetadata.updatedAt),
workspaceId: workspaceId,
...overrides,
};
},
);
return fromFieldMetadataEntityToFieldMetadataDto({
...fieldMetadata,
...overrides,
});
});
return filterMorphRelationDuplicateFieldsDTO(fields);
});