Remove old relations (#11993)
This is a first PR to remove old relation logic Next steps: - remove relationMetadata from cache - remove relationMetadata table content and structure - refactor relationDefinition to leverage field.settings instead
This commit is contained in:
@ -1,3 +1 @@
|
||||
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
||||
|
||||
export const DEFAULT_FEATURE_FLAGS = [FeatureFlagKey.IsNewRelationEnabled];
|
||||
export const DEFAULT_FEATURE_FLAGS = [];
|
||||
|
||||
@ -13,11 +13,8 @@ import {
|
||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface';
|
||||
import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
|
||||
|
||||
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
||||
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
|
||||
import { metadataArgsStorage } from 'src/engine/twenty-orm/storage/metadata-args.storage';
|
||||
import { getJoinColumn } from 'src/engine/twenty-orm/utils/get-join-column.util';
|
||||
import { createDeterministicUuid } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
|
||||
import { isGatedAndNotEnabled } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/is-gate-and-not-enabled.util';
|
||||
|
||||
@Injectable()
|
||||
@ -169,21 +166,7 @@ export class StandardFieldFactory {
|
||||
workspaceRelationMetadataArgs: WorkspaceRelationMetadataArgs,
|
||||
context: WorkspaceSyncContext,
|
||||
): PartialFieldMetadata[] {
|
||||
const isNewRelationEnabled =
|
||||
context.featureFlags[FeatureFlagKey.IsNewRelationEnabled];
|
||||
|
||||
const fieldMetadataCollection: PartialFieldMetadata[] = [];
|
||||
const foreignKeyStandardId = createDeterministicUuid(
|
||||
workspaceRelationMetadataArgs.standardId,
|
||||
);
|
||||
const joinColumnMetadataArgsCollection =
|
||||
metadataArgsStorage.filterJoinColumns(
|
||||
workspaceRelationMetadataArgs.target,
|
||||
);
|
||||
const joinColumn = getJoinColumn(
|
||||
joinColumnMetadataArgsCollection,
|
||||
workspaceRelationMetadataArgs,
|
||||
);
|
||||
|
||||
if (
|
||||
isGatedAndNotEnabled(
|
||||
@ -194,28 +177,6 @@ export class StandardFieldFactory {
|
||||
return [];
|
||||
}
|
||||
|
||||
// We don't want to create the join column field metadata for new relation
|
||||
if (!isNewRelationEnabled && joinColumn) {
|
||||
fieldMetadataCollection.push({
|
||||
type: FieldMetadataType.UUID,
|
||||
standardId: foreignKeyStandardId,
|
||||
name: joinColumn,
|
||||
label: `${workspaceRelationMetadataArgs.label} id (foreign key)`,
|
||||
description: `${workspaceRelationMetadataArgs.description} id foreign key`,
|
||||
icon: workspaceRelationMetadataArgs.icon,
|
||||
defaultValue: null,
|
||||
options: undefined,
|
||||
settings: undefined,
|
||||
workspaceId: context.workspaceId,
|
||||
isCustom: false,
|
||||
isSystem: true,
|
||||
isNullable: workspaceRelationMetadataArgs.isNullable,
|
||||
isUnique:
|
||||
workspaceRelationMetadataArgs.type === RelationType.ONE_TO_ONE,
|
||||
isActive: workspaceRelationMetadataArgs.isActive ?? true,
|
||||
});
|
||||
}
|
||||
|
||||
fieldMetadataCollection.push({
|
||||
type: FieldMetadataType.RELATION,
|
||||
standardId: workspaceRelationMetadataArgs.standardId,
|
||||
|
||||
@ -17,7 +17,6 @@ import { PartialFieldMetadata } from 'src/engine/workspace-manager/workspace-syn
|
||||
import { PartialIndexMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-index-metadata.interface';
|
||||
import { UpdaterOptions } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/updater-options.interface';
|
||||
|
||||
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 { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types';
|
||||
import { FieldMetadataComplexOption } from 'src/engine/metadata-modules/field-metadata/dtos/options.input';
|
||||
@ -369,15 +368,6 @@ export class WorkspaceMetadataUpdaterService {
|
||||
createdIndexMetadataCollection: IndexMetadataEntity[];
|
||||
}> {
|
||||
const indexMetadataRepository = manager.getRepository(IndexMetadataEntity);
|
||||
const workspaceId = originalObjectMetadataCollection?.[0]?.workspaceId;
|
||||
let isNewRelationEnabled = false;
|
||||
|
||||
if (workspaceId) {
|
||||
isNewRelationEnabled = await this.featureFlagService.isFeatureEnabled(
|
||||
FeatureFlagKey.IsNewRelationEnabled,
|
||||
workspaceId,
|
||||
);
|
||||
}
|
||||
|
||||
const convertIndexMetadataForSaving = (
|
||||
indexMetadata: PartialIndexMetadata,
|
||||
@ -391,7 +381,6 @@ export class WorkspaceMetadataUpdaterService {
|
||||
.find((object) => object.id === indexMetadata.objectMetadataId)
|
||||
?.fields.find((field) => {
|
||||
if (
|
||||
isNewRelationEnabled &&
|
||||
isFieldMetadataEntityOfType(field, FieldMetadataType.RELATION)
|
||||
) {
|
||||
if (field.settings?.joinColumnName === column) {
|
||||
|
||||
@ -1,5 +1,3 @@
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
|
||||
import {
|
||||
ComputedPartialFieldMetadata,
|
||||
PartialComputedFieldMetadata,
|
||||
@ -7,12 +5,8 @@ import {
|
||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface';
|
||||
import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
|
||||
|
||||
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import {
|
||||
createForeignKeyDeterministicUuid,
|
||||
createRelationDeterministicUuid,
|
||||
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
|
||||
import { createRelationDeterministicUuid } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
|
||||
|
||||
export const computeStandardFields = (
|
||||
context: WorkspaceSyncContext,
|
||||
@ -25,9 +19,6 @@ export const computeStandardFields = (
|
||||
): ComputedPartialFieldMetadata[] => {
|
||||
const fields: ComputedPartialFieldMetadata[] = [];
|
||||
|
||||
const isNewRelationEnabled =
|
||||
context.featureFlags[FeatureFlagKey.IsNewRelationEnabled];
|
||||
|
||||
for (const partialFieldMetadata of standardFieldMetadataCollection) {
|
||||
// Relation from standard object to custom object
|
||||
if ('argsFactory' in partialFieldMetadata) {
|
||||
@ -39,10 +30,6 @@ export const computeStandardFields = (
|
||||
objectId: customObjectMetadata.id,
|
||||
standardId: data.standardId,
|
||||
});
|
||||
const foreignKeyStandardId = createForeignKeyDeterministicUuid({
|
||||
objectId: customObjectMetadata.id,
|
||||
standardId: data.standardId,
|
||||
});
|
||||
|
||||
if (!joinColumn) {
|
||||
throw new Error(
|
||||
@ -57,23 +44,6 @@ export const computeStandardFields = (
|
||||
standardId: relationStandardId,
|
||||
defaultValue: null,
|
||||
});
|
||||
|
||||
// Only add foreign key if new relation is disabled
|
||||
// As new relation will no longer create the field metadata related to foreign key
|
||||
if (!isNewRelationEnabled) {
|
||||
// Foreign key
|
||||
fields.push({
|
||||
...rest,
|
||||
standardId: foreignKeyStandardId,
|
||||
name: joinColumn,
|
||||
type: FieldMetadataType.UUID,
|
||||
label: `${data.label} ID (foreign key)`,
|
||||
description: `${data.description} id foreign key`,
|
||||
defaultValue: null,
|
||||
icon: undefined,
|
||||
isSystem: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Relation from standard object to standard object
|
||||
|
||||
@ -5,7 +5,6 @@ import { DataSource, QueryFailedError } from 'typeorm';
|
||||
|
||||
import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
|
||||
|
||||
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 { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service';
|
||||
import {
|
||||
@ -70,12 +69,6 @@ export class WorkspaceSyncMetadataService {
|
||||
const manager = queryRunner.manager;
|
||||
|
||||
try {
|
||||
const isNewRelationEnabled =
|
||||
await this.featureFlagService.isFeatureEnabled(
|
||||
FeatureFlagKey.IsNewRelationEnabled,
|
||||
context.workspaceId,
|
||||
);
|
||||
|
||||
const workspaceMigrationRepository = manager.getRepository(
|
||||
WorkspaceMigrationEntity,
|
||||
);
|
||||
@ -127,21 +120,12 @@ export class WorkspaceSyncMetadataService {
|
||||
|
||||
let workspaceRelationMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||
|
||||
if (isNewRelationEnabled) {
|
||||
workspaceRelationMigrations =
|
||||
await this.workspaceSyncFieldMetadataRelationService.synchronize(
|
||||
context,
|
||||
manager,
|
||||
storage,
|
||||
);
|
||||
} else {
|
||||
workspaceRelationMigrations =
|
||||
await this.workspaceSyncRelationMetadataService.synchronize(
|
||||
context,
|
||||
manager,
|
||||
storage,
|
||||
);
|
||||
}
|
||||
workspaceRelationMigrations =
|
||||
await this.workspaceSyncFieldMetadataRelationService.synchronize(
|
||||
context,
|
||||
manager,
|
||||
storage,
|
||||
);
|
||||
|
||||
const workspaceRelationMigrationsEnd = performance.now();
|
||||
|
||||
@ -149,24 +133,22 @@ export class WorkspaceSyncMetadataService {
|
||||
`Workspace relation migrations took ${workspaceRelationMigrationsEnd - workspaceRelationMigrationsStart}ms`,
|
||||
);
|
||||
|
||||
let workspaceIndexMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||
const workspaceIndexMigrations: Partial<WorkspaceMigrationEntity>[] = [];
|
||||
|
||||
// 4 - Sync standard indexes on standard objects
|
||||
if (!isNewRelationEnabled) {
|
||||
const workspaceIndexMigrationsStart = performance.now();
|
||||
const workspaceIndexMigrationsStart = performance.now();
|
||||
|
||||
workspaceIndexMigrations =
|
||||
await this.workspaceSyncIndexMetadataService.synchronize(
|
||||
context,
|
||||
manager,
|
||||
storage,
|
||||
);
|
||||
const workspaceIndexMigrationsEnd = performance.now();
|
||||
// workspaceIndexMigrations =
|
||||
// await this.workspaceSyncIndexMetadataService.synchronize(
|
||||
// context,
|
||||
// manager,
|
||||
// storage,
|
||||
// );
|
||||
const workspaceIndexMigrationsEnd = performance.now();
|
||||
|
||||
this.logger.log(
|
||||
`Workspace index migrations took ${workspaceIndexMigrationsEnd - workspaceIndexMigrationsStart}ms`,
|
||||
);
|
||||
}
|
||||
this.logger.log(
|
||||
`Workspace index migrations took ${workspaceIndexMigrationsEnd - workspaceIndexMigrationsStart}ms`,
|
||||
);
|
||||
|
||||
// 5 - Sync standard object metadata identifiers, does not need to return nor apply migrations
|
||||
const workspaceObjectMetadataIdentifiersStart = performance.now();
|
||||
|
||||
Reference in New Issue
Block a user