feat: drop target column map (#4670)
This PR is dropping the column `targetColumnMap` of fieldMetadata entities. The goal of this column was to properly map field to their respecting column in the table. We decide to drop it and instead compute the column name on the fly when we need it, as it's more easier to support. Some parts of the code has been refactored to try making implementation of composite type more easier to understand and maintain. Fix #3760 --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -16,7 +16,6 @@ describe('WorkspaceFieldComparator', () => {
|
||||
type: 'TEXT',
|
||||
name: 'DefaultFieldName',
|
||||
label: 'Default Field Label',
|
||||
targetColumnMap: 'default_column',
|
||||
defaultValue: null,
|
||||
description: 'Default description',
|
||||
isCustom: false,
|
||||
|
||||
@ -25,7 +25,7 @@ const commonFieldPropertiesToIgnore = [
|
||||
'options',
|
||||
];
|
||||
|
||||
const fieldPropertiesToStringify = ['targetColumnMap', 'defaultValue'] as const;
|
||||
const fieldPropertiesToStringify = ['defaultValue'] as const;
|
||||
|
||||
@Injectable()
|
||||
export class WorkspaceFieldComparator {
|
||||
|
||||
@ -6,7 +6,6 @@ import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync
|
||||
import { FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-default-value.interface';
|
||||
|
||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { generateTargetColumnMap } from 'src/engine/metadata-modules/field-metadata/utils/generate-target-column-map.util';
|
||||
import { generateDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/generate-default-value';
|
||||
import { TypedReflect } from 'src/utils/typed-reflect';
|
||||
import { createDeterministicUuid } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
|
||||
@ -70,7 +69,6 @@ function generateFieldMetadata<T extends FieldMetadataType>(
|
||||
isSystem: boolean,
|
||||
gate: GateDecoratorParams | undefined = undefined,
|
||||
): ReflectFieldMetadata[string] {
|
||||
const targetColumnMap = generateTargetColumnMap(params.type, false, fieldKey);
|
||||
const defaultValue = (params.defaultValue ??
|
||||
generateDefaultValue(
|
||||
params.type,
|
||||
@ -79,7 +77,6 @@ function generateFieldMetadata<T extends FieldMetadataType>(
|
||||
return {
|
||||
name: fieldKey,
|
||||
...params,
|
||||
targetColumnMap,
|
||||
isNullable: params.type === FieldMetadataType.RELATION ? true : isNullable,
|
||||
isSystem,
|
||||
isCustom: false,
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
import { FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-default-value.interface';
|
||||
import { GateDecoratorParams } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/gate-decorator.interface';
|
||||
import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.interface';
|
||||
import { FieldMetadataTargetColumnMap } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-target-column-map.interface';
|
||||
|
||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
@ -26,7 +25,6 @@ export interface ReflectFieldMetadata {
|
||||
> & {
|
||||
name: string;
|
||||
type: FieldMetadataType;
|
||||
targetColumnMap: FieldMetadataTargetColumnMap<'default'>;
|
||||
isNullable: boolean;
|
||||
isSystem: boolean;
|
||||
isCustom: boolean;
|
||||
|
||||
@ -5,7 +5,6 @@ import {
|
||||
import { ComputedPartialFieldMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface';
|
||||
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { generateTargetColumnMap } from 'src/engine/metadata-modules/field-metadata/utils/generate-target-column-map.util';
|
||||
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import {
|
||||
createForeignKeyDeterministicUuid,
|
||||
@ -42,7 +41,6 @@ export const computeStandardObject = (
|
||||
...rest,
|
||||
standardId: relationStandardId,
|
||||
defaultValue: null,
|
||||
targetColumnMap: {},
|
||||
});
|
||||
|
||||
// Foreign key
|
||||
@ -55,11 +53,6 @@ export const computeStandardObject = (
|
||||
description: `${data.description} id foreign key`,
|
||||
defaultValue: null,
|
||||
icon: undefined,
|
||||
targetColumnMap: generateTargetColumnMap(
|
||||
FieldMetadataType.UUID,
|
||||
rest.isCustom,
|
||||
joinColumn,
|
||||
),
|
||||
isSystem: true,
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user