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:
Charles Bochet
2025-05-13 11:28:22 +02:00
committed by GitHub
parent 9ed6edc005
commit 45d4845b26
63 changed files with 223 additions and 2016 deletions

View File

@ -9,7 +9,6 @@ import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
import { TypeORMModule } from 'src/database/typeorm/typeorm.module';
import { ActorModule } from 'src/engine/core-modules/actor/actor.module';
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
@ -49,7 +48,6 @@ import { UpdateFieldInput } from './dtos/update-field.input';
WorkspaceMigrationRunnerModule,
WorkspaceMetadataVersionModule,
WorkspaceCacheStorageModule,
FeatureFlagModule,
ObjectMetadataModule,
DataSourceModule,
TypeORMModule,

View File

@ -10,8 +10,6 @@ import {
import { FieldMetadataType } from 'twenty-shared/types';
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 {
ForbiddenError,
ValidationError,
@ -53,7 +51,6 @@ import { createDeterministicUuid } from 'src/engine/workspace-manager/workspace-
export class FieldMetadataResolver {
constructor(
private readonly fieldMetadataService: FieldMetadataService,
private readonly featureFlagService: FeatureFlagService,
private readonly beforeUpdateOneField: BeforeUpdateOneField<UpdateFieldInput>,
) {}
@ -178,51 +175,28 @@ export class FieldMetadataResolver {
return null;
}
const isNewRelationEnabled = await this.featureFlagService.isFeatureEnabled(
FeatureFlagKey.IsNewRelationEnabled,
workspace.id,
const relation = await this.relation(
workspace,
fieldMetadata as FieldMetadataEntity<FieldMetadataType.RELATION>,
context,
);
// TODO: Remove this once we drop old relations or update the front-end to use the new relation
if (isNewRelationEnabled) {
const relation = await this.relation(
workspace,
fieldMetadata as FieldMetadataEntity<FieldMetadataType.RELATION>,
context,
);
if (!relation) {
return null;
}
return {
// Temporary fix as we don't have relationId in the new relation
relationId: createDeterministicUuid([
relation.sourceFieldMetadata.id,
relation.targetFieldMetadata.id,
]),
direction: relation.type as unknown as RelationDefinitionType,
sourceObjectMetadata: relation.sourceObjectMetadata,
targetObjectMetadata: relation.targetObjectMetadata,
sourceFieldMetadata: relation.sourceFieldMetadata,
targetFieldMetadata: relation.targetFieldMetadata,
};
if (!relation) {
return null;
}
try {
const relationMetadataItem =
await context.loaders.relationMetadataLoader.load({
fieldMetadata,
workspaceId: workspace.id,
});
return await this.fieldMetadataService.getRelationDefinitionFromRelationMetadata(
fieldMetadata,
relationMetadataItem,
);
} catch (error) {
fieldMetadataGraphqlApiExceptionHandler(error);
}
return {
// Temporary fix as we don't have relationId in the new relation
relationId: createDeterministicUuid([
relation.sourceFieldMetadata.id,
relation.targetFieldMetadata.id,
]),
direction: relation.type as unknown as RelationDefinitionType,
sourceObjectMetadata: relation.sourceObjectMetadata,
targetObjectMetadata: relation.targetObjectMetadata,
sourceFieldMetadata: relation.sourceFieldMetadata,
targetFieldMetadata: relation.targetFieldMetadata,
};
}
@ResolveField(() => RelationDTO, { nullable: true })
@ -236,18 +210,6 @@ export class FieldMetadataResolver {
}
try {
const isNewRelationEnabled =
await this.featureFlagService.isFeatureEnabled(
FeatureFlagKey.IsNewRelationEnabled,
workspace.id,
);
if (!isNewRelationEnabled) {
throw new FieldMetadataException(
'New relation feature is not enabled for this workspace',
FieldMetadataExceptionCode.FIELD_METADATA_RELATION_NOT_ENABLED,
);
}
const {
sourceObjectMetadata,
targetObjectMetadata,