Remove field metadata interface references (#13305)

# Introduction
Following https://github.com/twentyhq/twenty/pull/13264
> After this PR merge will create a new one removing the type and
replacing it to FieldMetadataEntity.

This is it !
This commit is contained in:
Paul Rastoin
2025-07-21 13:57:14 +02:00
committed by GitHub
parent 47b60bd49f
commit 1dee9bc800
54 changed files with 167 additions and 223 deletions

View File

@ -1,14 +1,13 @@
import { capitalize } from 'twenty-shared/utils'; import { capitalize } from 'twenty-shared/utils';
import { WhereExpressionBuilder } from 'typeorm'; import { WhereExpressionBuilder } from 'typeorm';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { import {
GraphqlQueryRunnerException, GraphqlQueryRunnerException,
GraphqlQueryRunnerExceptionCode, GraphqlQueryRunnerExceptionCode,
} from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception'; } from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception';
import { computeWhereConditionParts } from 'src/engine/api/graphql/graphql-query-runner/utils/compute-where-condition-parts'; import { computeWhereConditionParts } from 'src/engine/api/graphql/graphql-query-runner/utils/compute-where-condition-parts';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory'; import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory';
@ -78,7 +77,7 @@ export class GraphqlQueryFilterFieldParser {
private parseCompositeFieldForFilter( private parseCompositeFieldForFilter(
queryBuilder: WhereExpressionBuilder, queryBuilder: WhereExpressionBuilder,
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
objectNameSingular: string, objectNameSingular: string,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
fieldValue: any, fieldValue: any,

View File

@ -4,13 +4,13 @@ import {
ObjectRecordOrderBy, ObjectRecordOrderBy,
OrderByDirection, OrderByDirection,
} from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface'; } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { import {
GraphqlQueryRunnerException, GraphqlQueryRunnerException,
GraphqlQueryRunnerExceptionCode, GraphqlQueryRunnerExceptionCode,
} from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception'; } from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory'; import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory';
@ -66,7 +66,7 @@ export class GraphqlQueryOrderFieldParser {
} }
private parseCompositeFieldForOrder( private parseCompositeFieldForOrder(
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
value: any, value: any,
objectNameSingular: string, objectNameSingular: string,

View File

@ -1,10 +1,9 @@
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { import {
GraphqlQuerySelectedFieldsParser, GraphqlQuerySelectedFieldsParser,
GraphqlQuerySelectedFieldsResult, GraphqlQuerySelectedFieldsResult,
} from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields.parser'; } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields.parser';
import { getTargetObjectMetadataOrThrow } from 'src/engine/api/graphql/graphql-query-runner/utils/get-target-object-metadata.util'; import { getTargetObjectMetadataOrThrow } from 'src/engine/api/graphql/graphql-query-runner/utils/get-target-object-metadata.util';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
export class GraphqlQuerySelectedFieldsRelationParser { export class GraphqlQuerySelectedFieldsRelationParser {
@ -15,7 +14,7 @@ export class GraphqlQuerySelectedFieldsRelationParser {
} }
parseRelationField( parseRelationField(
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
fieldKey: string, fieldKey: string,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
fieldValue: any, fieldValue: any,

View File

@ -1,10 +1,9 @@
import { capitalize } from 'twenty-shared/utils'; import { capitalize } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { GraphqlQuerySelectedFieldsAggregateParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields-aggregate.parser'; import { GraphqlQuerySelectedFieldsAggregateParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields-aggregate.parser';
import { GraphqlQuerySelectedFieldsRelationParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields-relation.parser'; import { GraphqlQuerySelectedFieldsRelationParser } from 'src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-selected-fields/graphql-selected-fields-relation.parser';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
@ -146,7 +145,7 @@ export class GraphqlQuerySelectedFieldsParser {
} }
private parseCompositeField( private parseCompositeField(
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
fieldValue: any, fieldValue: any,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any

View File

@ -6,7 +6,6 @@ import {
ObjectRecordOrderBy, ObjectRecordOrderBy,
} from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface'; } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
import { IConnection } from 'src/engine/api/graphql/workspace-query-runner/interfaces/connection.interface'; import { IConnection } from 'src/engine/api/graphql/workspace-query-runner/interfaces/connection.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { CONNECTION_MAX_DEPTH } from 'src/engine/api/graphql/graphql-query-runner/constants/connection-max-depth.constant'; import { CONNECTION_MAX_DEPTH } from 'src/engine/api/graphql/graphql-query-runner/constants/connection-max-depth.constant';
import { import {
@ -17,6 +16,7 @@ import { encodeCursor } from 'src/engine/api/graphql/graphql-query-runner/utils/
import { getTargetObjectMetadataOrThrow } from 'src/engine/api/graphql/graphql-query-runner/utils/get-target-object-metadata.util'; import { getTargetObjectMetadataOrThrow } from 'src/engine/api/graphql/graphql-query-runner/utils/get-target-object-metadata.util';
import { AggregationField } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util'; import { AggregationField } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-available-aggregations-from-object-fields.util';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util'; import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util';
@ -236,7 +236,7 @@ export class ObjectRecordsToGraphqlConnectionHelper {
} }
private processCompositeField( private processCompositeField(
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
fieldValue: any, fieldValue: any,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any

View File

@ -20,7 +20,7 @@ import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-met
import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util'; import { getObjectMetadataMapItemByNameSingular } from 'src/engine/metadata-modules/utils/get-object-metadata-map-item-by-name-singular.util';
import { WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource'; import { WorkspaceDataSource } from 'src/engine/twenty-orm/datasource/workspace.datasource';
import { WorkspaceSelectQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-select-query-builder'; import { WorkspaceSelectQueryBuilder } from 'src/engine/twenty-orm/repository/workspace-select-query-builder';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
@Injectable() @Injectable()
export class ProcessNestedRelationsV2Helper { export class ProcessNestedRelationsV2Helper {
@ -118,7 +118,7 @@ export class ProcessNestedRelationsV2Helper {
parentObjectMetadataItem.fieldsById[sourceFieldMetadataId]; parentObjectMetadataItem.fieldsById[sourceFieldMetadataId];
if ( if (
!isFieldMetadataInterfaceOfType( !isFieldMetadataEntityOfType(
sourceFieldMetadata, sourceFieldMetadata,
FieldMetadataType.RELATION, FieldMetadataType.RELATION,
) )

View File

@ -4,7 +4,7 @@ import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfa
import { InternalServerError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { InternalServerError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
export const buildColumnsToSelect = ({ export const buildColumnsToSelect = ({
select, select,
@ -57,7 +57,7 @@ const getRequiredRelationColumns = (
} }
if ( if (
!isFieldMetadataInterfaceOfType(fieldMetadata, FieldMetadataType.RELATION) !isFieldMetadataEntityOfType(fieldMetadata, FieldMetadataType.RELATION)
) { ) {
continue; continue;
} }

View File

@ -1,13 +1,12 @@
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { import {
GraphqlQueryRunnerException, GraphqlQueryRunnerException,
GraphqlQueryRunnerExceptionCode, GraphqlQueryRunnerExceptionCode,
} from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception'; } from 'src/engine/api/graphql/graphql-query-runner/errors/graphql-query-runner.exception';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
export const getTargetObjectMetadataOrThrow = ( export const getTargetObjectMetadataOrThrow = (
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
objectMetadataMaps: ObjectMetadataMaps, objectMetadataMaps: ObjectMetadataMaps,
) => { ) => {
if (!fieldMetadata.relationTargetObjectMetadataId) { if (!fieldMetadata.relationTargetObjectMetadataId) {

View File

@ -1,12 +1,13 @@
import { GraphQLResolveInfo } from 'graphql'; import { GraphQLResolveInfo } from 'graphql';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export interface WorkspaceQueryBuilderOptions { export interface WorkspaceQueryBuilderOptions {
objectMetadataItem: ObjectMetadataInterface; objectMetadataItem: ObjectMetadataInterface;
info: GraphQLResolveInfo; info: GraphQLResolveInfo;
fieldMetadataCollection: FieldMetadataInterface[]; fieldMetadataCollection: FieldMetadataEntity[];
objectMetadataCollection: ObjectMetadataInterface[]; objectMetadataCollection: ObjectMetadataInterface[];
withSoftDeleted?: boolean; withSoftDeleted?: boolean;
} }

View File

@ -21,7 +21,7 @@ import { CompositeInputTypeDefinitionFactory } from 'src/engine/api/graphql/work
import { FileService } from 'src/engine/core-modules/file/services/file.service'; import { FileService } from 'src/engine/core-modules/file/services/file.service';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
// TODO: find a way to prevent conflict between handlers executing logic on object relations // TODO: find a way to prevent conflict between handlers executing logic on object relations
// And this factory that is also executing logic on object relations // And this factory that is also executing logic on object relations
@ -136,10 +136,7 @@ export class QueryResultGettersFactory {
) )
.filter(isDefined) .filter(isDefined)
.filter((fieldMetadata) => .filter((fieldMetadata) =>
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(fieldMetadata, FieldMetadataType.RELATION),
fieldMetadata,
FieldMetadataType.RELATION,
),
); );
const relationFieldsProcessedMap = {} as Record< const relationFieldsProcessedMap = {} as Record<

View File

@ -4,13 +4,13 @@ import { GraphQLEnumType } from 'graphql';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { WorkspaceBuildSchemaOptions } from 'src/engine/api/graphql/workspace-schema-builder/interfaces/workspace-build-schema-optionts.interface'; import { WorkspaceBuildSchemaOptions } from 'src/engine/api/graphql/workspace-schema-builder/interfaces/workspace-build-schema-optionts.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { import {
FieldMetadataComplexOption, FieldMetadataComplexOption,
FieldMetadataDefaultOption, FieldMetadataDefaultOption,
} from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; } from 'src/engine/metadata-modules/field-metadata/dtos/options.input';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isEnumFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-enum-field-metadata-type.util'; import { isEnumFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-enum-field-metadata-type.util';
import { transformEnumValue } from 'src/engine/utils/transform-enum-value'; import { transformEnumValue } from 'src/engine/utils/transform-enum-value';
import { pascalCase } from 'src/utils/pascal-case'; import { pascalCase } from 'src/utils/pascal-case';
@ -50,7 +50,7 @@ export class EnumTypeDefinitionFactory {
private generateEnum( private generateEnum(
objectName: string, objectName: string,
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
options: WorkspaceBuildSchemaOptions, options: WorkspaceBuildSchemaOptions,
): GraphQLEnumType { ): GraphQLEnumType {
// FixMe: It's a hack until Typescript get fixed on union types for reduce function // FixMe: It's a hack until Typescript get fixed on union types for reduce function

View File

@ -15,7 +15,7 @@ import { RelationTypeV2Factory } from 'src/engine/api/graphql/workspace-schema-b
import { TypeDefinitionsStorage } from 'src/engine/api/graphql/workspace-schema-builder/storages/type-definitions.storage'; import { TypeDefinitionsStorage } from 'src/engine/api/graphql/workspace-schema-builder/storages/type-definitions.storage';
import { getResolverArgs } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-resolver-args.util'; import { getResolverArgs } from 'src/engine/api/graphql/workspace-schema-builder/utils/get-resolver-args.util';
import { objectContainsRelationField } from 'src/engine/api/graphql/workspace-schema-builder/utils/object-contains-relation-field'; import { objectContainsRelationField } from 'src/engine/api/graphql/workspace-schema-builder/utils/object-contains-relation-field';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
import { ArgsFactory } from './args.factory'; import { ArgsFactory } from './args.factory';
@ -113,11 +113,11 @@ export class ExtendObjectTypeDefinitionV2Factory {
for (const fieldMetadata of objectMetadata.fields) { for (const fieldMetadata of objectMetadata.fields) {
// Ignore non-relation fields as they are already defined // Ignore non-relation fields as they are already defined
const isRelation = const isRelation =
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.RELATION, FieldMetadataType.RELATION,
) || ) ||
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.MORPH_RELATION, FieldMetadataType.MORPH_RELATION,
); );

View File

@ -8,7 +8,6 @@ import {
} from 'graphql'; } from 'graphql';
import { getUniqueConstraintsFields } from 'twenty-shared/utils'; import { getUniqueConstraintsFields } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { import {
@ -17,6 +16,7 @@ import {
} from 'src/engine/api/graphql/workspace-schema-builder/factories/input-type-definition.factory'; } from 'src/engine/api/graphql/workspace-schema-builder/factories/input-type-definition.factory';
import { TypeMapperService } from 'src/engine/api/graphql/workspace-schema-builder/services/type-mapper.service'; import { TypeMapperService } from 'src/engine/api/graphql/workspace-schema-builder/services/type-mapper.service';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { pascalCase } from 'src/utils/pascal-case'; import { pascalCase } from 'src/utils/pascal-case';
@ -63,7 +63,7 @@ export class RelationConnectInputTypeDefinitionFactory {
objectMetadata: ObjectMetadataInterface, objectMetadata: ObjectMetadataInterface,
): Record<string, GraphQLInputFieldConfig> { ): Record<string, GraphQLInputFieldConfig> {
const uniqueConstraints = getUniqueConstraintsFields< const uniqueConstraints = getUniqueConstraintsFields<
FieldMetadataInterface, FieldMetadataEntity,
ObjectMetadataInterface ObjectMetadataInterface
>(objectMetadata); >(objectMetadata);
@ -140,7 +140,7 @@ export class RelationConnectInputTypeDefinitionFactory {
}; };
} }
private formatConstraints(constraints: FieldMetadataInterface[][]) { private formatConstraints(constraints: FieldMetadataEntity[][]) {
return constraints return constraints
.map((constraint) => constraint.map((field) => field.name).join(' and ')) .map((constraint) => constraint.map((field) => field.name).join(' and '))
.join(' or '); .join(' or ');

View File

@ -3,10 +3,10 @@ import { Injectable, Logger } from '@nestjs/common';
import { GraphQLOutputType } from 'graphql'; import { GraphQLOutputType } from 'graphql';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { TypeDefinitionsStorage } from 'src/engine/api/graphql/workspace-schema-builder/storages/type-definitions.storage'; import { TypeDefinitionsStorage } from 'src/engine/api/graphql/workspace-schema-builder/storages/type-definitions.storage';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectTypeDefinitionKind } from './object-type-definition.factory'; import { ObjectTypeDefinitionKind } from './object-type-definition.factory';
@ -19,7 +19,7 @@ export class RelationTypeV2Factory {
) {} ) {}
public create( public create(
fieldMetadata: FieldMetadataInterface< fieldMetadata: FieldMetadataEntity<
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
>, >,
): GraphQLOutputType { ): GraphQLOutputType {

View File

@ -8,15 +8,15 @@ import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { WorkspaceBuildSchemaOptions } from 'src/engine/api/graphql/workspace-schema-builder/interfaces/workspace-build-schema-optionts.interface'; import { WorkspaceBuildSchemaOptions } from 'src/engine/api/graphql/workspace-schema-builder/interfaces/workspace-build-schema-optionts.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { InputTypeDefinitionKind } from 'src/engine/api/graphql/workspace-schema-builder/factories/input-type-definition.factory'; import { InputTypeDefinitionKind } from 'src/engine/api/graphql/workspace-schema-builder/factories/input-type-definition.factory';
import { ObjectTypeDefinitionKind } from 'src/engine/api/graphql/workspace-schema-builder/factories/object-type-definition.factory'; import { ObjectTypeDefinitionKind } from 'src/engine/api/graphql/workspace-schema-builder/factories/object-type-definition.factory';
import { formatRelationConnectInputTarget } from 'src/engine/api/graphql/workspace-schema-builder/factories/relation-connect-input-type-definition.factory'; import { formatRelationConnectInputTarget } from 'src/engine/api/graphql/workspace-schema-builder/factories/relation-connect-input-type-definition.factory';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
type TypeFactory<T extends InputTypeDefinitionKind | ObjectTypeDefinitionKind> = type TypeFactory<T extends InputTypeDefinitionKind | ObjectTypeDefinitionKind> =
{ {
@ -63,11 +63,8 @@ export const generateFields = <
let generatedField; let generatedField;
const isRelation = const isRelation =
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(fieldMetadata, FieldMetadataType.RELATION) ||
fieldMetadata, isFieldMetadataEntityOfType(
FieldMetadataType.RELATION,
) ||
isFieldMetadataInterfaceOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.MORPH_RELATION, FieldMetadataType.MORPH_RELATION,
); );
@ -95,7 +92,7 @@ export const generateFields = <
}; };
const getTarget = <T extends FieldMetadataType>( const getTarget = <T extends FieldMetadataType>(
fieldMetadata: FieldMetadataInterface<T>, fieldMetadata: FieldMetadataEntity<T>,
) => { ) => {
return isCompositeFieldMetadataType(fieldMetadata.type) return isCompositeFieldMetadataType(fieldMetadata.type)
? fieldMetadata.type.toString() ? fieldMetadata.type.toString()
@ -103,7 +100,7 @@ const getTarget = <T extends FieldMetadataType>(
}; };
const getTypeFactoryOptions = <T extends FieldMetadataType>( const getTypeFactoryOptions = <T extends FieldMetadataType>(
fieldMetadata: FieldMetadataInterface<T>, fieldMetadata: FieldMetadataEntity<T>,
kind: InputTypeDefinitionKind | ObjectTypeDefinitionKind, kind: InputTypeDefinitionKind | ObjectTypeDefinitionKind,
) => { ) => {
return isInputTypeDefinitionKind(kind) return isInputTypeDefinitionKind(kind)
@ -133,7 +130,7 @@ const generateField = <
options, options,
typeFactory, typeFactory,
}: { }: {
fieldMetadata: FieldMetadataInterface; fieldMetadata: FieldMetadataEntity;
kind: T; kind: T;
options: WorkspaceBuildSchemaOptions; options: WorkspaceBuildSchemaOptions;
typeFactory: TypeFactory<T>; typeFactory: TypeFactory<T>;
@ -166,7 +163,7 @@ const generateRelationField = <
options, options,
typeFactory, typeFactory,
}: { }: {
fieldMetadata: FieldMetadataInterface< fieldMetadata: FieldMetadataEntity<
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
>; >;
kind: T; kind: T;

View File

@ -5,9 +5,8 @@ import { FIELD_FOR_TOTAL_COUNT_AGGREGATE_OPERATION } from 'twenty-shared/constan
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { capitalize, isFieldMetadataDateKind } from 'twenty-shared/utils'; import { capitalize, isFieldMetadataDateKind } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant'; import { AggregateOperations } from 'src/engine/api/graphql/graphql-query-runner/constants/aggregate-operations.constant';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { getSubfieldsForAggregateOperation } from 'src/engine/twenty-orm/utils/get-subfields-for-aggregate-operation.util'; import { getSubfieldsForAggregateOperation } from 'src/engine/twenty-orm/utils/get-subfields-for-aggregate-operation.util';
export type AggregationField = { export type AggregationField = {
@ -21,7 +20,7 @@ export type AggregationField = {
}; };
export const getAvailableAggregationsFromObjectFields = ( export const getAvailableAggregationsFromObjectFields = (
fields: FieldMetadataInterface[], fields: FieldMetadataEntity[],
): Record<string, AggregationField> => { ): Record<string, AggregationField> => {
return fields.reduce<Record<string, AggregationField>>( return fields.reduce<Record<string, AggregationField>>(
(acc, field) => { (acc, field) => {

View File

@ -34,7 +34,7 @@ import { WorkspaceSelectQueryBuilder } from 'src/engine/twenty-orm/repository/wo
import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository'; import { WorkspaceRepository } from 'src/engine/twenty-orm/repository/workspace.repository';
import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager'; import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
import { formatResult as formatGetManyData } from 'src/engine/twenty-orm/utils/format-result.util'; import { formatResult as formatGetManyData } from 'src/engine/twenty-orm/utils/format-result.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
export interface PageInfo { export interface PageInfo {
hasNextPage?: boolean; hasNextPage?: boolean;
@ -160,7 +160,7 @@ export abstract class RestApiBaseHandler {
Object.values(objectMetadata.objectMetadataMapItem.fieldsById).forEach( Object.values(objectMetadata.objectMetadataMapItem.fieldsById).forEach(
(field) => { (field) => {
if (isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION)) { if (isFieldMetadataEntityOfType(field, FieldMetadataType.RELATION)) {
if ( if (
depth === MAX_DEPTH && depth === MAX_DEPTH &&
isDefined(field.relationTargetObjectMetadataId) isDefined(field.relationTargetObjectMetadataId)

View File

@ -7,7 +7,7 @@ import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-meta
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
export const checkFields = ( export const checkFields = (
objectMetadataItemWithFieldsMaps: ObjectMetadataItemWithFieldMaps, objectMetadataItemWithFieldsMaps: ObjectMetadataItemWithFieldMaps,
@ -35,7 +35,7 @@ export const checkFields = (
].flat(); ].flat();
} }
if (isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION)) { if (isFieldMetadataEntityOfType(field, FieldMetadataType.RELATION)) {
return field.settings?.joinColumnName; return field.settings?.joinColumnName;
} }

View File

@ -1,18 +1,18 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
const DEFAULT_DEPTH_VALUE = 1; const DEFAULT_DEPTH_VALUE = 1;
// TODO: Should be properly type and based on composite type definitions // TODO: Should be properly type and based on composite type definitions
export const mapFieldMetadataToGraphqlQuery = ( export const mapFieldMetadataToGraphqlQuery = (
objectMetadataMaps: ObjectMetadataMaps, objectMetadataMaps: ObjectMetadataMaps,
field: FieldMetadataInterface, field: FieldMetadataEntity,
maxDepthForRelations = DEFAULT_DEPTH_VALUE, maxDepthForRelations = DEFAULT_DEPTH_VALUE,
): string | undefined => { ): string | undefined => {
if (maxDepthForRelations < 0) { if (maxDepthForRelations < 0) {
@ -40,8 +40,8 @@ export const mapFieldMetadataToGraphqlQuery = (
].includes(fieldType); ].includes(fieldType);
const isRelation = const isRelation =
isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION) || isFieldMetadataEntityOfType(field, FieldMetadataType.RELATION) ||
isFieldMetadataInterfaceOfType(field, FieldMetadataType.MORPH_RELATION); isFieldMetadataEntityOfType(field, FieldMetadataType.MORPH_RELATION);
if (fieldIsSimpleValue) { if (fieldIsSimpleValue) {
return field.name; return field.name;

View File

@ -4,14 +4,13 @@ import DataLoader from 'dataloader';
import { APP_LOCALES } from 'twenty-shared/translations'; import { APP_LOCALES } from 'twenty-shared/translations';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface'; import { IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { IDataloaders } from 'src/engine/dataloaders/dataloader.interface'; import { IDataloaders } from 'src/engine/dataloaders/dataloader.interface';
import { filterMorphRelationDuplicateFieldsDTO } from 'src/engine/dataloaders/utils/filter-morph-relation-duplicate-fields.util'; import { filterMorphRelationDuplicateFieldsDTO } from 'src/engine/dataloaders/utils/filter-morph-relation-duplicate-fields.util';
import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto'; import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/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 { 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 { 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 { fromFieldMetadataEntityToFieldMetadataDto } from 'src/engine/metadata-modules/field-metadata/utils/from-field-metadata-entity-to-fieldMetadata-dto.util';
@ -23,16 +22,13 @@ import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/works
export type RelationMetadataLoaderPayload = { export type RelationMetadataLoaderPayload = {
workspaceId: string; workspaceId: string;
fieldMetadata: Pick< fieldMetadata: Pick<FieldMetadataEntity, 'type' | 'id' | 'objectMetadataId'>;
FieldMetadataInterface,
'type' | 'id' | 'objectMetadataId'
>;
}; };
export type RelationLoaderPayload = { export type RelationLoaderPayload = {
workspaceId: string; workspaceId: string;
fieldMetadata: Pick< fieldMetadata: Pick<
FieldMetadataInterface, FieldMetadataEntity,
| 'type' | 'type'
| 'id' | 'id'
| 'objectMetadataId' | 'objectMetadataId'
@ -44,7 +40,7 @@ export type RelationLoaderPayload = {
export type MorphRelationLoaderPayload = { export type MorphRelationLoaderPayload = {
workspaceId: string; workspaceId: string;
fieldMetadata: Pick< fieldMetadata: Pick<
FieldMetadataInterface, FieldMetadataEntity,
| 'type' | 'type'
| 'id' | 'id'
| 'objectMetadataId' | 'objectMetadataId'
@ -219,7 +215,7 @@ export class DataloaderService {
'icon', 'icon',
'label', 'label',
'description', 'description',
] as const satisfies (keyof FieldMetadataInterface)[]; ] as const satisfies (keyof FieldMetadataEntity)[];
const overrides = overridesFieldToCompute.reduce< const overrides = overridesFieldToCompute.reduce<
Partial<Record<(typeof overridesFieldToCompute)[number], string>> Partial<Record<(typeof overridesFieldToCompute)[number], string>>

View File

@ -1,7 +0,0 @@
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>;

View File

@ -1,8 +1,7 @@
import { IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface'; import { IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface';
import { WorkspaceEntityDuplicateCriteria } from 'src/engine/api/graphql/workspace-query-builder/types/workspace-entity-duplicate-criteria.type'; import { WorkspaceEntityDuplicateCriteria } from 'src/engine/api/graphql/workspace-query-builder/types/workspace-entity-duplicate-criteria.type';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { FieldMetadataInterface } from './field-metadata.interface';
export interface ObjectMetadataInterface { export interface ObjectMetadataInterface {
id: string; id: string;
@ -15,7 +14,7 @@ export interface ObjectMetadataInterface {
description?: string; description?: string;
icon: string; icon: string;
targetTableName: string; targetTableName: string;
fields: FieldMetadataInterface[]; fields: FieldMetadataEntity[];
indexMetadatas: IndexMetadataInterface[]; indexMetadatas: IndexMetadataInterface[];
isSystem: boolean; isSystem: boolean;
isCustom: boolean; isCustom: boolean;

View File

@ -7,7 +7,6 @@ import { assertUnreachable, isDefined } from 'twenty-shared/utils';
import { z } from 'zod'; import { z } from 'zod';
import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.interface'; import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
import { import {
@ -15,6 +14,7 @@ import {
FieldMetadataDefaultOption, FieldMetadataDefaultOption,
} from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; } from 'src/engine/metadata-modules/field-metadata/dtos/options.input';
import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input'; import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
FieldMetadataException, FieldMetadataException,
FieldMetadataExceptionCode, FieldMetadataExceptionCode,
@ -36,7 +36,7 @@ type FieldMetadataUpdateCreateInput = CreateFieldInput | UpdateFieldInput;
type ValidateEnumFieldMetadataArgs = { type ValidateEnumFieldMetadataArgs = {
existingFieldMetadata?: Pick< existingFieldMetadata?: Pick<
FieldMetadataInterface, FieldMetadataEntity,
'type' | 'isNullable' | 'defaultValue' | 'options' 'type' | 'isNullable' | 'defaultValue' | 'options'
>; >;
fieldMetadataInput: FieldMetadataUpdateCreateInput; fieldMetadataInput: FieldMetadataUpdateCreateInput;

View File

@ -6,11 +6,10 @@ import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
import { import {
FieldMetadataException, FieldMetadataException,
FieldMetadataExceptionCode, FieldMetadataExceptionCode,
@ -163,7 +162,7 @@ export class FieldMetadataMorphRelationService {
async findCachedFieldMetadataMorphRelation( async findCachedFieldMetadataMorphRelation(
fieldMetadataItems: Array< fieldMetadataItems: Array<
Pick< Pick<
FieldMetadataInterface, FieldMetadataEntity,
| 'id' | 'id'
| 'type' | 'type'
| 'objectMetadataId' | 'objectMetadataId'
@ -187,7 +186,7 @@ export class FieldMetadataMorphRelationService {
); );
const fieldMetadataItemsAndMorphSiblings: Pick< const fieldMetadataItemsAndMorphSiblings: Pick<
FieldMetadataInterface, FieldMetadataEntity,
| 'id' | 'id'
| 'type' | 'type'
| 'objectMetadataId' | 'objectMetadataId'

View File

@ -8,7 +8,6 @@ import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { v4 } from 'uuid'; import { v4 } from 'uuid';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
@ -28,7 +27,7 @@ import { getObjectMetadataFromObjectMetadataItemWithFieldMaps } from 'src/engine
import { validateFieldNameAvailabilityOrThrow } from 'src/engine/metadata-modules/utils/validate-field-name-availability.utils'; import { validateFieldNameAvailabilityOrThrow } from 'src/engine/metadata-modules/utils/validate-field-name-availability.utils';
import { validateMetadataNameOrThrow } from 'src/engine/metadata-modules/utils/validate-metadata-name.utils'; import { validateMetadataNameOrThrow } from 'src/engine/metadata-modules/utils/validate-metadata-name.utils';
import { computeMetadataNameFromLabel } from 'src/engine/metadata-modules/utils/validate-name-and-label-are-sync-or-throw.util'; import { computeMetadataNameFromLabel } from 'src/engine/metadata-modules/utils/validate-name-and-label-are-sync-or-throw.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service';
export class RelationCreationPayloadValidation { export class RelationCreationPayloadValidation {
@ -50,7 +49,7 @@ type ValidateFieldMetadataArgs<T extends UpdateFieldInput | CreateFieldInput> =
fieldMetadataType: FieldMetadataType; fieldMetadataType: FieldMetadataType;
fieldMetadataInput: T; fieldMetadataInput: T;
objectMetadata: ObjectMetadataItemWithFieldMaps; objectMetadata: ObjectMetadataItemWithFieldMaps;
existingFieldMetadata?: FieldMetadataInterface; existingFieldMetadata?: FieldMetadataEntity;
objectMetadataMaps: ObjectMetadataMaps; objectMetadataMaps: ObjectMetadataMaps;
}; };
@ -243,7 +242,7 @@ export class FieldMetadataRelationService {
async findCachedFieldMetadataRelation( async findCachedFieldMetadataRelation(
fieldMetadataItems: Array< fieldMetadataItems: Array<
Pick< Pick<
FieldMetadataInterface, FieldMetadataEntity,
| 'id' | 'id'
| 'type' | 'type'
| 'objectMetadataId' | 'objectMetadataId'
@ -324,11 +323,11 @@ export class FieldMetadataRelationService {
joinColumnName: string; joinColumnName: string;
}) { }) {
const isRelation = const isRelation =
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadataInput, fieldMetadataInput,
FieldMetadataType.RELATION, FieldMetadataType.RELATION,
) || ) ||
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadataInput, fieldMetadataInput,
FieldMetadataType.MORPH_RELATION, FieldMetadataType.MORPH_RELATION,
); );

View File

@ -15,10 +15,10 @@ import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface'; import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input'; import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
FieldMetadataException, FieldMetadataException,
FieldMetadataExceptionCode, FieldMetadataExceptionCode,
@ -34,7 +34,7 @@ type ValidateFieldMetadataArgs = {
fieldMetadataType: FieldMetadataType; fieldMetadataType: FieldMetadataType;
fieldMetadataInput: CreateFieldInput | UpdateFieldInput; fieldMetadataInput: CreateFieldInput | UpdateFieldInput;
objectMetadata: ObjectMetadataItemWithFieldMaps; objectMetadata: ObjectMetadataItemWithFieldMaps;
existingFieldMetadata?: FieldMetadataInterface; existingFieldMetadata?: FieldMetadataEntity;
}; };
enum ValueType { enum ValueType {

View File

@ -7,16 +7,15 @@ import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { DataSource, FindOneOptions, In, Repository } from 'typeorm'; import { DataSource, FindOneOptions, In, Repository } from 'typeorm';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input';
import { DeleteOneFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/delete-field.input'; import { DeleteOneFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/delete-field.input';
import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input'; import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
FieldMetadataException, FieldMetadataException,
FieldMetadataExceptionCode, FieldMetadataExceptionCode,
@ -107,7 +106,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
{ workspaceId: fieldMetadataInput.workspaceId }, { workspaceId: fieldMetadataInput.workspaceId },
); );
let existingFieldMetadata: FieldMetadataInterface | undefined; let existingFieldMetadata: FieldMetadataEntity | undefined;
for (const objectMetadataItem of Object.values( for (const objectMetadataItem of Object.values(
objectMetadataMaps.byId, objectMetadataMaps.byId,

View File

@ -1,14 +1,13 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { FieldStandardOverridesDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-standard-overrides.dto'; import { FieldStandardOverridesDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-standard-overrides.dto';
import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input'; import { UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export const buildUpdatableStandardFieldInput = ( export const buildUpdatableStandardFieldInput = (
fieldMetadataInput: UpdateFieldInput, fieldMetadataInput: UpdateFieldInput,
existingFieldMetadata: Pick< existingFieldMetadata: Pick<
FieldMetadataInterface, FieldMetadataEntity,
'type' | 'isNullable' | 'defaultValue' | 'options' 'type' | 'isNullable' | 'defaultValue' | 'options'
>, >,
) => { ) => {

View File

@ -1,5 +1,4 @@
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
FieldMetadataException, FieldMetadataException,
FieldMetadataExceptionCode, FieldMetadataExceptionCode,
@ -7,10 +6,7 @@ import {
type CheckCanDeactivateFieldOptions = { type CheckCanDeactivateFieldOptions = {
labelIdentifierFieldMetadataId: string; labelIdentifierFieldMetadataId: string;
existingFieldMetadata: Pick< existingFieldMetadata: Pick<FieldMetadataEntity, 'id' | 'isSystem' | 'name'>;
FieldMetadataInterface,
'id' | 'isSystem' | 'name'
>;
}; };
export const checkCanDeactivateFieldOrThrow = ({ export const checkCanDeactivateFieldOrThrow = ({

View File

@ -1,8 +1,8 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { CompositeProperty } from 'src/engine/metadata-modules/field-metadata/interfaces/composite-type.interface'; import { CompositeProperty } from 'src/engine/metadata-modules/field-metadata/interfaces/composite-type.interface';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
FieldMetadataException, FieldMetadataException,
FieldMetadataExceptionCode, FieldMetadataExceptionCode,
@ -22,12 +22,12 @@ export function computeColumnName(
options?: ComputeColumnNameOptions, options?: ComputeColumnNameOptions,
): string; ): string;
export function computeColumnName<T extends FieldMetadataType>( export function computeColumnName<T extends FieldMetadataType>(
fieldMetadata: FieldMetadataInterface<T>, fieldMetadata: FieldMetadataEntity<T>,
ioptions?: ComputeColumnNameOptions, options?: ComputeColumnNameOptions,
): string; ): string;
// TODO: If we need to implement custom name logic for columns, we can do it here // TODO: If we need to implement custom name logic for columns, we can do it here
export function computeColumnName<T extends FieldMetadataType>( export function computeColumnName<T extends FieldMetadataType>(
fieldMetadataOrFieldName: FieldMetadataInterface<T> | string, fieldMetadataOrFieldName: FieldMetadataEntity<T> | string,
options?: ComputeColumnNameOptions, options?: ComputeColumnNameOptions,
): string { ): string {
const generateName = (name: string) => { const generateName = (name: string) => {
@ -52,13 +52,13 @@ export function computeCompositeColumnName(
compositeProperty: CompositeProperty, compositeProperty: CompositeProperty,
): string; ): string;
export function computeCompositeColumnName<T extends FieldMetadataType>( export function computeCompositeColumnName<T extends FieldMetadataType>(
fieldMetadata: FieldTypeAndNameMetadata | FieldMetadataInterface<T>, fieldMetadata: FieldTypeAndNameMetadata | FieldMetadataEntity<T>,
compositeProperty: CompositeProperty, compositeProperty: CompositeProperty,
): string; ): string;
export function computeCompositeColumnName<T extends FieldMetadataType>( export function computeCompositeColumnName<T extends FieldMetadataType>(
fieldMetadataOrFieldName: fieldMetadataOrFieldName:
| FieldTypeAndNameMetadata | FieldTypeAndNameMetadata
| FieldMetadataInterface<T> | FieldMetadataEntity<T>
| string, | string,
compositeProperty: CompositeProperty, compositeProperty: CompositeProperty,
): string { ): string {

View File

@ -1,15 +1,13 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export type SelectOrMultiSelectFieldMetadataEntity = FieldMetadataEntity< export type SelectOrMultiSelectFieldMetadataEntity = FieldMetadataEntity<
FieldMetadataType.SELECT | FieldMetadataType.MULTI_SELECT FieldMetadataType.SELECT | FieldMetadataType.MULTI_SELECT
>; >;
export const isSelectOrMultiSelectFieldMetadata = ( export const isSelectOrMultiSelectFieldMetadata = (
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
): fieldMetadata is FieldMetadataInterface & ): fieldMetadata is FieldMetadataEntity &
SelectOrMultiSelectFieldMetadataEntity => { SelectOrMultiSelectFieldMetadataEntity => {
return [FieldMetadataType.SELECT, FieldMetadataType.MULTI_SELECT].includes( return [FieldMetadataType.SELECT, FieldMetadataType.MULTI_SELECT].includes(
fieldMetadata.type, fieldMetadata.type,

View File

@ -1,11 +1,12 @@
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface'; import { IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export interface IndexFieldMetadataInterface { export interface IndexFieldMetadataInterface {
id: string; id: string;
indexMetadataId: string; indexMetadataId: string;
fieldMetadataId: string; fieldMetadataId: string;
fieldMetadata: FieldMetadataInterface; fieldMetadata: FieldMetadataEntity;
indexMetadata: IndexMetadataInterface; indexMetadata: IndexMetadataInterface;
order: number; order: number;
createdAt: Date; createdAt: Date;

View File

@ -22,7 +22,7 @@ import { WorkspaceMigrationFactory } from 'src/engine/metadata-modules/workspace
import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service'; import { WorkspaceMigrationService } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.service';
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
import { computeTableName } from 'src/engine/utils/compute-table-name.util'; import { computeTableName } from 'src/engine/utils/compute-table-name.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
import { RELATION_MIGRATION_PRIORITY_PREFIX } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service'; import { RELATION_MIGRATION_PRIORITY_PREFIX } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service';
@Injectable() @Injectable()
@ -244,8 +244,8 @@ export class ObjectMetadataMigrationService {
) { ) {
const relationFields = objectMetadata.fields.filter( const relationFields = objectMetadata.fields.filter(
(field) => (field) =>
isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION) || isFieldMetadataEntityOfType(field, FieldMetadataType.RELATION) ||
isFieldMetadataInterfaceOfType(field, FieldMetadataType.MORPH_RELATION), isFieldMetadataEntityOfType(field, FieldMetadataType.MORPH_RELATION),
) as FieldMetadataEntity< ) as FieldMetadataEntity<
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
>[]; >[];

View File

@ -1,3 +1,3 @@
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export type FieldMetadataMap = Record<string, FieldMetadataInterface>; export type FieldMetadataMap = Record<string, FieldMetadataEntity>;

View File

@ -6,7 +6,7 @@ import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metad
import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map'; import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
export const generateObjectMetadataMaps = ( export const generateObjectMetadataMaps = (
objectMetadataCollection: ObjectMetadataInterface[], objectMetadataCollection: ObjectMetadataInterface[],
@ -21,10 +21,7 @@ export const generateObjectMetadataMaps = (
for (const fieldMetadata of objectMetadata.fields) { for (const fieldMetadata of objectMetadata.fields) {
if ( if (
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(fieldMetadata, FieldMetadataType.RELATION)
fieldMetadata,
FieldMetadataType.RELATION,
)
) { ) {
if (fieldMetadata.settings?.joinColumnName) { if (fieldMetadata.settings?.joinColumnName) {
fieldIdByJoinColumnNameMap[fieldMetadata.settings.joinColumnName] = fieldIdByJoinColumnNameMap[fieldMetadata.settings.joinColumnName] =

View File

@ -3,8 +3,6 @@ import {
isLabelIdentifierFieldMetadataTypes, isLabelIdentifierFieldMetadataTypes,
} from 'twenty-shared/utils'; } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
ObjectMetadataException, ObjectMetadataException,
@ -14,14 +12,14 @@ import {
type Validator = { type Validator = {
validator: (args: { validator: (args: {
fieldMetadataId: string; fieldMetadataId: string;
matchingFieldMetadata?: FieldMetadataEntity | FieldMetadataInterface; matchingFieldMetadata?: FieldMetadataEntity;
}) => boolean; }) => boolean;
label: string; label: string;
}; };
type ValidateMetadataIdentifierFieldMetadataIdOrThrowArgs = { type ValidateMetadataIdentifierFieldMetadataIdOrThrowArgs = {
fieldMetadataId: string; fieldMetadataId: string;
fieldMetadataItems: FieldMetadataEntity[] | FieldMetadataInterface[]; fieldMetadataItems: FieldMetadataEntity[];
validators: Validator[]; validators: Validator[];
}; };
const validatorRunner = ({ const validatorRunner = ({
@ -46,7 +44,7 @@ const validatorRunner = ({
type ValidateMetadataIdentifierFieldMetadataIdsArgs = { type ValidateMetadataIdentifierFieldMetadataIdsArgs = {
labelIdentifierFieldMetadataId: string | undefined; labelIdentifierFieldMetadataId: string | undefined;
imageIdentifierFieldMetadataId: string | undefined; imageIdentifierFieldMetadataId: string | undefined;
fieldMetadataItems: FieldMetadataEntity[] | FieldMetadataInterface[]; fieldMetadataItems: FieldMetadataEntity[];
}; };
export const validateMetadataIdentifierFieldMetadataIds = ({ export const validateMetadataIdentifierFieldMetadataIds = ({
imageIdentifierFieldMetadataId, imageIdentifierFieldMetadataId,

View File

@ -2,9 +2,9 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-default-value'; import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-default-value';
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory'; import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
@ -36,7 +36,7 @@ export class BasicColumnActionFactory extends ColumnActionAbstractFactory<BasicF
protected readonly logger = new Logger(BasicColumnActionFactory.name); protected readonly logger = new Logger(BasicColumnActionFactory.name);
protected handleCreateAction( protected handleCreateAction(
fieldMetadata: FieldMetadataInterface<BasicFieldMetadataType>, fieldMetadata: FieldMetadataEntity<BasicFieldMetadataType>,
options?: WorkspaceColumnActionOptions, options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnCreate[] { ): WorkspaceMigrationColumnCreate[] {
const columnName = computeColumnName(fieldMetadata); const columnName = computeColumnName(fieldMetadata);
@ -57,8 +57,8 @@ export class BasicColumnActionFactory extends ColumnActionAbstractFactory<BasicF
} }
protected handleAlterAction( protected handleAlterAction(
currentFieldMetadata: FieldMetadataInterface<BasicFieldMetadataType>, currentFieldMetadata: FieldMetadataEntity<BasicFieldMetadataType>,
alteredFieldMetadata: FieldMetadataInterface<BasicFieldMetadataType>, alteredFieldMetadata: FieldMetadataEntity<BasicFieldMetadataType>,
options?: WorkspaceColumnActionOptions, options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAlter[] { ): WorkspaceMigrationColumnAlter[] {
const currentColumnName = computeColumnName(currentFieldMetadata); const currentColumnName = computeColumnName(currentFieldMetadata);

View File

@ -3,10 +3,10 @@ import { Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-factory.interface'; import { WorkspaceColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-factory.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
WorkspaceMigrationColumnAction, WorkspaceMigrationColumnAction,
WorkspaceMigrationColumnActionType, WorkspaceMigrationColumnActionType,
@ -27,8 +27,8 @@ export class ColumnActionAbstractFactory<T extends FieldMetadataType>
action: action:
| WorkspaceMigrationColumnActionType.CREATE | WorkspaceMigrationColumnActionType.CREATE
| WorkspaceMigrationColumnActionType.ALTER, | WorkspaceMigrationColumnActionType.ALTER,
currentFieldMetadata: FieldMetadataInterface<T> | undefined, currentFieldMetadata: FieldMetadataEntity<T> | undefined,
alteredFieldMetadata: FieldMetadataInterface<T>, alteredFieldMetadata: FieldMetadataEntity<T>,
options?: WorkspaceColumnActionOptions, options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAction[] { ): WorkspaceMigrationColumnAction[] {
switch (action) { switch (action) {
@ -59,7 +59,7 @@ export class ColumnActionAbstractFactory<T extends FieldMetadataType>
} }
protected handleCreateAction( protected handleCreateAction(
_fieldMetadata: FieldMetadataInterface<T>, _fieldMetadata: FieldMetadataEntity<T>,
_options?: WorkspaceColumnActionOptions, _options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnCreate[] { ): WorkspaceMigrationColumnCreate[] {
throw new WorkspaceMigrationException( throw new WorkspaceMigrationException(
@ -69,8 +69,8 @@ export class ColumnActionAbstractFactory<T extends FieldMetadataType>
} }
protected handleAlterAction( protected handleAlterAction(
_currentFieldMetadata: FieldMetadataInterface<T>, _currentFieldMetadata: FieldMetadataEntity<T>,
_alteredFieldMetadata: FieldMetadataInterface<T>, _alteredFieldMetadata: FieldMetadataEntity<T>,
_options?: WorkspaceColumnActionOptions, _options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAlter[] { ): WorkspaceMigrationColumnAlter[] {
throw new WorkspaceMigrationException( throw new WorkspaceMigrationException(

View File

@ -2,9 +2,8 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-default-value'; import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-default-value';
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory'; import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
@ -34,7 +33,7 @@ export class CompositeColumnActionFactory extends ColumnActionAbstractFactory<Co
protected readonly logger = new Logger(CompositeColumnActionFactory.name); protected readonly logger = new Logger(CompositeColumnActionFactory.name);
protected handleCreateAction( protected handleCreateAction(
fieldMetadata: FieldMetadataInterface<CompositeFieldMetadataType>, fieldMetadata: FieldMetadataEntity<CompositeFieldMetadataType>,
): WorkspaceMigrationColumnCreate[] { ): WorkspaceMigrationColumnCreate[] {
const compositeType = compositeTypeDefinitions.get(fieldMetadata.type); const compositeType = compositeTypeDefinitions.get(fieldMetadata.type);
@ -83,8 +82,8 @@ export class CompositeColumnActionFactory extends ColumnActionAbstractFactory<Co
} }
protected handleAlterAction( protected handleAlterAction(
currentFieldMetadata: FieldMetadataInterface<CompositeFieldMetadataType>, currentFieldMetadata: FieldMetadataEntity<CompositeFieldMetadataType>,
alteredFieldMetadata: FieldMetadataInterface<CompositeFieldMetadataType>, alteredFieldMetadata: FieldMetadataEntity<CompositeFieldMetadataType>,
): WorkspaceMigrationColumnAlter[] { ): WorkspaceMigrationColumnAlter[] {
const currentCompositeType = compositeTypeDefinitions.get( const currentCompositeType = compositeTypeDefinitions.get(
currentFieldMetadata.type, currentFieldMetadata.type,

View File

@ -2,9 +2,9 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-default-value'; import { serializeDefaultValue } from 'src/engine/metadata-modules/field-metadata/utils/serialize-default-value';
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory'; import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
@ -29,7 +29,7 @@ export class EnumColumnActionFactory extends ColumnActionAbstractFactory<EnumFie
protected readonly logger = new Logger(EnumColumnActionFactory.name); protected readonly logger = new Logger(EnumColumnActionFactory.name);
protected handleCreateAction( protected handleCreateAction(
fieldMetadata: FieldMetadataInterface<EnumFieldMetadataType>, fieldMetadata: FieldMetadataEntity<EnumFieldMetadataType>,
options: WorkspaceColumnActionOptions, options: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnCreate[] { ): WorkspaceMigrationColumnCreate[] {
const columnName = computeColumnName(fieldMetadata); const columnName = computeColumnName(fieldMetadata);
@ -54,8 +54,8 @@ export class EnumColumnActionFactory extends ColumnActionAbstractFactory<EnumFie
} }
protected handleAlterAction( protected handleAlterAction(
currentFieldMetadata: FieldMetadataInterface<EnumFieldMetadataType>, currentFieldMetadata: FieldMetadataEntity<EnumFieldMetadataType>,
alteredFieldMetadata: FieldMetadataInterface<EnumFieldMetadataType>, alteredFieldMetadata: FieldMetadataEntity<EnumFieldMetadataType>,
options: WorkspaceColumnActionOptions, options: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAlter[] { ): WorkspaceMigrationColumnAlter[] {
const currentColumnName = computeColumnName(currentFieldMetadata); const currentColumnName = computeColumnName(currentFieldMetadata);

View File

@ -2,10 +2,10 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory'; import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util';
import { import {
@ -23,7 +23,7 @@ export class MorphRelationColumnActionFactory extends ColumnActionAbstractFactor
protected readonly logger = new Logger(MorphRelationColumnActionFactory.name); protected readonly logger = new Logger(MorphRelationColumnActionFactory.name);
protected handleCreateAction( protected handleCreateAction(
fieldMetadata: FieldMetadataInterface<FieldMetadataType.MORPH_RELATION>, fieldMetadata: FieldMetadataEntity<FieldMetadataType.MORPH_RELATION>,
_options?: WorkspaceColumnActionOptions, _options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnCreate[] { ): WorkspaceMigrationColumnCreate[] {
if (!fieldMetadata.settings || !fieldMetadata.settings.joinColumnName) { if (!fieldMetadata.settings || !fieldMetadata.settings.joinColumnName) {
@ -46,8 +46,8 @@ export class MorphRelationColumnActionFactory extends ColumnActionAbstractFactor
} }
protected handleAlterAction( protected handleAlterAction(
currentFieldMetadata: FieldMetadataInterface<FieldMetadataType.MORPH_RELATION>, currentFieldMetadata: FieldMetadataEntity<FieldMetadataType.MORPH_RELATION>,
alteredFieldMetadata: FieldMetadataInterface<FieldMetadataType.MORPH_RELATION>, alteredFieldMetadata: FieldMetadataEntity<FieldMetadataType.MORPH_RELATION>,
_options?: WorkspaceColumnActionOptions, _options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAlter[] { ): WorkspaceMigrationColumnAlter[] {
if (!currentFieldMetadata.settings || !alteredFieldMetadata.settings) { if (!currentFieldMetadata.settings || !alteredFieldMetadata.settings) {

View File

@ -2,10 +2,10 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory'; import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util';
import { import {
@ -23,7 +23,7 @@ export class RelationColumnActionFactory extends ColumnActionAbstractFactory<Fie
protected readonly logger = new Logger(RelationColumnActionFactory.name); protected readonly logger = new Logger(RelationColumnActionFactory.name);
protected handleCreateAction( protected handleCreateAction(
fieldMetadata: FieldMetadataInterface<FieldMetadataType.RELATION>, fieldMetadata: FieldMetadataEntity<FieldMetadataType.RELATION>,
_options?: WorkspaceColumnActionOptions, _options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnCreate[] { ): WorkspaceMigrationColumnCreate[] {
if (!fieldMetadata.settings || !fieldMetadata.settings.joinColumnName) { if (!fieldMetadata.settings || !fieldMetadata.settings.joinColumnName) {
@ -46,8 +46,8 @@ export class RelationColumnActionFactory extends ColumnActionAbstractFactory<Fie
} }
protected handleAlterAction( protected handleAlterAction(
currentFieldMetadata: FieldMetadataInterface<FieldMetadataType.RELATION>, currentFieldMetadata: FieldMetadataEntity<FieldMetadataType.RELATION>,
alteredFieldMetadata: FieldMetadataInterface<FieldMetadataType.RELATION>, alteredFieldMetadata: FieldMetadataEntity<FieldMetadataType.RELATION>,
_options?: WorkspaceColumnActionOptions, _options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAlter[] { ): WorkspaceMigrationColumnAlter[] {
if (!currentFieldMetadata.settings || !alteredFieldMetadata.settings) { if (!currentFieldMetadata.settings || !alteredFieldMetadata.settings) {

View File

@ -2,8 +2,7 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { computeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory'; import { ColumnActionAbstractFactory } from 'src/engine/metadata-modules/workspace-migration/factories/column-action-abstract.factory';
import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util';
@ -14,7 +13,7 @@ import {
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
export type TsVectorFieldMetadata = export type TsVectorFieldMetadata =
FieldMetadataInterface<FieldMetadataType.TS_VECTOR> & { FieldMetadataEntity<FieldMetadataType.TS_VECTOR> & {
generatedType?: 'STORED' | 'VIRTUAL'; generatedType?: 'STORED' | 'VIRTUAL';
asExpression?: string; asExpression?: string;
}; };

View File

@ -1,8 +1,8 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
WorkspaceMigrationColumnAction, WorkspaceMigrationColumnAction,
WorkspaceMigrationColumnActionType, WorkspaceMigrationColumnActionType,
@ -13,8 +13,8 @@ export interface WorkspaceColumnActionFactory<T extends FieldMetadataType> {
action: action:
| WorkspaceMigrationColumnActionType.CREATE | WorkspaceMigrationColumnActionType.CREATE
| WorkspaceMigrationColumnActionType.ALTER, | WorkspaceMigrationColumnActionType.ALTER,
currentFieldMetadata: FieldMetadataInterface<T> | undefined, currentFieldMetadata: FieldMetadataEntity<T> | undefined,
alteredFieldMetadata: FieldMetadataInterface<T>, alteredFieldMetadata: FieldMetadataEntity<T>,
options?: WorkspaceColumnActionOptions, options?: WorkspaceColumnActionOptions,
): WorkspaceMigrationColumnAction[]; ): WorkspaceMigrationColumnAction[];
} }

View File

@ -2,10 +2,10 @@ import { Injectable, Logger } from '@nestjs/common';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-factory.interface'; import { WorkspaceColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-factory.interface';
import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface'; import { WorkspaceColumnActionOptions } from 'src/engine/metadata-modules/workspace-migration/interfaces/workspace-column-action-options.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { BasicColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/basic-column-action.factory'; import { BasicColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/basic-column-action.factory';
import { CompositeColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory'; import { CompositeColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory';
import { EnumColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/enum-column-action.factory'; import { EnumColumnActionFactory } from 'src/engine/metadata-modules/workspace-migration/factories/enum-column-action.factory';
@ -120,18 +120,18 @@ export class WorkspaceMigrationFactory {
createColumnActions<T extends FieldMetadataType = FieldMetadataType>( createColumnActions<T extends FieldMetadataType = FieldMetadataType>(
action: WorkspaceMigrationColumnActionType.CREATE, action: WorkspaceMigrationColumnActionType.CREATE,
fieldMetadata: FieldMetadataInterface<T>, fieldMetadata: FieldMetadataEntity<T>,
): WorkspaceMigrationColumnAction[]; ): WorkspaceMigrationColumnAction[];
createColumnActions( createColumnActions(
action: WorkspaceMigrationColumnActionType.ALTER, action: WorkspaceMigrationColumnActionType.ALTER,
currentFieldMetadata: FieldMetadataInterface, currentFieldMetadata: FieldMetadataEntity,
alteredFieldMetadata: FieldMetadataInterface, alteredFieldMetadata: FieldMetadataEntity,
): WorkspaceMigrationColumnAction[]; ): WorkspaceMigrationColumnAction[];
createColumnActions( createColumnActions(
action: WorkspaceMigrationColumnActionType.ALTER, action: WorkspaceMigrationColumnActionType.ALTER,
currentFieldMetadata: FieldMetadataInterface, currentFieldMetadata: FieldMetadataEntity,
alteredFieldMetadata: TsVectorFieldMetadata, alteredFieldMetadata: TsVectorFieldMetadata,
): WorkspaceMigrationColumnAction[]; ): WorkspaceMigrationColumnAction[];
@ -139,8 +139,8 @@ export class WorkspaceMigrationFactory {
action: action:
| WorkspaceMigrationColumnActionType.CREATE | WorkspaceMigrationColumnActionType.CREATE
| WorkspaceMigrationColumnActionType.ALTER, | WorkspaceMigrationColumnActionType.ALTER,
fieldMetadataOrCurrentFieldMetadata: FieldMetadataInterface, fieldMetadataOrCurrentFieldMetadata: FieldMetadataEntity,
undefinedOrAlteredFieldMetadata?: FieldMetadataInterface, undefinedOrAlteredFieldMetadata?: FieldMetadataEntity,
): WorkspaceMigrationColumnAction[] { ): WorkspaceMigrationColumnAction[] {
const currentFieldMetadata = const currentFieldMetadata =
action === WorkspaceMigrationColumnActionType.ALTER action === WorkspaceMigrationColumnActionType.ALTER
@ -176,8 +176,8 @@ export class WorkspaceMigrationFactory {
action: action:
| WorkspaceMigrationColumnActionType.CREATE | WorkspaceMigrationColumnActionType.CREATE
| WorkspaceMigrationColumnActionType.ALTER, | WorkspaceMigrationColumnActionType.ALTER,
currentFieldMetadata: FieldMetadataInterface | undefined, currentFieldMetadata: FieldMetadataEntity | undefined,
alteredFieldMetadata: FieldMetadataInterface, alteredFieldMetadata: FieldMetadataEntity,
): WorkspaceMigrationColumnAction[] { ): WorkspaceMigrationColumnAction[] {
const { factory, options } = const { factory, options } =
this.factoriesMap.get(alteredFieldMetadata.type) ?? {}; this.factoriesMap.get(alteredFieldMetadata.type) ?? {};

View File

@ -1,6 +1,6 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export type UniqueFieldCondition = [field: string, value: string]; export type UniqueFieldCondition = [field: string, value: string];
@ -11,7 +11,7 @@ export type RelationConnectQueryConfig = {
recordToConnectConditions: UniqueConstraintCondition[]; recordToConnectConditions: UniqueConstraintCondition[];
relationFieldName: string; relationFieldName: string;
connectFieldName: string; connectFieldName: string;
uniqueConstraintFields: FieldMetadataInterface<FieldMetadataType>[]; uniqueConstraintFields: FieldMetadataEntity<FieldMetadataType>[];
recordToConnectConditionByEntityIndex: { recordToConnectConditionByEntityIndex: {
[entityIndex: number]: UniqueConstraintCondition; [entityIndex: number]: UniqueConstraintCondition;
}; };

View File

@ -4,10 +4,10 @@ import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { ColumnType, EntitySchemaColumnOptions } from 'typeorm'; import { ColumnType, EntitySchemaColumnOptions } from 'typeorm';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { isEnumFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-enum-field-metadata-type.util'; import { isEnumFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-enum-field-metadata-type.util';
@ -18,7 +18,7 @@ import {
TwentyORMException, TwentyORMException,
TwentyORMExceptionCode, TwentyORMExceptionCode,
} from 'src/engine/twenty-orm/exceptions/twenty-orm.exception'; } from 'src/engine/twenty-orm/exceptions/twenty-orm.exception';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
type EntitySchemaColumnMap = { type EntitySchemaColumnMap = {
[key: string]: EntitySchemaColumnOptions; [key: string]: EntitySchemaColumnOptions;
@ -39,11 +39,11 @@ export class EntitySchemaColumnFactory {
const key = fieldMetadata.name; const key = fieldMetadata.name;
const isRelation = const isRelation =
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.RELATION, FieldMetadataType.RELATION,
) || ) ||
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.MORPH_RELATION, FieldMetadataType.MORPH_RELATION,
); );
@ -113,7 +113,7 @@ export class EntitySchemaColumnFactory {
} }
private createCompositeColumns( private createCompositeColumns(
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
): EntitySchemaColumnMap { ): EntitySchemaColumnMap {
const entitySchemaColumnMap: EntitySchemaColumnMap = {}; const entitySchemaColumnMap: EntitySchemaColumnMap = {};
const compositeType = compositeTypeDefinitions.get(fieldMetadata.type); const compositeType = compositeTypeDefinitions.get(fieldMetadata.type);

View File

@ -6,7 +6,7 @@ import { EntitySchemaRelationOptions } from 'typeorm';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { determineSchemaRelationDetails } from 'src/engine/twenty-orm/utils/determine-schema-relation-details.util'; import { determineSchemaRelationDetails } from 'src/engine/twenty-orm/utils/determine-schema-relation-details.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
type EntitySchemaRelationMap = { type EntitySchemaRelationMap = {
[key: string]: EntitySchemaRelationOptions; [key: string]: EntitySchemaRelationOptions;
@ -28,11 +28,11 @@ export class EntitySchemaRelationFactory {
for (const fieldMetadata of fieldMetadataCollection) { for (const fieldMetadata of fieldMetadataCollection) {
const isRelation = const isRelation =
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.RELATION, FieldMetadataType.RELATION,
) || ) ||
isFieldMetadataInterfaceOfType( isFieldMetadataEntityOfType(
fieldMetadata, fieldMetadata,
FieldMetadataType.MORPH_RELATION, FieldMetadataType.MORPH_RELATION,
); );

View File

@ -3,10 +3,10 @@ import deepEqual from 'deep-equal';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { getUniqueConstraintsFields, isDefined } from 'twenty-shared/utils'; import { getUniqueConstraintsFields, isDefined } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
@ -21,7 +21,7 @@ import {
} from 'src/engine/twenty-orm/exceptions/twenty-orm.exception'; } from 'src/engine/twenty-orm/exceptions/twenty-orm.exception';
import { formatCompositeField } from 'src/engine/twenty-orm/utils/format-data.util'; import { formatCompositeField } from 'src/engine/twenty-orm/utils/format-data.util';
import { getAssociatedRelationFieldName } from 'src/engine/twenty-orm/utils/get-associated-relation-field-name.util'; import { getAssociatedRelationFieldName } from 'src/engine/twenty-orm/utils/get-associated-relation-field-name.util';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
export const computeRelationConnectQueryConfigs = ( export const computeRelationConnectQueryConfigs = (
entities: Record<string, unknown>[], entities: Record<string, unknown>[],
@ -101,7 +101,7 @@ const updateConnectQueryConfigs = (
const createConnectQueryConfig = ( const createConnectQueryConfig = (
connectFieldName: string, connectFieldName: string,
recordToConnectCondition: UniqueConstraintCondition, recordToConnectCondition: UniqueConstraintCondition,
uniqueConstraintFields: FieldMetadataInterface<FieldMetadataType>[], uniqueConstraintFields: FieldMetadataEntity<FieldMetadataType>[],
targetObjectNameSingular: string, targetObjectNameSingular: string,
entityIndex: number, entityIndex: number,
) => { ) => {
@ -125,14 +125,14 @@ const computeRecordToConnectCondition = (
entity: Record<string, unknown>, entity: Record<string, unknown>,
): { ): {
recordToConnectCondition: UniqueConstraintCondition; recordToConnectCondition: UniqueConstraintCondition;
uniqueConstraintFields: FieldMetadataInterface<FieldMetadataType>[]; uniqueConstraintFields: FieldMetadataEntity<FieldMetadataType>[];
targetObjectNameSingular: string; targetObjectNameSingular: string;
} => { } => {
const field = const field =
objectMetadata.fieldsById[objectMetadata.fieldIdByName[connectFieldName]]; objectMetadata.fieldsById[objectMetadata.fieldIdByName[connectFieldName]];
if ( if (
!isFieldMetadataInterfaceOfType(field, FieldMetadataType.RELATION) || !isFieldMetadataEntityOfType(field, FieldMetadataType.RELATION) ||
field.settings?.relationType !== RelationType.MANY_TO_ONE field.settings?.relationType !== RelationType.MANY_TO_ONE
) { ) {
const objectMetadataNameSingular = objectMetadata.nameSingular; const objectMetadataNameSingular = objectMetadata.nameSingular;
@ -239,7 +239,7 @@ const checkUniqueConstraintFullyPopulated = (
connectFieldName: string, connectFieldName: string,
) => { ) => {
const uniqueConstraintsFields = getUniqueConstraintsFields< const uniqueConstraintsFields = getUniqueConstraintsFields<
FieldMetadataInterface, FieldMetadataEntity,
ObjectMetadataInterface ObjectMetadataInterface
>({ >({
...objectMetadata, ...objectMetadata,
@ -298,7 +298,7 @@ const checkNoRelationFieldConflictOrThrow = (
}; };
const computeUniqueConstraintCondition = ( const computeUniqueConstraintCondition = (
uniqueConstraintFields: FieldMetadataInterface<FieldMetadataType>[], uniqueConstraintFields: FieldMetadataEntity<FieldMetadataType>[],
connectObject: ConnectObject, connectObject: ConnectObject,
): UniqueConstraintCondition => { ): UniqueConstraintCondition => {
return uniqueConstraintFields.reduce((acc, uniqueConstraintField) => { return uniqueConstraintFields.reduce((acc, uniqueConstraintField) => {
@ -326,7 +326,7 @@ const computeUniqueConstraintCondition = (
const checkUniqueConstraintsAreSameOrThrow = ( const checkUniqueConstraintsAreSameOrThrow = (
relationConnectQueryConfig: RelationConnectQueryConfig, relationConnectQueryConfig: RelationConnectQueryConfig,
uniqueConstraintFields: FieldMetadataInterface<FieldMetadataType>[], uniqueConstraintFields: FieldMetadataEntity<FieldMetadataType>[],
) => { ) => {
if ( if (
!deepEqual( !deepEqual(

View File

@ -1,8 +1,7 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { RelationType } from 'typeorm/metadata/types/RelationTypes'; import { RelationType } from 'typeorm/metadata/types/RelationTypes';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { import {
RelationException, RelationException,
@ -18,7 +17,7 @@ interface RelationDetails {
} }
export async function determineSchemaRelationDetails( export async function determineSchemaRelationDetails(
fieldMetadata: FieldMetadataInterface< fieldMetadata: FieldMetadataEntity<
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
>, >,
objectMetadataMaps: ObjectMetadataMaps, objectMetadataMaps: ObjectMetadataMaps,

View File

@ -1,9 +1,8 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { capitalize } from 'twenty-shared/utils'; import { capitalize } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory'; import { CompositeFieldMetadataType } from 'src/engine/metadata-modules/workspace-migration/factories/composite-column-action.factory';
@ -57,7 +56,7 @@ export function formatData<T>(
export function formatCompositeField( export function formatCompositeField(
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
value: any, value: any,
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
): Record<string, any> { ): Record<string, any> {
const compositeType = compositeTypeDefinitions.get( const compositeType = compositeTypeDefinitions.get(
@ -80,7 +79,7 @@ export function formatCompositeField(
if (value && value[subFieldKey] !== undefined) { if (value && value[subFieldKey] !== undefined) {
formattedCompositeField[fullFieldName] = formatFieldMetadataValue( formattedCompositeField[fullFieldName] = formatFieldMetadataValue(
value[subFieldKey], value[subFieldKey],
property as unknown as FieldMetadataInterface, property as unknown as FieldMetadataEntity,
); );
} }
} }
@ -91,7 +90,7 @@ export function formatCompositeField(
function formatFieldMetadataValue( function formatFieldMetadataValue(
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
value: any, value: any,
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
) { ) {
if ( if (
fieldMetadata.type === FieldMetadataType.RAW_JSON && fieldMetadata.type === FieldMetadataType.RAW_JSON &&

View File

@ -4,14 +4,13 @@ import { isNonEmptyString } from '@sniptt/guards';
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils'; import { isDefined } from 'twenty-shared/utils';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps'; import { ObjectMetadataItemWithFieldMaps } from 'src/engine/metadata-modules/types/object-metadata-item-with-field-maps';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps'; import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
import { getCompositeFieldMetadataCollection } from 'src/engine/twenty-orm/utils/get-composite-field-metadata-collection'; import { getCompositeFieldMetadataCollection } from 'src/engine/twenty-orm/utils/get-composite-field-metadata-collection';
import { isFieldMetadataInterfaceOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util';
import { isDate } from 'src/utils/date/isDate'; import { isDate } from 'src/utils/date/isDate';
import { isValidDate } from 'src/utils/date/isValidDate'; import { isValidDate } from 'src/utils/date/isValidDate';
@ -52,13 +51,10 @@ export function formatResult<T>(
const fieldMetadata = objectMetadataItemWithFieldMaps.fieldsById[ const fieldMetadata = objectMetadataItemWithFieldMaps.fieldsById[
fieldMetadataId fieldMetadataId
] as FieldMetadataInterface<FieldMetadataType> | undefined; ] as FieldMetadataEntity<FieldMetadataType> | undefined;
const isRelation = fieldMetadata const isRelation = fieldMetadata
? isFieldMetadataInterfaceOfType( ? isFieldMetadataEntityOfType(fieldMetadata, FieldMetadataType.RELATION)
fieldMetadata,
FieldMetadataType.RELATION,
)
: false; : false;
if (!compositePropertyArgs && !isRelation) { if (!compositePropertyArgs && !isRelation) {
@ -204,7 +200,7 @@ export function getCompositeFieldMetadataMap(
function formatFieldMetadataValue( function formatFieldMetadataValue(
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
value: any, value: any,
fieldMetadata: FieldMetadataInterface, fieldMetadata: FieldMetadataEntity,
) { ) {
if ( if (
typeof value === 'string' && typeof value === 'string' &&

View File

@ -1,19 +1,7 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
export function isFieldMetadataInterfaceOfType<
Field extends FieldMetadataInterface<FieldMetadataType>,
Type extends FieldMetadataType,
>(
fieldMetadata: Pick<Field, 'type'>,
type: Type,
): fieldMetadata is Field & FieldMetadataInterface<Type> {
return fieldMetadata.type === type;
}
export function isFieldMetadataEntityOfType< export function isFieldMetadataEntityOfType<
Field extends FieldMetadataEntity<FieldMetadataType>, Field extends FieldMetadataEntity<FieldMetadataType>,
Type extends FieldMetadataType, Type extends FieldMetadataType,

View File

@ -1,15 +1,15 @@
import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataType } from 'twenty-shared/types';
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
import { WorkspaceDynamicRelationMetadataArgsFactory } from 'src/engine/twenty-orm/interfaces/workspace-dynamic-relation-metadata-args.interface'; import { WorkspaceDynamicRelationMetadataArgsFactory } from 'src/engine/twenty-orm/interfaces/workspace-dynamic-relation-metadata-args.interface';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
// Should get deprecated in favor of the FlatFieldMetadata // Should get deprecated in favor of the FlatFieldMetadata
export type PartialFieldMetadata< export type PartialFieldMetadata<
T extends FieldMetadataType = FieldMetadataType, T extends FieldMetadataType = FieldMetadataType,
> = Omit< > = Omit<
FieldMetadataInterface<T>, FieldMetadataEntity<T>,
| 'id' | 'id'
| 'label' | 'label'
| 'description' | 'description'