From 1969c0e9f37c67b17472150afefc9e54abdd07e0 Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 11 Jul 2024 18:27:43 +0200 Subject: [PATCH 1/9] Add label identifier to object decorator --- .../interfaces/object-metadata.interface.ts | 4 +- .../dtos/object-metadata.dto.ts | 10 +-- .../object-metadata/object-metadata.entity.ts | 22 +++---- .../decorators/workspace-entity.decorator.ts | 2 + ...orkspace-entity-metadata-args.interface.ts | 6 ++ .../constants/standard-field-ids.ts | 1 + .../partial-object-metadata.interface.ts | 3 +- ...ync-object-metadata-identifiers.service.ts | 65 +++++++++++++++++++ .../workspace-sync-object-metadata.service.ts | 12 ++-- .../workspace-sync-metadata.module.ts | 14 ++-- .../workspace-sync-metadata.service.ts | 20 ++++-- .../activity.workspace-entity.ts | 16 ++--- 12 files changed, 132 insertions(+), 43 deletions(-) create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts index 4454c94747a5..8d805dfe4a03 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface.ts @@ -1,5 +1,5 @@ -import { RelationMetadataInterface } from './relation-metadata.interface'; import { FieldMetadataInterface } from './field-metadata.interface'; +import { RelationMetadataInterface } from './relation-metadata.interface'; export interface ObjectMetadataInterface { id: string; @@ -18,4 +18,6 @@ export interface ObjectMetadataInterface { isActive: boolean; isRemote: boolean; isAuditLogged: boolean; + labelIdentifierFieldMetadataId?: string | null; + imageIdentifierFieldMetadataId?: string | null; } diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts index 425aebbe2d11..217bc5e89217 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto.ts @@ -1,4 +1,4 @@ -import { ObjectType, Field, HideField } from '@nestjs/graphql'; +import { Field, HideField, ObjectType } from '@nestjs/graphql'; import { Authorize, @@ -72,9 +72,9 @@ export class ObjectMetadataDTO { @Field() updatedAt: Date; - @Field({ nullable: true }) - labelIdentifierFieldMetadataId?: string; + @Field(() => String, { nullable: true }) + labelIdentifierFieldMetadataId?: string | null; - @Field({ nullable: true }) - imageIdentifierFieldMetadataId?: string; + @Field(() => String, { nullable: true }) + imageIdentifierFieldMetadataId?: string | null; } diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index cc64c231b704..412078fdf157 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -1,21 +1,21 @@ import { - Entity, - Unique, - PrimaryGeneratedColumn, Column, - OneToMany, CreateDateColumn, - UpdateDateColumn, + Entity, ManyToOne, + OneToMany, + PrimaryGeneratedColumn, Relation, + Unique, + UpdateDateColumn, } from 'typeorm'; 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'; -import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; +import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; +import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; @Entity('objectMetadata') @Unique('IndexOnNameSingularAndWorkspaceIdUnique', [ @@ -69,11 +69,11 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface { @Column({ default: true }) isAuditLogged: boolean; - @Column({ nullable: true }) - labelIdentifierFieldMetadataId?: string; + @Column({ nullable: true, type: 'text' }) + labelIdentifierFieldMetadataId?: string | null; - @Column({ nullable: true }) - imageIdentifierFieldMetadataId?: string; + @Column({ nullable: true, type: 'text' }) + imageIdentifierFieldMetadataId?: string | null; @Column({ nullable: false, type: 'uuid' }) workspaceId: string; diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts index a4b0170d0a6c..d846923d0227 100644 --- a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts @@ -9,6 +9,7 @@ interface WorkspaceEntityOptions { labelPlural: string; description?: string; icon?: string; + labelIdentifierStandardId?: string; } export function WorkspaceEntity( @@ -37,6 +38,7 @@ export function WorkspaceEntity( labelSingular: options.labelSingular, labelPlural: options.labelPlural, description: options.description, + labelIdentifierStandardId: options.labelIdentifierStandardId ?? null, icon: options.icon, isAuditLogged, isSystem, diff --git a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts index 3d55fc2bb0b6..54a44f52fe86 100644 --- a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts +++ b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts @@ -50,4 +50,10 @@ export interface WorkspaceEntityMetadataArgs { * Entity gate. */ readonly gate?: Gate; + + /** + * Label identifier. + */ + + readonly labelIdentifierStandardId: string | null; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts index 63b64692a34b..bc7782ec42bf 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts @@ -25,6 +25,7 @@ export const ACTIVITY_STANDARD_FIELD_IDS = { comments: '20202020-6b2e-4d29-bbd1-ecddb330e71a', author: '20202020-455f-44f2-8e89-1b0ef01cb7fb', assignee: '20202020-4259-48e4-9e77-6b92991906d5', + subtitle: '20202020-4b3c-4b3b-8b3b-8b3b8b3b8b3b', }; export const API_KEY_STANDARD_FIELD_IDS = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts index 18cf5b3f2a39..594c12cb71f5 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts @@ -1,9 +1,9 @@ +import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; import { ComputedPartialFieldMetadata, PartialComputedFieldMetadata, PartialFieldMetadata, } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-field-metadata.interface'; -import { ObjectMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/object-metadata.interface'; export type PartialWorkspaceEntity = Omit< ObjectMetadataInterface, @@ -14,6 +14,7 @@ export type PartialWorkspaceEntity = Omit< workspaceId: string; dataSourceId: string; fields: (PartialFieldMetadata | PartialComputedFieldMetadata)[]; + labelIdentifierStandardId?: string | null; }; export type ComputedPartialWorkspaceEntity = Omit< diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts new file mode 100644 index 000000000000..cb49338d8d82 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts @@ -0,0 +1,65 @@ +import { Injectable, Logger } from '@nestjs/common'; + +import { EntityManager } from 'typeorm'; + +import { FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; +import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; + +import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { StandardObjectFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/standard-object.factory'; +import { standardObjectMetadataDefinitions } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects'; +import { WorkspaceSyncStorage } from 'src/engine/workspace-manager/workspace-sync-metadata/storage/workspace-sync.storage'; +import { mapObjectMetadataByUniqueIdentifier } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/sync-metadata.util'; + +@Injectable() +export class WorkspaceSyncObjectMetadataIdentifiersService { + private readonly logger = new Logger( + WorkspaceSyncObjectMetadataIdentifiersService.name, + ); + + constructor(private readonly standardObjectFactory: StandardObjectFactory) {} + + async synchronize( + context: WorkspaceSyncContext, + manager: EntityManager, + _storage: WorkspaceSyncStorage, + workspaceFeatureFlagsMap: FeatureFlagMap, + ): Promise { + const objectMetadataRepository = + manager.getRepository(ObjectMetadataEntity); + + const originalObjectMetadataCollection = + await objectMetadataRepository.find({ + where: { + workspaceId: context.workspaceId, + isCustom: false, + }, + relations: ['fields'], + }); + + const standardObjectMetadataCollection = this.standardObjectFactory.create( + standardObjectMetadataDefinitions, + context, + workspaceFeatureFlagsMap, + ); + + const standardObjectMetadataMap = mapObjectMetadataByUniqueIdentifier( + standardObjectMetadataCollection, + ); + + for (const objectMetadata of originalObjectMetadataCollection) { + const objectStandardId = objectMetadata.standardId; + + objectMetadata.labelIdentifierFieldMetadataId = + objectMetadata.fields.find( + (field) => + objectStandardId && + field.standardId === + standardObjectMetadataMap[objectStandardId] + ?.labelIdentifierStandardId, + )?.id ?? null; + + await objectMetadataRepository.save(objectMetadata); + } + } +} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service.ts index 34d456d19d95..f93b495924d8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service.ts @@ -2,20 +2,20 @@ import { Injectable, Logger } from '@nestjs/common'; import { EntityManager } from 'typeorm'; -import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; -import { ComparatorAction } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/comparator.interface'; import { FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { WorkspaceMigrationBuilderAction } from 'src/engine/workspace-manager/workspace-migration-builder/interfaces/workspace-migration-builder-action.interface'; +import { ComparatorAction } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/comparator.interface'; +import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; -import { mapObjectMetadataByUniqueIdentifier } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/sync-metadata.util'; import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; -import { StandardObjectFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/standard-object.factory'; +import { WorkspaceMigrationObjectFactory } from 'src/engine/workspace-manager/workspace-migration-builder/factories/workspace-migration-object.factory'; import { WorkspaceObjectComparator } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-object.comparator'; +import { StandardObjectFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/standard-object.factory'; import { WorkspaceMetadataUpdaterService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-metadata-updater.service'; -import { WorkspaceSyncStorage } from 'src/engine/workspace-manager/workspace-sync-metadata/storage/workspace-sync.storage'; -import { WorkspaceMigrationObjectFactory } from 'src/engine/workspace-manager/workspace-migration-builder/factories/workspace-migration-object.factory'; import { standardObjectMetadataDefinitions } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects'; +import { WorkspaceSyncStorage } from 'src/engine/workspace-manager/workspace-sync-metadata/storage/workspace-sync.storage'; +import { mapObjectMetadataByUniqueIdentifier } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/sync-metadata.util'; @Injectable() export class WorkspaceSyncObjectMetadataService { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts index 951d9e74a0b0..2e189fdeb18e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts @@ -5,18 +5,19 @@ import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature- 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 { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { WorkspaceCacheVersionModule } from 'src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.module'; import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; +import { WorkspaceMigrationBuilderModule } from 'src/engine/workspace-manager/workspace-migration-builder/workspace-migration-builder.module'; import { WorkspaceMigrationRunnerModule } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.module'; -import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service'; -import { workspaceSyncMetadataFactories } from 'src/engine/workspace-manager/workspace-sync-metadata/factories'; import { workspaceSyncMetadataComparators } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators'; +import { workspaceSyncMetadataFactories } from 'src/engine/workspace-manager/workspace-sync-metadata/factories'; import { WorkspaceMetadataUpdaterService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-metadata-updater.service'; -import { WorkspaceSyncObjectMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service'; -import { WorkspaceSyncRelationMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-relation-metadata.service'; import { WorkspaceSyncFieldMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-field-metadata.service'; -import { WorkspaceMigrationBuilderModule } from 'src/engine/workspace-manager/workspace-migration-builder/workspace-migration-builder.module'; -import { WorkspaceCacheVersionModule } from 'src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.module'; import { WorkspaceSyncIndexMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-index-metadata.service'; +import { WorkspaceSyncObjectMetadataIdentifiersService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service'; +import { WorkspaceSyncObjectMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service'; +import { WorkspaceSyncRelationMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-relation-metadata.service'; +import { WorkspaceSyncMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service'; @Module({ imports: [ @@ -39,6 +40,7 @@ import { WorkspaceSyncIndexMetadataService } from 'src/engine/workspace-manager/ ...workspaceSyncMetadataComparators, WorkspaceMetadataUpdaterService, WorkspaceSyncObjectMetadataService, + WorkspaceSyncObjectMetadataIdentifiersService, WorkspaceSyncRelationMetadataService, WorkspaceSyncFieldMetadataService, WorkspaceSyncMetadataService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts index b233be4e3747..245beac3e6f8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts @@ -5,15 +5,16 @@ import { DataSource } from 'typeorm'; import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; +import { WorkspaceCacheVersionService } from 'src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.service'; +import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; import { WorkspaceMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service'; import { FeatureFlagFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/feature-flags.factory'; +import { WorkspaceSyncFieldMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-field-metadata.service'; +import { WorkspaceSyncIndexMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-index-metadata.service'; +import { WorkspaceSyncObjectMetadataIdentifiersService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service'; import { WorkspaceSyncObjectMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata.service'; import { WorkspaceSyncRelationMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-relation-metadata.service'; -import { WorkspaceSyncFieldMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-field-metadata.service'; import { WorkspaceSyncStorage } from 'src/engine/workspace-manager/workspace-sync-metadata/storage/workspace-sync.storage'; -import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; -import { WorkspaceCacheVersionService } from 'src/engine/metadata-modules/workspace-cache-version/workspace-cache-version.service'; -import { WorkspaceSyncIndexMetadataService } from 'src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-index-metadata.service'; interface SynchronizeOptions { applyChanges?: boolean; @@ -33,6 +34,7 @@ export class WorkspaceSyncMetadataService { private readonly workspaceSyncFieldMetadataService: WorkspaceSyncFieldMetadataService, private readonly workspaceCacheVersionService: WorkspaceCacheVersionService, private readonly workspaceSyncIndexMetadataService: WorkspaceSyncIndexMetadataService, + private readonly workspaceSyncObjectMetadataIdentifiersService: WorkspaceSyncObjectMetadataIdentifiersService, ) {} /** @@ -108,6 +110,14 @@ export class WorkspaceSyncMetadataService { workspaceFeatureFlagsMap, ); + // 5 - Sync standard object metadata identifiers, does not need to return nor apply migrations + await this.workspaceSyncObjectMetadataIdentifiersService.synchronize( + context, + manager, + storage, + workspaceFeatureFlagsMap, + ); + // Save workspace migrations into the database workspaceMigrations = await workspaceMigrationRepository.save([ ...workspaceObjectMigrations, @@ -137,7 +147,7 @@ export class WorkspaceSyncMetadataService { context.workspaceId, ); } catch (error) { - console.error('Sync of standard objects failed with:', error); + this.logger.error('Sync of standard objects failed with:', error); await queryRunner.rollbackTransaction(); } finally { await queryRunner.release(); diff --git a/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts b/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts index f8d81dfebca2..dd7c40e7faab 100644 --- a/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts @@ -5,19 +5,19 @@ import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { ACTIVITY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity'; -import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity'; +import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; -import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; -import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; -import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.activity, From 87fd98daefd75a48b6bff33604dddd59c77860ae Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 11 Jul 2024 18:31:30 +0200 Subject: [PATCH 2/9] fix --- .../twenty-orm/decorators/workspace-entity.decorator.ts | 2 ++ .../workspace-entity-metadata-args.interface.ts | 6 ++++++ .../constants/standard-field-ids.ts | 1 - .../interfaces/partial-object-metadata.interface.ts | 1 + ...workspace-sync-object-metadata-identifiers.service.ts | 9 +++++++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts index d846923d0227..bbd0baea82d0 100644 --- a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts @@ -10,6 +10,7 @@ interface WorkspaceEntityOptions { description?: string; icon?: string; labelIdentifierStandardId?: string; + imageIdentifierStandardId?: string; } export function WorkspaceEntity( @@ -39,6 +40,7 @@ export function WorkspaceEntity( labelPlural: options.labelPlural, description: options.description, labelIdentifierStandardId: options.labelIdentifierStandardId ?? null, + imageIdentifierStandardId: options.imageIdentifierStandardId ?? null, icon: options.icon, isAuditLogged, isSystem, diff --git a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts index 54a44f52fe86..ac10ea898dd2 100644 --- a/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts +++ b/packages/twenty-server/src/engine/twenty-orm/interfaces/workspace-entity-metadata-args.interface.ts @@ -56,4 +56,10 @@ export interface WorkspaceEntityMetadataArgs { */ readonly labelIdentifierStandardId: string | null; + + /** + * Image identifier. + */ + + readonly imageIdentifierStandardId: string | null; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts index bc7782ec42bf..63b64692a34b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts @@ -25,7 +25,6 @@ export const ACTIVITY_STANDARD_FIELD_IDS = { comments: '20202020-6b2e-4d29-bbd1-ecddb330e71a', author: '20202020-455f-44f2-8e89-1b0ef01cb7fb', assignee: '20202020-4259-48e4-9e77-6b92991906d5', - subtitle: '20202020-4b3c-4b3b-8b3b-8b3b8b3b8b3b', }; export const API_KEY_STANDARD_FIELD_IDS = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts index 594c12cb71f5..7962b9609d26 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-object-metadata.interface.ts @@ -15,6 +15,7 @@ export type PartialWorkspaceEntity = Omit< dataSourceId: string; fields: (PartialFieldMetadata | PartialComputedFieldMetadata)[]; labelIdentifierStandardId?: string | null; + imageIdentifierStandardId?: string | null; }; export type ComputedPartialWorkspaceEntity = Omit< diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts index cb49338d8d82..da04c1639774 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts @@ -59,6 +59,15 @@ export class WorkspaceSyncObjectMetadataIdentifiersService { ?.labelIdentifierStandardId, )?.id ?? null; + objectMetadata.imageIdentifierFieldMetadataId = + objectMetadata.fields.find( + (field) => + objectStandardId && + field.standardId === + standardObjectMetadataMap[objectStandardId] + ?.imageIdentifierStandardId, + )?.id ?? null; + await objectMetadataRepository.save(objectMetadata); } } From 721fe99ca875475b3741336888b2b379a652dbd2 Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 11 Jul 2024 18:42:35 +0200 Subject: [PATCH 3/9] add validation --- ...ync-object-metadata-identifiers.service.ts | 52 +++++++++++++------ 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts index da04c1639774..8e774a443b00 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts @@ -5,6 +5,7 @@ import { EntityManager } from 'typeorm'; import { FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; +import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { StandardObjectFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/standard-object.factory'; import { standardObjectMetadataDefinitions } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects'; @@ -50,25 +51,42 @@ export class WorkspaceSyncObjectMetadataIdentifiersService { for (const objectMetadata of originalObjectMetadataCollection) { const objectStandardId = objectMetadata.standardId; - objectMetadata.labelIdentifierFieldMetadataId = - objectMetadata.fields.find( - (field) => - objectStandardId && - field.standardId === - standardObjectMetadataMap[objectStandardId] - ?.labelIdentifierStandardId, - )?.id ?? null; + const labelIdentifierFieldMetadata = objectMetadata.fields.find( + (field) => + objectStandardId && + field.standardId === + standardObjectMetadataMap[objectStandardId] + ?.labelIdentifierStandardId, + ); - objectMetadata.imageIdentifierFieldMetadataId = - objectMetadata.fields.find( - (field) => - objectStandardId && - field.standardId === - standardObjectMetadataMap[objectStandardId] - ?.imageIdentifierStandardId, - )?.id ?? null; + if ( + labelIdentifierFieldMetadata && + labelIdentifierFieldMetadata.type !== FieldMetadataType.TEXT + ) { + throw new Error( + `Label identifier field for object ${objectMetadata.nameSingular} must be of type TEXT`, + ); + } - await objectMetadataRepository.save(objectMetadata); + const imageIdentifierFieldMetadata = objectMetadata.fields.find( + (field) => + objectStandardId && + field.standardId === + standardObjectMetadataMap[objectStandardId] + ?.imageIdentifierStandardId, + ); + + if (imageIdentifierFieldMetadata) { + throw new Error( + `Image identifier field for object ${objectMetadata.nameSingular} are not supported yet.`, + ); + } + + await objectMetadataRepository.save({ + ...objectMetadata, + labelIdentifierFieldMetadataId: + labelIdentifierFieldMetadata?.id ?? null, + }); } } } From 3a316d7d55b9c04c17682154fb9347c79250e31a Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 11 Jul 2024 20:03:15 +0200 Subject: [PATCH 4/9] reorganize code --- ...ync-object-metadata-identifiers.service.ts | 140 +++++++++++++----- 1 file changed, 106 insertions(+), 34 deletions(-) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts index 8e774a443b00..0973c5516417 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts @@ -1,11 +1,14 @@ import { Injectable, Logger } from '@nestjs/common'; -import { EntityManager } from 'typeorm'; +import { EntityManager, Repository } from 'typeorm'; import { FeatureFlagMap } from 'src/engine/core-modules/feature-flag/interfaces/feature-flag-map.interface'; import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; -import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { + FieldMetadataEntity, + FieldMetadataType, +} from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { StandardObjectFactory } from 'src/engine/workspace-manager/workspace-sync-metadata/factories/standard-object.factory'; import { standardObjectMetadataDefinitions } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects'; @@ -30,57 +33,81 @@ export class WorkspaceSyncObjectMetadataIdentifiersService { manager.getRepository(ObjectMetadataEntity); const originalObjectMetadataCollection = - await objectMetadataRepository.find({ - where: { - workspaceId: context.workspaceId, - isCustom: false, - }, - relations: ['fields'], - }); + await this.getOriginalObjectMetadataCollection( + context.workspaceId, + objectMetadataRepository, + ); + + const standardObjectMetadataMap = this.createStandardObjectMetadataMap( + context, + workspaceFeatureFlagsMap, + ); + await this.processObjectMetadataCollection( + originalObjectMetadataCollection, + standardObjectMetadataMap, + objectMetadataRepository, + ); + } + + private async getOriginalObjectMetadataCollection( + workspaceId: string, + objectMetadataRepository: Repository, + ): Promise { + return await objectMetadataRepository.find({ + where: { workspaceId, isCustom: false }, + relations: ['fields'], + }); + } + + private createStandardObjectMetadataMap( + context: WorkspaceSyncContext, + workspaceFeatureFlagsMap: FeatureFlagMap, + ): Record { const standardObjectMetadataCollection = this.standardObjectFactory.create( standardObjectMetadataDefinitions, context, workspaceFeatureFlagsMap, ); - const standardObjectMetadataMap = mapObjectMetadataByUniqueIdentifier( + return mapObjectMetadataByUniqueIdentifier( standardObjectMetadataCollection, ); + } + private async processObjectMetadataCollection( + originalObjectMetadataCollection: ObjectMetadataEntity[], + standardObjectMetadataMap: Record, + objectMetadataRepository: Repository, + ): Promise { for (const objectMetadata of originalObjectMetadataCollection) { const objectStandardId = objectMetadata.standardId; - const labelIdentifierFieldMetadata = objectMetadata.fields.find( - (field) => - objectStandardId && - field.standardId === - standardObjectMetadataMap[objectStandardId] - ?.labelIdentifierStandardId, - ); - - if ( - labelIdentifierFieldMetadata && - labelIdentifierFieldMetadata.type !== FieldMetadataType.TEXT - ) { + if (!objectStandardId) { throw new Error( - `Label identifier field for object ${objectMetadata.nameSingular} must be of type TEXT`, + `Object ${objectMetadata.nameSingular} is missing standardId`, ); } - const imageIdentifierFieldMetadata = objectMetadata.fields.find( - (field) => - objectStandardId && - field.standardId === - standardObjectMetadataMap[objectStandardId] - ?.imageIdentifierStandardId, + const labelIdentifierFieldMetadata = this.findIdentifierFieldMetadata( + objectMetadata, + objectStandardId, + standardObjectMetadataMap, + 'labelIdentifierStandardId', ); - if (imageIdentifierFieldMetadata) { - throw new Error( - `Image identifier field for object ${objectMetadata.nameSingular} are not supported yet.`, - ); - } + const imageIdentifierFieldMetadata = this.findIdentifierFieldMetadata( + objectMetadata, + objectStandardId, + standardObjectMetadataMap, + 'imageIdentifierStandardId', + ); + + this.validateFieldMetadata( + objectMetadata, + labelIdentifierFieldMetadata, + imageIdentifierFieldMetadata, + ); await objectMetadataRepository.save({ ...objectMetadata, @@ -89,4 +116,49 @@ export class WorkspaceSyncObjectMetadataIdentifiersService { }); } } + + private findIdentifierFieldMetadata( + objectMetadata: ObjectMetadataEntity, + objectStandardId: string, + standardObjectMetadataMap: Record, + standardIdFieldName: string, + ): FieldMetadataEntity | undefined { + const identifierFieldMetadata = objectMetadata.fields.find( + (field) => + field.standardId === + standardObjectMetadataMap[objectStandardId][standardIdFieldName], + ); + + if ( + !identifierFieldMetadata && + standardObjectMetadataMap[objectStandardId][standardIdFieldName] + ) { + throw new Error( + `Identifier field for object ${objectMetadata.nameSingular} does not exist`, + ); + } + + return identifierFieldMetadata; + } + + private validateFieldMetadata( + objectMetadata: ObjectMetadataEntity, + labelIdentifierFieldMetadata: FieldMetadataEntity | undefined, + imageIdentifierFieldMetadata: FieldMetadataEntity | undefined, + ): void { + if ( + labelIdentifierFieldMetadata && + labelIdentifierFieldMetadata.type !== FieldMetadataType.TEXT + ) { + throw new Error( + `Label identifier field for object ${objectMetadata.nameSingular} must be of type TEXT`, + ); + } + + if (imageIdentifierFieldMetadata) { + throw new Error( + `Image identifier field for object ${objectMetadata.nameSingular} are not supported yet.`, + ); + } + } } From 7bb0a27a59ed8cc4422e67d8d7e38e80a3814775 Mon Sep 17 00:00:00 2001 From: Weiko Date: Thu, 11 Jul 2024 20:09:19 +0200 Subject: [PATCH 5/9] add TODO --- .../workspace-sync-object-metadata-identifiers.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts index 0973c5516417..d39fad2c6329 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts @@ -109,6 +109,7 @@ export class WorkspaceSyncObjectMetadataIdentifiersService { imageIdentifierFieldMetadata, ); + // TODO: Add image identifier field metadata await objectMetadataRepository.save({ ...objectMetadata, labelIdentifierFieldMetadataId: From 5ea0ef0fb362f4794ec0d4fb6479c0f99737ac6e Mon Sep 17 00:00:00 2001 From: Weiko Date: Fri, 12 Jul 2024 11:57:12 +0200 Subject: [PATCH 6/9] add label for all standard objects or fallback to PK --- .../decorators/workspace-entity.decorator.ts | 4 ++- ...ync-object-metadata-identifiers.service.ts | 8 ++++-- .../standard-objects/index.ts | 28 +++++++++---------- .../activity.workspace-entity.ts | 1 + .../api-key.workspace-entity.ts | 3 +- .../attachment.workspace-entity.ts | 23 +++++++-------- .../calendar-channel.workspace-entity.ts | 15 +++++----- ...ndar-event-participant.workspace-entity.ts | 18 ++++++------ .../calendar-event.workspace-entity.ts | 11 ++++---- .../company.workspace-entity.ts | 1 + .../blocklist.workspace-entity.ts | 15 +++++----- .../connected-account.workspace-entity.ts | 1 + .../message-channel.workspace-entity.ts | 13 +++++---- .../message-participant.workspace-entity.ts | 17 +++++------ .../message.workspace-entity.ts | 11 ++++---- .../opportunity.workspace-entity.ts | 1 + .../person.workspace-entity.ts | 19 +++++++------ .../audit-log.workspace-entity.ts | 1 + .../standard-objects/view.workspace-entity.ts | 15 +++++----- .../webhook.workspace-entity.ts | 3 +- .../workspace-member.workspace-entity.ts | 25 +++++++++-------- 21 files changed, 129 insertions(+), 104 deletions(-) diff --git a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts index bbd0baea82d0..5e56de14008c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts +++ b/packages/twenty-server/src/engine/twenty-orm/decorators/workspace-entity.decorator.ts @@ -1,4 +1,5 @@ import { metadataArgsStorage } from 'src/engine/twenty-orm/storage/metadata-args.storage'; +import { BASE_OBJECT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { convertClassNameToObjectMetadataName } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/convert-class-to-object-metadata-name.util'; import { TypedReflect } from 'src/utils/typed-reflect'; @@ -39,7 +40,8 @@ export function WorkspaceEntity( labelSingular: options.labelSingular, labelPlural: options.labelPlural, description: options.description, - labelIdentifierStandardId: options.labelIdentifierStandardId ?? null, + labelIdentifierStandardId: + options.labelIdentifierStandardId ?? BASE_OBJECT_STANDARD_FIELD_IDS.id, imageIdentifierStandardId: options.imageIdentifierStandardId ?? null, icon: options.icon, isAuditLogged, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts index d39fad2c6329..6ece81cbe358 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/services/workspace-sync-object-metadata-identifiers.service.ts @@ -149,10 +149,14 @@ export class WorkspaceSyncObjectMetadataIdentifiersService { ): void { if ( labelIdentifierFieldMetadata && - labelIdentifierFieldMetadata.type !== FieldMetadataType.TEXT + ![ + FieldMetadataType.UUID, + FieldMetadataType.TEXT, + FieldMetadataType.FULL_NAME, + ].includes(labelIdentifierFieldMetadata.type) ) { throw new Error( - `Label identifier field for object ${objectMetadata.nameSingular} must be of type TEXT`, + `Label identifier field for object ${objectMetadata.nameSingular} has invalid type ${labelIdentifierFieldMetadata.type}`, ); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts index 86e9a31ff61f..78cb6e9de093 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts @@ -1,32 +1,32 @@ import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity'; import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity'; +import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity'; import { ApiKeyWorkspaceEntity } from 'src/modules/api-key/standard-objects/api-key.workspace-entity'; import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; -import { BlocklistWorkspaceEntity } from 'src/modules/connected-account/standard-objects/blocklist.workspace-entity'; -import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity'; +import { CalendarChannelEventAssociationWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity'; +import { CalendarChannelWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity'; +import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; +import { CalendarEventWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event.workspace-entity'; import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity'; +import { BlocklistWorkspaceEntity } from 'src/modules/connected-account/standard-objects/blocklist.workspace-entity'; import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity'; +import { MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; +import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; +import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; +import { MessageThreadWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-thread.workspace-entity'; +import { MessageWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message.workspace-entity'; import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity'; import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; +import { AuditLogWorkspaceEntity } from 'src/modules/timeline/standard-objects/audit-log.workspace-entity'; +import { BehavioralEventWorkspaceEntity } from 'src/modules/timeline/standard-objects/behavioral-event.workspace-entity'; +import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity'; import { ViewFieldWorkspaceEntity } from 'src/modules/view/standard-objects/view-field.workspace-entity'; import { ViewFilterWorkspaceEntity } from 'src/modules/view/standard-objects/view-filter.workspace-entity'; import { ViewSortWorkspaceEntity } from 'src/modules/view/standard-objects/view-sort.workspace-entity'; import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.workspace-entity'; import { WebhookWorkspaceEntity } from 'src/modules/webhook/standard-objects/webhook.workspace-entity'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; -import { AuditLogWorkspaceEntity } from 'src/modules/timeline/standard-objects/audit-log.workspace-entity'; -import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity'; -import { BehavioralEventWorkspaceEntity } from 'src/modules/timeline/standard-objects/behavioral-event.workspace-entity'; -import { MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; -import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; -import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; -import { MessageThreadWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-thread.workspace-entity'; -import { MessageWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message.workspace-entity'; -import { CalendarChannelEventAssociationWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity'; -import { CalendarChannelWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity'; -import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; -import { CalendarEventWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event.workspace-entity'; // TODO: Maybe we should automate this with the DiscoverService of Nest.JS export const standardObjectMetadataDefinitions = [ diff --git a/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts b/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts index dd7c40e7faab..ffd542fc1fb1 100644 --- a/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/activity/standard-objects/activity.workspace-entity.ts @@ -26,6 +26,7 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta labelPlural: 'Activities', description: 'An activity', icon: 'IconCheckbox', + labelIdentifierStandardId: ACTIVITY_STANDARD_FIELD_IDS.title, }) @WorkspaceIsSystem() export class ActivityWorkspaceEntity extends BaseWorkspaceEntity { diff --git a/packages/twenty-server/src/modules/api-key/standard-objects/api-key.workspace-entity.ts b/packages/twenty-server/src/modules/api-key/standard-objects/api-key.workspace-entity.ts index 82ca9d107d6b..ee70a3171911 100644 --- a/packages/twenty-server/src/modules/api-key/standard-objects/api-key.workspace-entity.ts +++ b/packages/twenty-server/src/modules/api-key/standard-objects/api-key.workspace-entity.ts @@ -1,10 +1,10 @@ import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { API_KEY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; @@ -15,6 +15,7 @@ import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync labelPlural: 'Api Keys', description: 'An api key', icon: 'IconRobot', + labelIdentifierStandardId: API_KEY_STANDARD_FIELD_IDS.name, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts b/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts index a4ea0b2e7d14..6fea68a89e32 100644 --- a/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts +++ b/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts @@ -1,24 +1,24 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; +import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; +import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { ATTACHMENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity'; import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity'; import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity'; import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; -import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; -import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; -import { WorkspaceDynamicRelation } from 'src/engine/twenty-orm/decorators/workspace-dynamic-relation.decorator'; -import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; -import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.attachment, @@ -27,6 +27,7 @@ import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace- labelPlural: 'Attachments', description: 'An attachment', icon: 'IconFileImport', + labelIdentifierStandardId: ATTACHMENT_STANDARD_FIELD_IDS.name, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts index 88a549847726..25c528f99a76 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts @@ -1,22 +1,22 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; -import { CALENDAR_CHANNEL_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { CALENDAR_CHANNEL_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { CalendarChannelEventAssociationWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity'; +import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; export enum CalendarChannelVisibility { METADATA = 'METADATA', @@ -54,6 +54,7 @@ export enum CalendarChannelContactAutoCreationPolicy { labelPlural: 'Calendar Channels', description: 'Calendar Channels', icon: 'IconCalendar', + labelIdentifierStandardId: CALENDAR_CHANNEL_STANDARD_FIELD_IDS.handle, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts index 4d8727a50fcf..602dec628a79 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts @@ -1,20 +1,20 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; -import { CALENDAR_EVENT_PARTICIPANT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; -import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { CALENDAR_EVENT_PARTICIPANT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { CalendarEventWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event.workspace-entity'; +import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; export enum CalendarEventParticipantResponseStatus { NEEDS_ACTION = 'NEEDS_ACTION', @@ -30,6 +30,8 @@ export enum CalendarEventParticipantResponseStatus { labelPlural: 'Calendar event participants', description: 'Calendar event participants', icon: 'IconCalendar', + labelIdentifierStandardId: + CALENDAR_EVENT_PARTICIPANT_STANDARD_FIELD_IDS.handle, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts index 563c85391690..0c9da4c7eafc 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event.workspace-entity.ts @@ -1,20 +1,20 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { LinkMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/link.composite-type'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { CALENDAR_EVENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { LinkMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/link.composite-type'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { CALENDAR_EVENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { CalendarChannelEventAssociationWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity'; import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; @@ -25,6 +25,7 @@ import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/co labelPlural: 'Calendar events', description: 'Calendar events', icon: 'IconCalendar', + labelIdentifierStandardId: CALENDAR_EVENT_STANDARD_FIELD_IDS.title, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts b/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts index 8f2d68f5dcee..a6ec959b9b3b 100644 --- a/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts +++ b/packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts @@ -34,6 +34,7 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta labelPlural: 'Companies', description: 'A company', icon: 'IconBuildingSkyscraper', + labelIdentifierStandardId: COMPANY_STANDARD_FIELD_IDS.name, }) export class CompanyWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ diff --git a/packages/twenty-server/src/modules/connected-account/standard-objects/blocklist.workspace-entity.ts b/packages/twenty-server/src/modules/connected-account/standard-objects/blocklist.workspace-entity.ts index 323f211a5e35..1e8d96bbe943 100644 --- a/packages/twenty-server/src/modules/connected-account/standard-objects/blocklist.workspace-entity.ts +++ b/packages/twenty-server/src/modules/connected-account/standard-objects/blocklist.workspace-entity.ts @@ -1,17 +1,17 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; -import { BLOCKLIST_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { BLOCKLIST_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.blocklist, @@ -20,6 +20,7 @@ import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace- labelPlural: 'Blocklists', description: 'Blocklist', icon: 'IconForbid2', + labelIdentifierStandardId: BLOCKLIST_STANDARD_FIELD_IDS.handle, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts index 6fb6ad15c407..f09bb74ea697 100644 --- a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts +++ b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts @@ -30,6 +30,7 @@ export enum ConnectedAccountProvider { labelPlural: 'Connected Accounts', description: 'A connected account', icon: 'IconAt', + labelIdentifierStandardId: CONNECTED_ACCOUNT_STANDARD_FIELD_IDS.handle, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts index 682e367e4c0d..7f2ef567642f 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts @@ -5,18 +5,18 @@ import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { MESSAGE_CHANNEL_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { MESSAGE_CHANNEL_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; +import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; -import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; export enum MessageChannelSyncStatus { // TO BE DEPRECATED @@ -65,6 +65,7 @@ export enum MessageChannelContactAutoCreationPolicy { labelPlural: 'Message Channels', description: 'Message Channels', icon: 'IconMessage', + labelIdentifierStandardId: MESSAGE_CHANNEL_STANDARD_FIELD_IDS.handle, }) @WorkspaceIsNotAuditLogged() @WorkspaceIsSystem() diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts index 0821bf32c012..d6c9524c00d5 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts @@ -1,20 +1,20 @@ import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; -import { MESSAGE_PARTICIPANT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; -import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; +import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; +import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { MESSAGE_PARTICIPANT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { MessageWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message.workspace-entity'; -import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity'; +import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.messageParticipant, @@ -23,6 +23,7 @@ import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace- labelPlural: 'Message Participants', description: 'Message Participants', icon: 'IconUserCircle', + labelIdentifierStandardId: MESSAGE_PARTICIPANT_STANDARD_FIELD_IDS.handle, }) @WorkspaceIsNotAuditLogged() @WorkspaceIsSystem() diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts index a9475a96d6ce..9db744163826 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message.workspace-entity.ts @@ -5,19 +5,19 @@ import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { MESSAGE_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { MESSAGE_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; import { MessageThreadWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-thread.workspace-entity'; -import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.message, @@ -26,6 +26,7 @@ import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace- labelPlural: 'Messages', description: 'Message', icon: 'IconMessage', + labelIdentifierStandardId: MESSAGE_STANDARD_FIELD_IDS.subject, }) @WorkspaceIsNotAuditLogged() @WorkspaceIsSystem() diff --git a/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts b/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts index 670ef37a069d..ae3ef449061c 100644 --- a/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts @@ -31,6 +31,7 @@ import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-o labelPlural: 'Opportunities', description: 'An opportunity', icon: 'IconTargetArrow', + labelIdentifierStandardId: OPPORTUNITY_STANDARD_FIELD_IDS.name, }) @WorkspaceIsNotAuditLogged() export class OpportunityWorkspaceEntity extends BaseWorkspaceEntity { diff --git a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts index 0d1704aed68f..6d2923775c52 100644 --- a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts +++ b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts @@ -7,23 +7,23 @@ import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { PERSON_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { ActivityTargetWorkspaceEntity } from 'src/modules/activity/standard-objects/activity-target.workspace-entity'; import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; +import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity'; import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity'; +import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; import { OpportunityWorkspaceEntity } from 'src/modules/opportunity/standard-objects/opportunity.workspace-entity'; import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity'; -import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; -import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; -import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; -import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; -import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.person, @@ -32,6 +32,7 @@ import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/co labelPlural: 'People', description: 'A person', icon: 'IconUser', + labelIdentifierStandardId: PERSON_STANDARD_FIELD_IDS.name, }) export class PersonWorkspaceEntity extends BaseWorkspaceEntity { @WorkspaceField({ diff --git a/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts b/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts index e6cdc4a77f87..876d3ba7b529 100644 --- a/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts +++ b/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts @@ -20,6 +20,7 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta labelPlural: 'Audit Logs', description: 'An audit log of actions performed in the system', icon: 'IconIconTimelineEvent', + labelIdentifierStandardId: AUDIT_LOGS_STANDARD_FIELD_IDS.name, }) @WorkspaceIsSystem() export class AuditLogWorkspaceEntity extends BaseWorkspaceEntity { diff --git a/packages/twenty-server/src/modules/view/standard-objects/view.workspace-entity.ts b/packages/twenty-server/src/modules/view/standard-objects/view.workspace-entity.ts index b453f0df9f80..be3bd0a1274b 100644 --- a/packages/twenty-server/src/modules/view/standard-objects/view.workspace-entity.ts +++ b/packages/twenty-server/src/modules/view/standard-objects/view.workspace-entity.ts @@ -5,18 +5,18 @@ import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { VIEW_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; -import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; -import { ViewFieldWorkspaceEntity } from 'src/modules/view/standard-objects/view-field.workspace-entity'; -import { ViewFilterWorkspaceEntity } from 'src/modules/view/standard-objects/view-filter.workspace-entity'; -import { ViewSortWorkspaceEntity } from 'src/modules/view/standard-objects/view-sort.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { VIEW_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; +import { ViewFieldWorkspaceEntity } from 'src/modules/view/standard-objects/view-field.workspace-entity'; +import { ViewFilterWorkspaceEntity } from 'src/modules/view/standard-objects/view-filter.workspace-entity'; +import { ViewSortWorkspaceEntity } from 'src/modules/view/standard-objects/view-sort.workspace-entity'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.view, @@ -25,6 +25,7 @@ import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-re labelPlural: 'Views', description: '(System) Views', icon: 'IconLayoutCollage', + labelIdentifierStandardId: VIEW_STANDARD_FIELD_IDS.name, }) @WorkspaceIsNotAuditLogged() @WorkspaceIsSystem() diff --git a/packages/twenty-server/src/modules/webhook/standard-objects/webhook.workspace-entity.ts b/packages/twenty-server/src/modules/webhook/standard-objects/webhook.workspace-entity.ts index 7436ea12441a..96864b9d1b82 100644 --- a/packages/twenty-server/src/modules/webhook/standard-objects/webhook.workspace-entity.ts +++ b/packages/twenty-server/src/modules/webhook/standard-objects/webhook.workspace-entity.ts @@ -1,9 +1,9 @@ import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; import { WEBHOOK_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; @@ -14,6 +14,7 @@ import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync labelPlural: 'Webhooks', description: 'A webhook', icon: 'IconRobot', + labelIdentifierStandardId: WEBHOOK_STANDARD_FIELD_IDS.targetUrl, }) @WorkspaceIsNotAuditLogged() @WorkspaceIsSystem() diff --git a/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts b/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts index 909c2ad938dd..8c0795e50ed6 100644 --- a/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts @@ -6,26 +6,26 @@ import { RelationMetadataType, RelationOnDeleteAction, } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; +import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { WORKSPACE_MEMBER_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { ActivityWorkspaceEntity } from 'src/modules/activity/standard-objects/activity.workspace-entity'; -import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; -import { BlocklistWorkspaceEntity } from 'src/modules/connected-account/standard-objects/blocklist.workspace-entity'; import { CommentWorkspaceEntity } from 'src/modules/activity/standard-objects/comment.workspace-entity'; +import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity'; +import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity'; +import { BlocklistWorkspaceEntity } from 'src/modules/connected-account/standard-objects/blocklist.workspace-entity'; import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity'; -import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity'; -import { AuditLogWorkspaceEntity } from 'src/modules/timeline/standard-objects/audit-log.workspace-entity'; -import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; -import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; -import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; -import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; -import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; -import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; -import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; -import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity'; +import { AuditLogWorkspaceEntity } from 'src/modules/timeline/standard-objects/audit-log.workspace-entity'; +import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity'; @WorkspaceEntity({ standardId: STANDARD_OBJECT_IDS.workspaceMember, @@ -34,6 +34,7 @@ import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/co labelPlural: 'Workspace Members', description: 'A workspace member', icon: 'IconUserCircle', + labelIdentifierStandardId: WORKSPACE_MEMBER_STANDARD_FIELD_IDS.name, }) @WorkspaceIsSystem() @WorkspaceIsNotAuditLogged() From fab4b56a9a47c8dc801f8e562350bb0fe566594c Mon Sep 17 00:00:00 2001 From: Weiko Date: Fri, 12 Jul 2024 16:13:16 +0200 Subject: [PATCH 7/9] add missing FK for identifiers --- .../1720792873225-createIdentifiersFK.ts | 47 +++++++++++++++++++ .../field-metadata/field-metadata.entity.ts | 30 ++++++++---- .../object-metadata/object-metadata.entity.ts | 26 +++++++++- 3 files changed, 92 insertions(+), 11 deletions(-) create mode 100644 packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts new file mode 100644 index 000000000000..a3711109b53b --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts @@ -0,0 +1,47 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class CreateIdentifiersFK1720792873225 implements MigrationInterface { + name = 'CreateIdentifiersFK1720792873225'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "labelIdentifierFieldMetadataId" TYPE uuid USING "labelIdentifierFieldMetadataId"::uuid`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "UQ_aca34aeda432c0e67dd2900ed17" UNIQUE ("labelIdentifierFieldMetadataId")`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "imageIdentifierFieldMetadataId" TYPE uuid USING "imageIdentifierFieldMetadataId"::uuid`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "UQ_dce04b7b5cc033b3363442e0594" UNIQUE ("imageIdentifierFieldMetadataId")`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "FK_aca34aeda432c0e67dd2900ed17" FOREIGN KEY ("labelIdentifierFieldMetadataId") REFERENCES "metadata"."fieldMetadata"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "FK_dce04b7b5cc033b3363442e0594" FOREIGN KEY ("imageIdentifierFieldMetadataId") REFERENCES "metadata"."fieldMetadata"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "FK_dce04b7b5cc033b3363442e0594"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "FK_aca34aeda432c0e67dd2900ed17"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "UQ_dce04b7b5cc033b3363442e0594"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "UQ_aca34aeda432c0e67dd2900ed17"`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "labelIdentifierFieldMetadataId" TYPE text USING "labelIdentifierFieldMetadataId"::text`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "imageIdentifierFieldMetadataId" TYPE text USING "imageIdentifierFieldMetadataId"::text`, + ); + } +} diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts index 44cdf69d1d03..a564bd5381db 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts @@ -1,25 +1,25 @@ import { - Entity, - Unique, - PrimaryGeneratedColumn, Column, - ManyToOne, + CreateDateColumn, + Entity, JoinColumn, + ManyToOne, + OneToMany, OneToOne, - CreateDateColumn, - UpdateDateColumn, + PrimaryGeneratedColumn, Relation, - OneToMany, + Unique, + UpdateDateColumn, } from 'typeorm'; -import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-default-value.interface'; import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.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 { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-field-metadata/index-field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; -import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-field-metadata/index-field-metadata.entity'; export enum FieldMetadataType { UUID = 'UUID', @@ -131,6 +131,18 @@ export class FieldMetadataEntity< ) indexFieldMetadatas: Relation; + @OneToOne( + () => ObjectMetadataEntity, + (field: ObjectMetadataEntity) => field.labelIdentifierFieldMetadata, + ) + objectFromLabelIdentifier: Relation; + + @OneToOne( + () => ObjectMetadataEntity, + (field: ObjectMetadataEntity) => field.imageIdentifierFieldMetadata, + ) + objectFromImageIdentifier: Relation; + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index 412078fdf157..502c7e42190e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -2,8 +2,10 @@ import { Column, CreateDateColumn, Entity, + JoinColumn, ManyToOne, OneToMany, + OneToOne, PrimaryGeneratedColumn, Relation, Unique, @@ -69,15 +71,35 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface { @Column({ default: true }) isAuditLogged: boolean; - @Column({ nullable: true, type: 'text' }) + @Column({ nullable: true, type: 'uuid' }) labelIdentifierFieldMetadataId?: string | null; - @Column({ nullable: true, type: 'text' }) + @Column({ nullable: true, type: 'uuid' }) imageIdentifierFieldMetadataId?: string | null; @Column({ nullable: false, type: 'uuid' }) workspaceId: string; + @OneToOne( + () => FieldMetadataEntity, + (field: FieldMetadataEntity) => field.objectFromLabelIdentifier, + { + onDelete: 'SET NULL', + }, + ) + @JoinColumn() + labelIdentifierFieldMetadata?: Relation; + + @OneToOne( + () => FieldMetadataEntity, + (field: FieldMetadataEntity) => field.objectFromImageIdentifier, + { + onDelete: 'SET NULL', + }, + ) + @JoinColumn() + imageIdentifierFieldMetadata?: Relation; + @OneToMany(() => FieldMetadataEntity, (field) => field.object, { cascade: true, }) From 9bc7f024d53c96e0506d99c62d3bf8bac769b2c9 Mon Sep 17 00:00:00 2001 From: Weiko Date: Mon, 15 Jul 2024 17:21:36 +0200 Subject: [PATCH 8/9] Revert "add missing FK for identifiers" This reverts commit fab4b56a9a47c8dc801f8e562350bb0fe566594c. --- .../1720792873225-createIdentifiersFK.ts | 47 ------------------- .../field-metadata/field-metadata.entity.ts | 30 ++++-------- .../object-metadata/object-metadata.entity.ts | 26 +--------- 3 files changed, 11 insertions(+), 92 deletions(-) delete mode 100644 packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts deleted file mode 100644 index a3711109b53b..000000000000 --- a/packages/twenty-server/src/database/typeorm/metadata/migrations/1720792873225-createIdentifiersFK.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class CreateIdentifiersFK1720792873225 implements MigrationInterface { - name = 'CreateIdentifiersFK1720792873225'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "labelIdentifierFieldMetadataId" TYPE uuid USING "labelIdentifierFieldMetadataId"::uuid`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "UQ_aca34aeda432c0e67dd2900ed17" UNIQUE ("labelIdentifierFieldMetadataId")`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "imageIdentifierFieldMetadataId" TYPE uuid USING "imageIdentifierFieldMetadataId"::uuid`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "UQ_dce04b7b5cc033b3363442e0594" UNIQUE ("imageIdentifierFieldMetadataId")`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "FK_aca34aeda432c0e67dd2900ed17" FOREIGN KEY ("labelIdentifierFieldMetadataId") REFERENCES "metadata"."fieldMetadata"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ADD CONSTRAINT "FK_dce04b7b5cc033b3363442e0594" FOREIGN KEY ("imageIdentifierFieldMetadataId") REFERENCES "metadata"."fieldMetadata"("id") ON DELETE SET NULL ON UPDATE NO ACTION`, - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "FK_dce04b7b5cc033b3363442e0594"`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "FK_aca34aeda432c0e67dd2900ed17"`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "UQ_dce04b7b5cc033b3363442e0594"`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" DROP CONSTRAINT "UQ_aca34aeda432c0e67dd2900ed17"`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "labelIdentifierFieldMetadataId" TYPE text USING "labelIdentifierFieldMetadataId"::text`, - ); - await queryRunner.query( - `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "imageIdentifierFieldMetadataId" TYPE text USING "imageIdentifierFieldMetadataId"::text`, - ); - } -} diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts index a564bd5381db..44cdf69d1d03 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.entity.ts @@ -1,25 +1,25 @@ import { - Column, - CreateDateColumn, Entity, - JoinColumn, + Unique, + PrimaryGeneratedColumn, + Column, ManyToOne, - OneToMany, + JoinColumn, OneToOne, - PrimaryGeneratedColumn, - Relation, - Unique, + CreateDateColumn, UpdateDateColumn, + Relation, + OneToMany, } from 'typeorm'; +import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface'; import { FieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-default-value.interface'; import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.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 { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-field-metadata/index-field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-field-metadata/index-field-metadata.entity'; export enum FieldMetadataType { UUID = 'UUID', @@ -131,18 +131,6 @@ export class FieldMetadataEntity< ) indexFieldMetadatas: Relation; - @OneToOne( - () => ObjectMetadataEntity, - (field: ObjectMetadataEntity) => field.labelIdentifierFieldMetadata, - ) - objectFromLabelIdentifier: Relation; - - @OneToOne( - () => ObjectMetadataEntity, - (field: ObjectMetadataEntity) => field.imageIdentifierFieldMetadata, - ) - objectFromImageIdentifier: Relation; - @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index 502c7e42190e..412078fdf157 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -2,10 +2,8 @@ import { Column, CreateDateColumn, Entity, - JoinColumn, ManyToOne, OneToMany, - OneToOne, PrimaryGeneratedColumn, Relation, Unique, @@ -71,35 +69,15 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface { @Column({ default: true }) isAuditLogged: boolean; - @Column({ nullable: true, type: 'uuid' }) + @Column({ nullable: true, type: 'text' }) labelIdentifierFieldMetadataId?: string | null; - @Column({ nullable: true, type: 'uuid' }) + @Column({ nullable: true, type: 'text' }) imageIdentifierFieldMetadataId?: string | null; @Column({ nullable: false, type: 'uuid' }) workspaceId: string; - @OneToOne( - () => FieldMetadataEntity, - (field: FieldMetadataEntity) => field.objectFromLabelIdentifier, - { - onDelete: 'SET NULL', - }, - ) - @JoinColumn() - labelIdentifierFieldMetadata?: Relation; - - @OneToOne( - () => FieldMetadataEntity, - (field: FieldMetadataEntity) => field.objectFromImageIdentifier, - { - onDelete: 'SET NULL', - }, - ) - @JoinColumn() - imageIdentifierFieldMetadata?: Relation; - @OneToMany(() => FieldMetadataEntity, (field) => field.object, { cascade: true, }) From f302e1c30960c4f46fe1e66b9622c6bc272d68ca Mon Sep 17 00:00:00 2001 From: Weiko Date: Mon, 15 Jul 2024 17:27:51 +0200 Subject: [PATCH 9/9] fix identifiers type from text to uuid --- .../1721057142509-fixIdentifierTypes.ts | 23 +++++++++++++++++++ .../object-metadata/object-metadata.entity.ts | 4 ++-- 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 packages/twenty-server/src/database/typeorm/metadata/migrations/1721057142509-fixIdentifierTypes.ts diff --git a/packages/twenty-server/src/database/typeorm/metadata/migrations/1721057142509-fixIdentifierTypes.ts b/packages/twenty-server/src/database/typeorm/metadata/migrations/1721057142509-fixIdentifierTypes.ts new file mode 100644 index 000000000000..086901db1aa3 --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/metadata/migrations/1721057142509-fixIdentifierTypes.ts @@ -0,0 +1,23 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class FixIdentifierTypes1721057142509 implements MigrationInterface { + name = 'FixIdentifierTypes1721057142509'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "labelIdentifierFieldMetadataId" TYPE uuid USING "labelIdentifierFieldMetadataId"::uuid`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "imageIdentifierFieldMetadataId" TYPE uuid USING "imageIdentifierFieldMetadataId"::uuid`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "labelIdentifierFieldMetadataId" TYPE text USING "labelIdentifierFieldMetadataId"::text`, + ); + await queryRunner.query( + `ALTER TABLE "metadata"."objectMetadata" ALTER COLUMN "imageIdentifierFieldMetadataId" TYPE text USING "imageIdentifierFieldMetadataId"::text`, + ); + } +} diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts index 412078fdf157..f3200502cac5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.entity.ts @@ -69,10 +69,10 @@ export class ObjectMetadataEntity implements ObjectMetadataInterface { @Column({ default: true }) isAuditLogged: boolean; - @Column({ nullable: true, type: 'text' }) + @Column({ nullable: true, type: 'uuid' }) labelIdentifierFieldMetadataId?: string | null; - @Column({ nullable: true, type: 'text' }) + @Column({ nullable: true, type: 'uuid' }) imageIdentifierFieldMetadataId?: string | null; @Column({ nullable: false, type: 'uuid' })