From 7bfa003682ee086e2527cda45f99c42c436ff8e8 Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Thu, 24 Jul 2025 17:04:01 +0200 Subject: [PATCH] Workspace migration v2 Metadadata runner object and field (#13377) # Introduction Created the runner metadata for the field and object We should keep in mind that any runner handler will only iterate over an atomic instance of entity ( object field index etc ) Never triggerring any side effect or whats over In this way we will need to implement a deferred transaction, as for when we create a relation we will inject to the first created field of both the `relationTargetFieldMetadataId` deterministically computed before its own creation This would result in pg constraint brokage if not deferred ## Updates - We decided gather create_fields under the create_object as they will be building within the same sql query. This will ease both generation and computation and avoid disassembling to reassemble afterwards - Refactored FlatFieldMetadata to handle relation typing with flat occurences ```ts runCreateFieldSchemaMigration = async ({ action, queryRunner, }: WorkspaceMigrationActionRunnerArgs) => { if (isFlatFieldMetadataEntityOfType(action.flatFieldMetadata, FieldMetadataType.RELATION)) { action.flatFieldMetadata.flatRelationTargetObjectMetadata }else { action.flatFieldMetadata.flatRelationTargetObjectMetadata // tsc-error never } return; }; ``` ## TODO - ~~Discuss action signature with @Weiko in order to anticipate `schema` runner needed grain~~ - ~~Refactor the object actions to contain picked `flatObjectMetadata`~~ - Implem index service --- .../field-metadata/field-metadata.entity.ts | 29 +- ...if-is-relation-field-metadata-type.type.ts | 13 + .../object-metadata.service.ts | 4 +- .../__tests__/get-flat-field-metadata.mock.ts | 10 +- .../get-flat-object-metadata.mock.ts | 4 +- .../types/flat-field-metadata.ts | 28 +- .../types/flat-object-metadata.ts | 5 +- ...metadata-entities-relation-targets.type.ts | 8 +- .../is-flat-field-metadata-of-type.util.ts | 13 + .../workspace-migration-builder.spec.ts.snap | 1895 +++-------------- ...space-migration-builder-field-test-case.ts | 10 +- ...pace-migration-builder-object-test-case.ts | 11 +- ...kspace-migration-builder-test-case.type.ts | 2 +- .../workspace-migration-builder.spec.ts | 7 +- .../workspace-migration-field-action-v2.ts | 21 +- .../workspace-migration-object-action-v2.ts | 18 +- .../types/workspace-migration-v2.ts | 1 + ...leted-created-updated-field-matrix.util.ts | 7 +- ...lat-object-metadata-without-fields.util.ts | 10 + ...et-workspace-migration-v2-field-actions.ts | 19 +- ...t-workspace-migration-v2-object-actions.ts | 19 +- .../workspace-migration-builder-v2.service.ts | 35 +- ...pace-migration-v2-field-actions-builder.ts | 7 +- ...ace-migration-v2-object-actions-builder.ts | 20 +- ...ce-metadata-field-action-runner.service.ts | 66 +- ...e-metadata-object-action-runner.service.ts | 70 +- .../workspace-migration-runner-v2.module.ts | 11 +- .../workspace-migration-runner-v2.service.ts | 15 + 28 files changed, 629 insertions(+), 1729 deletions(-) create mode 100644 packages/twenty-server/src/engine/metadata-modules/field-metadata/types/assign-type-if-is-relation-field-metadata-type.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/is-flat-field-metadata-of-type.util.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util.ts 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 fd3e1b837..2d86f7a22 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,4 +1,4 @@ -import { FieldMetadataType, IsExactly } from 'twenty-shared/types'; +import { FieldMetadataType } from 'twenty-shared/types'; import { Column, CreateDateColumn, @@ -18,19 +18,11 @@ import { FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface'; import { FieldStandardOverridesDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-standard-overrides.dto'; +import { AssignTypeIfIsRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/assign-type-if-is-relation-field-metadata-type.type'; import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; -type IsRelationType = - IsExactly extends true - ? null | Ttype // Could be improved to be | unknown - : T extends FieldMetadataType.RELATION - ? Ttype - : T extends FieldMetadataType.MORPH_RELATION - ? Ttype - : never; - @Entity('fieldMetadata') @Index( 'IDX_FIELD_METADATA_NAME_OBJMID_WORKSPACE_ID_EXCEPT_MORPH_UNIQUE', @@ -127,7 +119,10 @@ export class FieldMetadataEntity< isLabelSyncedWithName: boolean; @Column({ nullable: true, type: 'uuid' }) - relationTargetFieldMetadataId: IsRelationType; + relationTargetFieldMetadataId: AssignTypeIfIsRelationFieldMetadataType< + string, + T + >; @OneToOne( () => FieldMetadataEntity, @@ -136,10 +131,16 @@ export class FieldMetadataEntity< { nullable: true }, ) @JoinColumn({ name: 'relationTargetFieldMetadataId' }) - relationTargetFieldMetadata: IsRelationType, T>; + relationTargetFieldMetadata: AssignTypeIfIsRelationFieldMetadataType< + Relation, + T + >; @Column({ nullable: true, type: 'uuid' }) - relationTargetObjectMetadataId: IsRelationType; + relationTargetObjectMetadataId: AssignTypeIfIsRelationFieldMetadataType< + string, + T + >; @ManyToOne( () => ObjectMetadataEntity, @@ -148,7 +149,7 @@ export class FieldMetadataEntity< { onDelete: 'CASCADE', nullable: true }, ) @JoinColumn({ name: 'relationTargetObjectMetadataId' }) - relationTargetObjectMetadata: IsRelationType< + relationTargetObjectMetadata: AssignTypeIfIsRelationFieldMetadataType< Relation, T >; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/assign-type-if-is-relation-field-metadata-type.type.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/assign-type-if-is-relation-field-metadata-type.type.ts new file mode 100644 index 000000000..8b3639c13 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/types/assign-type-if-is-relation-field-metadata-type.type.ts @@ -0,0 +1,13 @@ +import { FieldMetadataType, IsExactly } from 'twenty-shared/types'; + +export type AssignTypeIfIsRelationFieldMetadataType< + Ttype, + T extends FieldMetadataType, +> = + IsExactly extends true + ? null | Ttype // Could be improved to be | unknown + : T extends FieldMetadataType.RELATION + ? Ttype + : T extends FieldMetadataType.MORPH_RELATION + ? Ttype + : never; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index 7a57bf0cc..996d9638e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -3,6 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Query, QueryOptions } from '@ptc-org/nestjs-query-core'; import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm'; +import { FieldMetadataType } from 'twenty-shared/types'; import { capitalize, isDefined } from 'twenty-shared/utils'; import { FindManyOptions, @@ -11,7 +12,6 @@ import { QueryRunner, Repository, } from 'typeorm'; -import { FieldMetadataType } from 'twenty-shared/types'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; @@ -43,11 +43,11 @@ import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/works import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; +import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service'; import { WorkspaceMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-runner/workspace-migration-runner.service'; import { CUSTOM_OBJECT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { isSearchableFieldType } from 'src/engine/workspace-manager/workspace-sync-metadata/utils/is-searchable-field.util'; -import { isFieldMetadataEntityOfType } from 'src/engine/utils/is-field-metadata-of-type.util'; import { ObjectMetadataEntity } from './object-metadata.entity'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-field-metadata.mock.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-field-metadata.mock.ts index 90f01d2fa..938af6b37 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-field-metadata.mock.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-field-metadata.mock.ts @@ -16,6 +16,9 @@ export const getFlatFieldMetadataMock = ( const createdAt = faker.date.anytime(); return { + defaultValue: null, + options: null, + settings: null, createdAt, description: 'default flat field metadata description', icon: 'icon', @@ -30,14 +33,11 @@ export const getFlatFieldMetadataMock = ( isSystem: false, standardId: null, standardOverrides: null, - settings: null, updatedAt: createdAt, workspaceId: faker.string.uuid(), - defaultValue: null, - options: null, - relationTargetFieldMetadata: undefined as never, + flatRelationTargetFieldMetadata: undefined as never, relationTargetFieldMetadataId: undefined as never, - relationTargetObjectMetadata: undefined as never, + flatRelationTargetObjectMetadata: undefined as never, relationTargetObjectMetadataId: undefined as never, ...overrides, }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-object-metadata.mock.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-object-metadata.mock.ts index 064236202..f43401020 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-object-metadata.mock.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-object-metadata.mock.ts @@ -34,8 +34,8 @@ export const getFlatObjectMetadataMock = ( namePlural: 'defaultflatObjectMetadataNamePlural', nameSingular: 'defaultflatObjectMetadataNameSingular', shortcut: 'shortcut', - standardId: undefined, - standardOverrides: undefined, + standardId: null, + standardOverrides: null, targetTableName: '', updatedAt: createdAt, workspaceId: faker.string.uuid(), diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata.ts index d0e02114a..1855ab059 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata.ts @@ -1,16 +1,32 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; -import { ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; -import { MetadataEntitiesRelationTarget } from 'src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type'; +import { AssignTypeIfIsRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/assign-type-if-is-relation-field-metadata-type.type'; +import { FlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; + +const fieldMetadataRelationProperties = [ + 'relationTargetFieldMetadata', + 'relationTargetObjectMetadata', + 'fieldPermissions', + 'indexFieldMetadatas', + 'object', +] as const satisfies (keyof FieldMetadataEntity)[]; type FieldMetadataEntityRelationProperties = - ExtractRecordTypeOrmRelationProperties< - FieldMetadataEntity, - MetadataEntitiesRelationTarget - >; + (typeof fieldMetadataRelationProperties)[number]; export type FlatFieldMetadata = Omit, FieldMetadataEntityRelationProperties> & { uniqueIdentifier: string; + flatRelationTargetFieldMetadata: AssignTypeIfIsRelationFieldMetadataType< + Omit< + FlatFieldMetadata, + 'flatRelationTargetFieldMetadata' | 'flatRelationTargetObjectMetadata' + >, + T + >; + flatRelationTargetObjectMetadata: AssignTypeIfIsRelationFieldMetadataType< + FlatObjectMetadataWithoutFields, + T + >; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata.ts index f1bf9d213..8f7ba929f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata.ts @@ -9,8 +9,9 @@ type ObjectMetadataRelationProperties = ExtractRecordTypeOrmRelationProperties< MetadataEntitiesRelationTarget >; -export type FlatObjectMetadata = Partial< - Omit +export type FlatObjectMetadata = Omit< + ObjectMetadataEntity, + ObjectMetadataRelationProperties > & { uniqueIdentifier: string; flatIndexMetadatas: FlatIndexMetadata[]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type.ts index e6b983437..997f91bd0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type.ts @@ -1,10 +1,16 @@ +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 { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; +import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { FieldPermissionEntity } from 'src/engine/metadata-modules/object-permission/field-permission/field-permission.entity'; +import { ObjectPermissionEntity } from 'src/engine/metadata-modules/object-permission/object-permission.entity'; export type MetadataEntitiesRelationTarget = | ObjectMetadataEntity | FieldMetadataEntity | IndexFieldMetadataEntity - | FieldPermissionEntity; + | FieldPermissionEntity + | DataSourceEntity + | IndexMetadataEntity + | ObjectPermissionEntity; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/is-flat-field-metadata-of-type.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/is-flat-field-metadata-of-type.util.ts new file mode 100644 index 000000000..99a57de68 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/is-flat-field-metadata-of-type.util.ts @@ -0,0 +1,13 @@ +import { FieldMetadataType } from 'twenty-shared/types'; + +import { FlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata'; + +export function isFlatFieldMetadataEntityOfType< + Field extends FlatFieldMetadata, + Type extends FieldMetadataType, +>( + fieldMetadata: Pick, + type: Type, +): fieldMetadata is Field & FlatFieldMetadata { + return fieldMetadata.type === type; +} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap index 32b4904c5..6ceb9ab97 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap @@ -9,6 +9,8 @@ exports[`Workspace migration builder field actions test suite It should build a "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -21,9 +23,7 @@ exports[`Workspace migration builder field actions test suite It should build a "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -33,154 +33,11 @@ exports[`Workspace migration builder field actions test suite It should build a "updatedAt": Any, "workspaceId": Any, }, - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -197,8 +54,8 @@ exports[`Workspace migration builder field actions test suite It should build a "namePlural": "defaultflatObjectMetadataNamePlural", "nameSingular": "defaultflatObjectMetadataNameSingular", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "object-metadata-unique-identifier-1", "updatedAt": Any, @@ -216,6 +73,8 @@ exports[`Workspace migration builder field actions test suite It should build an "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -228,9 +87,7 @@ exports[`Workspace migration builder field actions test suite It should build an "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -240,42 +97,11 @@ exports[`Workspace migration builder field actions test suite It should build an "updatedAt": Any, "workspaceId": Any, }, - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field-metadata-unique-identifier-1", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -292,8 +118,8 @@ exports[`Workspace migration builder field actions test suite It should build an "namePlural": "defaultflatObjectMetadataNamePlural", "nameSingular": "defaultflatObjectMetadataNameSingular", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "object-metadata-unique-identifier-1", "updatedAt": Any, @@ -311,6 +137,64 @@ exports[`Workspace migration builder field actions test suite It should build an "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": { + "createdAt": Any, + "defaultValue": null, + "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, + "icon": "icon", + "id": Any, + "isActive": true, + "isCustom": true, + "isLabelSyncedWithName": false, + "isNullable": true, + "isSystem": false, + "isUnique": false, + "label": "flat field metadata label", + "name": "flatFieldMetadataName", + "objectMetadataId": Any, + "options": null, + "relationTargetFieldMetadataId": undefined, + "relationTargetObjectMetadataId": undefined, + "settings": null, + "standardId": null, + "standardOverrides": null, + "type": "RELATION", + "uniqueIdentifier": "field-metadata-unique-identifier-2", + "updatedAt": Any, + "workspaceId": Any, + }, + "flatRelationTargetObjectMetadata": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], + "flatFieldMetadatas": [], + "flatIndexMetadatas": [], + "icon": "icon", + "id": Any, + "imageIdentifierFieldMetadataId": Any, + "isActive": true, + "isAuditLogged": true, + "isCustom": true, + "isLabelSyncedWithName": false, + "isRemote": false, + "isSearchable": true, + "isSystem": false, + "labelIdentifierFieldMetadataId": Any, + "labelPlural": "default flat object metadata label plural", + "labelSingular": "default flat object metadata label singular", + "namePlural": "defaultflatObjectMetadataNamePlural", + "nameSingular": "defaultflatObjectMetadataNameSingular", + "shortcut": "shortcut", + "standardId": null, + "standardOverrides": null, + "targetTableName": "", + "uniqueIdentifier": "object-metadata-unique-identifier-2", + "updatedAt": Any, + "workspaceId": Any, + }, "icon": "icon", "id": Any, "isActive": true, @@ -323,9 +207,7 @@ exports[`Workspace migration builder field actions test suite It should build an "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": Any, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": Any, "settings": null, "standardId": null, @@ -335,42 +217,11 @@ exports[`Workspace migration builder field actions test suite It should build an "updatedAt": Any, "workspaceId": Any, }, - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": Any, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": Any, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "RELATION", - "uniqueIdentifier": "field-metadata-unique-identifier-1", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -387,8 +238,8 @@ exports[`Workspace migration builder field actions test suite It should build an "namePlural": "defaultflatObjectMetadataNamePlural", "nameSingular": "defaultflatObjectMetadataNameSingular", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "object-metadata-unique-identifier-1", "updatedAt": Any, @@ -406,6 +257,8 @@ exports[`Workspace migration builder field actions test suite It should build an "createdAt": Any, "defaultValue": null, "description": "new description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "new icon", "id": Any, "isActive": false, @@ -418,9 +271,7 @@ exports[`Workspace migration builder field actions test suite It should build an "name": "new name", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -430,182 +281,11 @@ exports[`Workspace migration builder field actions test suite It should build an "updatedAt": Any, "workspaceId": Any, }, - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "new description", - "icon": "new icon", - "id": Any, - "isActive": false, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "new name", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field-metadata-unique-identifier-1", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -622,8 +302,8 @@ exports[`Workspace migration builder field actions test suite It should build an "namePlural": "defaultflatObjectMetadataNamePlural", "nameSingular": "defaultflatObjectMetadataNameSingular", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "object-metadata-unique-identifier-1", "updatedAt": Any, @@ -652,6 +332,7 @@ exports[`Workspace migration builder field actions test suite It should build an "to": "new name", }, ], + "workspaceId": Any, }, ] `; @@ -663,6 +344,8 @@ exports[`Workspace migration builder field actions test suite It should build an "createdAt": Any, "defaultValue": null, "description": "new description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": false, @@ -675,9 +358,7 @@ exports[`Workspace migration builder field actions test suite It should build an "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": Any, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": Any, "settings": null, "standardId": null, @@ -687,182 +368,11 @@ exports[`Workspace migration builder field actions test suite It should build an "updatedAt": Any, "workspaceId": Any, }, - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "new description", - "icon": "icon", - "id": Any, - "isActive": false, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "new label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": Any, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": Any, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "RELATION", - "uniqueIdentifier": "field-metadata-unique-identifier-1", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -879,8 +389,8 @@ exports[`Workspace migration builder field actions test suite It should build an "namePlural": "defaultflatObjectMetadataNamePlural", "nameSingular": "defaultflatObjectMetadataNameSingular", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "object-metadata-unique-identifier-1", "updatedAt": Any, @@ -904,6 +414,7 @@ exports[`Workspace migration builder field actions test suite It should build an "to": "new label", }, ], + "workspaceId": Any, }, ] `; @@ -998,13 +509,12 @@ exports[`Workspace migration builder index actions test suite It should not infe exports[`Workspace migration builder object actions test suite It should build a create_object action 1`] = ` [ { - "flatObjectMetadata": { + "createFieldActions": [], + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -1021,8 +531,8 @@ exports[`Workspace migration builder object actions test suite It should build a "namePlural": "totos", "nameSingular": "toto", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "pomme", "updatedAt": Any, @@ -1033,19 +543,17 @@ exports[`Workspace migration builder object actions test suite It should build a ] `; -exports[`Workspace migration builder object actions test suite It should build a create_object and create_field actions for each of this fieldMetadata 1`] = ` +exports[`Workspace migration builder object actions test suite It should build a create_object and create_field and create_index actions for each of this fieldMetadata 1`] = ` [ { - "flatObjectMetadata": { - "createdAt": Any, - "dataSourceId": Any, - "description": "default flat object metadata description", - "duplicateCriteria": [], - "flatFieldMetadatas": [ - { + "createFieldActions": [ + { + "flatFieldMetadata": { "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -1058,9 +566,7 @@ exports[`Workspace migration builder object actions test suite It should build a "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -1070,10 +576,43 @@ exports[`Workspace migration builder object actions test suite It should build a "updatedAt": Any, "workspaceId": Any, }, - { + "flatObjectMetadataWithoutFields": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], + "icon": "icon", + "id": Any, + "imageIdentifierFieldMetadataId": Any, + "isActive": true, + "isAuditLogged": true, + "isCustom": true, + "isLabelSyncedWithName": true, + "isRemote": false, + "isSearchable": true, + "isSystem": false, + "labelIdentifierFieldMetadataId": Any, + "labelPlural": "default flat object metadata label plural", + "labelSingular": "default flat object metadata label singular", + "namePlural": "totos", + "nameSingular": "toto", + "shortcut": "shortcut", + "standardId": null, + "standardOverrides": null, + "targetTableName": "", + "uniqueIdentifier": "pomme", + "updatedAt": Any, + "workspaceId": Any, + }, + "type": "create_field", + }, + { + "flatFieldMetadata": { "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -1086,9 +625,7 @@ exports[`Workspace migration builder object actions test suite It should build a "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -1098,10 +635,43 @@ exports[`Workspace migration builder object actions test suite It should build a "updatedAt": Any, "workspaceId": Any, }, - { + "flatObjectMetadataWithoutFields": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], + "icon": "icon", + "id": Any, + "imageIdentifierFieldMetadataId": Any, + "isActive": true, + "isAuditLogged": true, + "isCustom": true, + "isLabelSyncedWithName": true, + "isRemote": false, + "isSearchable": true, + "isSystem": false, + "labelIdentifierFieldMetadataId": Any, + "labelPlural": "default flat object metadata label plural", + "labelSingular": "default flat object metadata label singular", + "namePlural": "totos", + "nameSingular": "toto", + "shortcut": "shortcut", + "standardId": null, + "standardOverrides": null, + "targetTableName": "", + "uniqueIdentifier": "pomme", + "updatedAt": Any, + "workspaceId": Any, + }, + "type": "create_field", + }, + { + "flatFieldMetadata": { "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -1114,9 +684,7 @@ exports[`Workspace migration builder object actions test suite It should build a "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -1126,10 +694,43 @@ exports[`Workspace migration builder object actions test suite It should build a "updatedAt": Any, "workspaceId": Any, }, - { + "flatObjectMetadataWithoutFields": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], + "icon": "icon", + "id": Any, + "imageIdentifierFieldMetadataId": Any, + "isActive": true, + "isAuditLogged": true, + "isCustom": true, + "isLabelSyncedWithName": true, + "isRemote": false, + "isSearchable": true, + "isSystem": false, + "labelIdentifierFieldMetadataId": Any, + "labelPlural": "default flat object metadata label plural", + "labelSingular": "default flat object metadata label singular", + "namePlural": "totos", + "nameSingular": "toto", + "shortcut": "shortcut", + "standardId": null, + "standardOverrides": null, + "targetTableName": "", + "uniqueIdentifier": "pomme", + "updatedAt": Any, + "workspaceId": Any, + }, + "type": "create_field", + }, + { + "flatFieldMetadata": { "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -1142,9 +743,7 @@ exports[`Workspace migration builder object actions test suite It should build a "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -1154,10 +753,43 @@ exports[`Workspace migration builder object actions test suite It should build a "updatedAt": Any, "workspaceId": Any, }, - { + "flatObjectMetadataWithoutFields": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], + "icon": "icon", + "id": Any, + "imageIdentifierFieldMetadataId": Any, + "isActive": true, + "isAuditLogged": true, + "isCustom": true, + "isLabelSyncedWithName": true, + "isRemote": false, + "isSearchable": true, + "isSystem": false, + "labelIdentifierFieldMetadataId": Any, + "labelPlural": "default flat object metadata label plural", + "labelSingular": "default flat object metadata label singular", + "namePlural": "totos", + "nameSingular": "toto", + "shortcut": "shortcut", + "standardId": null, + "standardOverrides": null, + "targetTableName": "", + "uniqueIdentifier": "pomme", + "updatedAt": Any, + "workspaceId": Any, + }, + "type": "create_field", + }, + { + "flatFieldMetadata": { "createdAt": Any, "defaultValue": null, "description": "default flat field metadata description", + "flatRelationTargetFieldMetadata": undefined, + "flatRelationTargetObjectMetadata": undefined, "icon": "icon", "id": Any, "isActive": true, @@ -1170,9 +802,7 @@ exports[`Workspace migration builder object actions test suite It should build a "name": "flatFieldMetadataName", "objectMetadataId": Any, "options": null, - "relationTargetFieldMetadata": undefined, "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, "relationTargetObjectMetadataId": undefined, "settings": null, "standardId": null, @@ -1182,8 +812,42 @@ exports[`Workspace migration builder object actions test suite It should build a "updatedAt": Any, "workspaceId": Any, }, - ], - "flatIndexMetadatas": [], + "flatObjectMetadataWithoutFields": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], + "icon": "icon", + "id": Any, + "imageIdentifierFieldMetadataId": Any, + "isActive": true, + "isAuditLogged": true, + "isCustom": true, + "isLabelSyncedWithName": true, + "isRemote": false, + "isSearchable": true, + "isSystem": false, + "labelIdentifierFieldMetadataId": Any, + "labelPlural": "default flat object metadata label plural", + "labelSingular": "default flat object metadata label singular", + "namePlural": "totos", + "nameSingular": "toto", + "shortcut": "shortcut", + "standardId": null, + "standardOverrides": null, + "targetTableName": "", + "uniqueIdentifier": "pomme", + "updatedAt": Any, + "workspaceId": Any, + }, + "type": "create_field", + }, + ], + "flatObjectMetadataWithoutFields": { + "createdAt": Any, + "dataSourceId": Any, + "description": "default flat object metadata description", + "duplicateCriteria": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -1200,8 +864,8 @@ exports[`Workspace migration builder object actions test suite It should build a "namePlural": "totos", "nameSingular": "toto", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "pomme", "updatedAt": Any, @@ -1210,1014 +874,21 @@ exports[`Workspace migration builder object actions test suite It should build a "type": "create_object", }, { - "flatFieldMetadata": { + "flatIndexMetadata": { "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", + "flatIndexFieldMetadatas": [], "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, + "indexType": "BTREE", + "indexWhereClause": undefined, + "isCustom": false, "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", + "name": "defaultFlatIndexMetadataName", "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", + "uniqueIdentifier": "field-metadata-unique-identifier-1", "updatedAt": Any, "workspaceId": Any, }, - "flatObjectMetadata": { - "createdAt": Any, - "dataSourceId": Any, - "description": "default flat object metadata description", - "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], - "icon": "icon", - "id": Any, - "imageIdentifierFieldMetadataId": Any, - "isActive": true, - "isAuditLogged": true, - "isCustom": true, - "isLabelSyncedWithName": true, - "isRemote": false, - "isSearchable": true, - "isSystem": false, - "labelIdentifierFieldMetadataId": Any, - "labelPlural": "default flat object metadata label plural", - "labelSingular": "default flat object metadata label singular", - "namePlural": "totos", - "nameSingular": "toto", - "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, - "targetTableName": "", - "uniqueIdentifier": "pomme", - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_field", - }, - { - "flatFieldMetadata": { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - "flatObjectMetadata": { - "createdAt": Any, - "dataSourceId": Any, - "description": "default flat object metadata description", - "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], - "icon": "icon", - "id": Any, - "imageIdentifierFieldMetadataId": Any, - "isActive": true, - "isAuditLogged": true, - "isCustom": true, - "isLabelSyncedWithName": true, - "isRemote": false, - "isSearchable": true, - "isSystem": false, - "labelIdentifierFieldMetadataId": Any, - "labelPlural": "default flat object metadata label plural", - "labelSingular": "default flat object metadata label singular", - "namePlural": "totos", - "nameSingular": "toto", - "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, - "targetTableName": "", - "uniqueIdentifier": "pomme", - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_field", - }, - { - "flatFieldMetadata": { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - "flatObjectMetadata": { - "createdAt": Any, - "dataSourceId": Any, - "description": "default flat object metadata description", - "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], - "icon": "icon", - "id": Any, - "imageIdentifierFieldMetadataId": Any, - "isActive": true, - "isAuditLogged": true, - "isCustom": true, - "isLabelSyncedWithName": true, - "isRemote": false, - "isSearchable": true, - "isSystem": false, - "labelIdentifierFieldMetadataId": Any, - "labelPlural": "default flat object metadata label plural", - "labelSingular": "default flat object metadata label singular", - "namePlural": "totos", - "nameSingular": "toto", - "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, - "targetTableName": "", - "uniqueIdentifier": "pomme", - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_field", - }, - { - "flatFieldMetadata": { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - "flatObjectMetadata": { - "createdAt": Any, - "dataSourceId": Any, - "description": "default flat object metadata description", - "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], - "icon": "icon", - "id": Any, - "imageIdentifierFieldMetadataId": Any, - "isActive": true, - "isAuditLogged": true, - "isCustom": true, - "isLabelSyncedWithName": true, - "isRemote": false, - "isSearchable": true, - "isSystem": false, - "labelIdentifierFieldMetadataId": Any, - "labelPlural": "default flat object metadata label plural", - "labelSingular": "default flat object metadata label singular", - "namePlural": "totos", - "nameSingular": "toto", - "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, - "targetTableName": "", - "uniqueIdentifier": "pomme", - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_field", - }, - { - "flatFieldMetadata": { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - "flatObjectMetadata": { - "createdAt": Any, - "dataSourceId": Any, - "description": "default flat object metadata description", - "duplicateCriteria": [], - "flatFieldMetadatas": [ - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_0", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_1", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_2", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_3", - "updatedAt": Any, - "workspaceId": Any, - }, - { - "createdAt": Any, - "defaultValue": null, - "description": "default flat field metadata description", - "icon": "icon", - "id": Any, - "isActive": true, - "isCustom": true, - "isLabelSyncedWithName": false, - "isNullable": true, - "isSystem": false, - "isUnique": false, - "label": "flat field metadata label", - "name": "flatFieldMetadataName", - "objectMetadataId": Any, - "options": null, - "relationTargetFieldMetadata": undefined, - "relationTargetFieldMetadataId": undefined, - "relationTargetObjectMetadata": undefined, - "relationTargetObjectMetadataId": undefined, - "settings": null, - "standardId": null, - "standardOverrides": null, - "type": "TEXT", - "uniqueIdentifier": "field_4", - "updatedAt": Any, - "workspaceId": Any, - }, - ], - "flatIndexMetadatas": [], - "icon": "icon", - "id": Any, - "imageIdentifierFieldMetadataId": Any, - "isActive": true, - "isAuditLogged": true, - "isCustom": true, - "isLabelSyncedWithName": true, - "isRemote": false, - "isSearchable": true, - "isSystem": false, - "labelIdentifierFieldMetadataId": Any, - "labelPlural": "default flat object metadata label plural", - "labelSingular": "default flat object metadata label singular", - "namePlural": "totos", - "nameSingular": "toto", - "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, - "targetTableName": "", - "uniqueIdentifier": "pomme", - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_field", + "type": "create_index", }, ] `; @@ -2225,13 +896,11 @@ exports[`Workspace migration builder object actions test suite It should build a exports[`Workspace migration builder object actions test suite It should build a delete_object action 1`] = ` [ { - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -2248,8 +917,8 @@ exports[`Workspace migration builder object actions test suite It should build a "namePlural": "totos", "nameSingular": "toto", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "pomme", "updatedAt": Any, @@ -2263,13 +932,11 @@ exports[`Workspace migration builder object actions test suite It should build a exports[`Workspace migration builder object actions test suite It should build an update_object action with all object updated fields 1`] = ` [ { - "flatObjectMetadata": { + "flatObjectMetadataWithoutFields": { "createdAt": Any, "dataSourceId": Any, "description": "default flat object metadata description", "duplicateCriteria": [], - "flatFieldMetadatas": [], - "flatIndexMetadatas": [], "icon": "icon", "id": Any, "imageIdentifierFieldMetadataId": Any, @@ -2286,8 +953,8 @@ exports[`Workspace migration builder object actions test suite It should build a "namePlural": "prastoins", "nameSingular": "prastouin", "shortcut": "shortcut", - "standardId": undefined, - "standardOverrides": undefined, + "standardId": null, + "standardOverrides": null, "targetTableName": "", "uniqueIdentifier": "pomme", "updatedAt": Any, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-field-test-case.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-field-test-case.ts index 9e7b7c3f1..969b90d68 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-field-test-case.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-field-test-case.ts @@ -25,13 +25,21 @@ const relationTestCases: WorkspaceMigrationBuilderTestCase[] = [ context: { input: () => { const objectMetadataId = faker.string.uuid(); - + const targetObjectMetadataId = faker.string.uuid(); const createdFlatRelationFieldMetadata = getFlatFieldMetadataMock({ uniqueIdentifier: 'field-metadata-unique-identifier-1', objectMetadataId, type: FieldMetadataType.RELATION, relationTargetFieldMetadataId: faker.string.uuid(), relationTargetObjectMetadataId: faker.string.uuid(), + flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({ + objectMetadataId: targetObjectMetadataId, + type: FieldMetadataType.RELATION, + uniqueIdentifier: 'field-metadata-unique-identifier-2', + }), + flatRelationTargetObjectMetadata: getFlatObjectMetadataMock({ + uniqueIdentifier: 'object-metadata-unique-identifier-2', + }), }); const flatObjectMetadata = getFlatObjectMetadataMock({ uniqueIdentifier: 'object-metadata-unique-identifier-1', diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts index 49ea9ea20..f88fc64cb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case.ts @@ -2,6 +2,7 @@ import { faker } from '@faker-js/faker'; import { FieldMetadataType } from 'twenty-shared/types'; import { getFlatFieldMetadataMock } from 'src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-field-metadata.mock'; +import { getFlatIndexMetadataMock } from 'src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-index-metadata.mock'; import { getFlatObjectMetadataMock } from 'src/engine/workspace-manager/workspace-migration-v2/__tests__/get-flat-object-metadata.mock'; import { WorkspaceMigrationBuilderTestCase } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/types/workspace-migration-builder-test-case.type'; @@ -59,7 +60,7 @@ export const WORKSPACE_MIGRATION_OBJECT_BUILDER_TEST_CASES: WorkspaceMigrationBu }, { title: - 'It should build a create_object and create_field actions for each of this fieldMetadata', + 'It should build a create_object and create_field and create_index actions for each of this fieldMetadata', context: { input: () => { const objectMetadataId = faker.string.uuid(); @@ -72,6 +73,10 @@ export const WORKSPACE_MIGRATION_OBJECT_BUILDER_TEST_CASES: WorkspaceMigrationBu uniqueIdentifier: `field_${index}`, }), ); + const flatIndexMetadata = getFlatIndexMetadataMock({ + uniqueIdentifier: 'field-metadata-unique-identifier-1', + objectMetadataId, + }); const flatObjectMetadata = getFlatObjectMetadataMock({ uniqueIdentifier: 'pomme', nameSingular: 'toto', @@ -79,6 +84,7 @@ export const WORKSPACE_MIGRATION_OBJECT_BUILDER_TEST_CASES: WorkspaceMigrationBu isLabelSyncedWithName: true, id: objectMetadataId, flatFieldMetadatas, + flatIndexMetadatas: [flatIndexMetadata], }); return { @@ -89,7 +95,8 @@ export const WORKSPACE_MIGRATION_OBJECT_BUILDER_TEST_CASES: WorkspaceMigrationBu expectedActionsTypeCounter: { createObject: 1, - createField: 5, + createField: 0, + createIndex: 1, }, }, }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/types/workspace-migration-builder-test-case.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/types/workspace-migration-builder-test-case.type.ts index 36e9aa9d0..6a1f2e1cf 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/types/workspace-migration-builder-test-case.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/types/workspace-migration-builder-test-case.type.ts @@ -6,7 +6,7 @@ import { WorkspaceMigrationBuilderV2Service } from 'src/engine/workspace-manager type WorkspaceBuilderArgs = Parameters< typeof WorkspaceMigrationBuilderV2Service.prototype.build ->[0]; +>[0]['objectMetadataFromToInputs']; export type CamelCasedWorkspaceMigrationActionsType = ConvertActionTypeToCamelCase; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts index ea51e6186..723e789e2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts @@ -83,8 +83,11 @@ describe.each(allWorkspaceBuilderTestCases)( ({ context: { input, expectedActionsTypeCounter } }) => { const { from, to } = typeof input === 'function' ? input() : input; const workspaceMigration = service.build({ - from, - to, + objectMetadataFromToInputs: { + from, + to, + }, + workspaceId: '20202020-52cc-4c64-ad63-76c26fc3a1e1', }); expectedActionsTypeCounterChecker({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts index 68c28e8e3..7f9985de6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts @@ -4,28 +4,31 @@ import { FlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/wo import { FromTo } from 'src/engine/workspace-manager/workspace-migration-v2/types/from-to.type'; import { FlatFieldMetadataPropertiesToCompare } from 'src/engine/workspace-manager/workspace-migration-v2/utils/flat-field-metadata-comparator.util'; -export type FieldAndObjectMetadataWorkspaceMigrationInput = { - flatFieldMetadata: FlatFieldMetadata; - flatObjectMetadata: FlatObjectMetadataWithoutFields; -}; export type CreateFieldAction = { type: 'create_field'; -} & FieldAndObjectMetadataWorkspaceMigrationInput; + flatFieldMetadata: FlatFieldMetadata; + flatObjectMetadataWithoutFields: FlatObjectMetadataWithoutFields; +}; export type UpdateFieldAction = { type: 'update_field'; - updates: Partial< + workspaceId: string; + flatFieldMetadata: FlatFieldMetadata; + flatObjectMetadataWithoutFields: FlatObjectMetadataWithoutFields; + updates: Array< { [P in FlatFieldMetadataPropertiesToCompare]: { property: P; } & FromTo; }[FlatFieldMetadataPropertiesToCompare] - >[]; -} & FieldAndObjectMetadataWorkspaceMigrationInput; + >; +}; export type DeleteFieldAction = { type: 'delete_field'; -} & FieldAndObjectMetadataWorkspaceMigrationInput; + flatFieldMetadata: FlatFieldMetadata; + flatObjectMetadataWithoutFields: FlatObjectMetadataWithoutFields; +}; export type WorkspaceMigrationFieldActionV2 = | CreateFieldAction diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts index 4f81a9c59..5e6ef53cc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts @@ -2,28 +2,30 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat import { FlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; import { FromTo } from 'src/engine/workspace-manager/workspace-migration-v2/types/from-to.type'; import { FlatObjectMetadataPropertiesToCompare } from 'src/engine/workspace-manager/workspace-migration-v2/utils/flat-object-metadata-comparator.util'; +import { CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -type ObjectActionCommon = { - flatObjectMetadata: FlatObjectMetadataWithoutFields; -}; export type CreateObjectAction = { type: 'create_object'; -} & ObjectActionCommon; + flatObjectMetadataWithoutFields: FlatObjectMetadataWithoutFields; + createFieldActions: CreateFieldAction[]; +}; export type UpdateObjectAction = { type: 'update_object'; - updates: Partial< + flatObjectMetadataWithoutFields: FlatObjectMetadataWithoutFields; + updates: Array< { [P in FlatObjectMetadataPropertiesToCompare]: { property: P; } & FromTo; }[FlatObjectMetadataPropertiesToCompare] - >[]; -} & ObjectActionCommon; + >; +}; export type DeleteObjectAction = { type: 'delete_object'; -} & ObjectActionCommon; + flatObjectMetadataWithoutFields: FlatObjectMetadataWithoutFields; +}; export type WorkspaceMigrationObjectActionV2 = | CreateObjectAction diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts index f69717e78..f1fb976d0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts @@ -8,5 +8,6 @@ export type WorkspaceMigrationV2< // name: string; // description?: string; actions: TActions[]; + workspaceId: string; // objectActions: TActions[] // could be cool ? }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util.ts index 8c1efce6f..b7f51664b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util.ts @@ -1,8 +1,5 @@ import { FlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata'; -import { - FlatObjectMetadata, - FlatObjectMetadataWithoutFields, -} from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; +import { FlatObjectMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; import { FromTo } from 'src/engine/workspace-manager/workspace-migration-v2/types/from-to.type'; import { CustomDeletedCreatedUpdatedMatrix, @@ -10,7 +7,7 @@ import { } from 'src/engine/workspace-manager/workspace-migration-v2/utils/deleted-created-updated-matrix-dispatcher.util'; export type UpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix = { - flatObjectMetadata: FlatObjectMetadataWithoutFields; + flatObjectMetadata: FlatObjectMetadata; } & CustomDeletedCreatedUpdatedMatrix<'fieldMetadata', FlatFieldMetadata>; export const computeUpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix = ( diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util.ts new file mode 100644 index 000000000..722e235d6 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util.ts @@ -0,0 +1,10 @@ +import { + FlatObjectMetadata, + FlatObjectMetadataWithoutFields, +} from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; + +export const fromFlatObjectMetadataToFlatObjectMetadataWithoutFields = ({ + flatFieldMetadatas: _flatFieldMetadatas, + flatIndexMetadatas: _flatIndexMetadatas, + ...rest +}: FlatObjectMetadata): FlatObjectMetadataWithoutFields => rest; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions.ts index 361895784..420c4a776 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions.ts @@ -1,23 +1,32 @@ +import { FlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata'; +import { FlatObjectMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; import { CreateFieldAction, DeleteFieldAction, - FieldAndObjectMetadataWorkspaceMigrationInput, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; +import { fromFlatObjectMetadataToFlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util'; + +type FlatFieldMetadataAndFlatObjectMetadata = { + flatFieldMetadata: FlatFieldMetadata; + flatObjectMetadata: FlatObjectMetadata; +}; export const getWorkspaceMigrationV2FieldCreateAction = ({ flatFieldMetadata, flatObjectMetadata, -}: FieldAndObjectMetadataWorkspaceMigrationInput): CreateFieldAction => ({ +}: FlatFieldMetadataAndFlatObjectMetadata): CreateFieldAction => ({ type: 'create_field', flatFieldMetadata, - flatObjectMetadata, + flatObjectMetadataWithoutFields: + fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(flatObjectMetadata), }); export const getWorkspaceMigrationV2FieldDeleteAction = ({ flatFieldMetadata, flatObjectMetadata, -}: FieldAndObjectMetadataWorkspaceMigrationInput): DeleteFieldAction => ({ +}: FlatFieldMetadataAndFlatObjectMetadata): DeleteFieldAction => ({ type: 'delete_field', flatFieldMetadata, - flatObjectMetadata, + flatObjectMetadataWithoutFields: + fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(flatObjectMetadata), }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-object-actions.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-object-actions.ts index c1e131a64..f755f2399 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-object-actions.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-object-actions.ts @@ -1,19 +1,28 @@ import { FlatObjectMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; +import { CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; import { CreateObjectAction, DeleteObjectAction, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { fromFlatObjectMetadataToFlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util'; -export const getWorkspaceMigrationV2ObjectCreateAction = ( - flatObjectMetadata: FlatObjectMetadata, -): CreateObjectAction => ({ - type: 'create_object', +export const getWorkspaceMigrationV2ObjectCreateAction = ({ + createFieldActions, flatObjectMetadata, +}: { + flatObjectMetadata: FlatObjectMetadata; + createFieldActions: CreateFieldAction[]; +}): CreateObjectAction => ({ + type: 'create_object', + flatObjectMetadataWithoutFields: + fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(flatObjectMetadata), + createFieldActions, }); export const getWorkspaceMigrationV2ObjectDeleteAction = ( flatObjectMetadata: FlatObjectMetadata, ): DeleteObjectAction => ({ type: 'delete_object', - flatObjectMetadata, + flatObjectMetadataWithoutFields: + fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(flatObjectMetadata), }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.service.ts index f83a53a59..98fe79fbf 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.service.ts @@ -6,7 +6,7 @@ import { deletedCreatedUpdatedMatrixDispatcher } from 'src/engine/workspace-mana import { WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2'; import { computeUpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util'; import { computeUpdatedObjectMetadataDeletedCreatedUpdatedIndexMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-index-matrix.util'; -import { getWorkspaceMigrationV2FieldCreateAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions'; +import { getWorkspaceMigrationV2FieldDeleteAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions'; import { getWorkspaceMigrationV2CreateIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-index-actions'; import { buildWorkspaceMigrationV2FieldActions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-field-actions-builder'; import { buildWorkspaceMigrationIndexActions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-index-actions-builder'; @@ -15,9 +15,13 @@ import { buildWorkspaceMigrationV2ObjectActions } from 'src/engine/workspace-man export class WorkspaceMigrationBuilderV2Service { constructor() {} - build( - objectMetadataFromToInputs: FromTo, - ): WorkspaceMigrationV2 { + build({ + objectMetadataFromToInputs, + workspaceId, + }: { + objectMetadataFromToInputs: FromTo; + workspaceId: string; + }): WorkspaceMigrationV2 { const { created: createdObjectMetadata, deleted: deletedObjectMetadata, @@ -31,16 +35,6 @@ export class WorkspaceMigrationBuilderV2Service { updatedObjectMetadata, }); - const createdObjectWorkspaceMigrationCreateFieldActions = - createdObjectMetadata.flatMap((flatObjectMetadata) => - flatObjectMetadata.flatFieldMetadatas.map((flatFieldMetadata) => - getWorkspaceMigrationV2FieldCreateAction({ - flatFieldMetadata, - flatObjectMetadata, - }), - ), - ); - const createdObjectMetadataCreateIndexActions = createdObjectMetadata.flatMap((objectMetadata) => objectMetadata.flatIndexMetadatas.map( @@ -48,6 +42,16 @@ export class WorkspaceMigrationBuilderV2Service { ), ); + const deletedObjectWorkspaceMigrationDeleteFieldActions = + deletedObjectMetadata.flatMap((flatObjectMetadata) => + flatObjectMetadata.flatFieldMetadatas.map((flatFieldMetadata) => + getWorkspaceMigrationV2FieldDeleteAction({ + flatFieldMetadata, + flatObjectMetadata, + }), + ), + ); + const updatedObjectMetadataDeletedCreatedUpdatedFieldMatrix = computeUpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix( updatedObjectMetadata, @@ -67,9 +71,10 @@ export class WorkspaceMigrationBuilderV2Service { ); return { + workspaceId, actions: [ ...objectWorkspaceMigrationActions, - ...createdObjectWorkspaceMigrationCreateFieldActions, + ...deletedObjectWorkspaceMigrationDeleteFieldActions, ...createdObjectMetadataCreateIndexActions, ...fieldWorkspaceMigrationActions, ...indexWorkspaceMigrationActions, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-field-actions-builder.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-field-actions-builder.ts index 5053a8c90..a8ed6d979 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-field-actions-builder.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-field-actions-builder.ts @@ -4,6 +4,7 @@ import { WorkspaceMigrationFieldActionV2, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; import { UpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util'; +import { fromFlatObjectMetadataToFlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util'; import { getWorkspaceMigrationV2FieldCreateAction, getWorkspaceMigrationV2FieldDeleteAction, @@ -35,7 +36,11 @@ export const buildWorkspaceMigrationV2FieldActions = ( return { type: 'update_field', flatFieldMetadata: to, - flatObjectMetadata, + flatObjectMetadataWithoutFields: + fromFlatObjectMetadataToFlatObjectMetadataWithoutFields( + flatObjectMetadata, + ), + workspaceId: to.workspaceId, updates, }; }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-object-actions-builder.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-object-actions-builder.ts index 12047262c..c1ff695ba 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-object-actions-builder.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-v2-object-actions-builder.ts @@ -5,6 +5,8 @@ import { UpdateObjectAction, WorkspaceMigrationObjectActionV2, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { fromFlatObjectMetadataToFlatObjectMetadataWithoutFields } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/from-flat-object-metadata-to-flat-object-metadata-without-fields.util'; +import { getWorkspaceMigrationV2FieldCreateAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-field-actions'; import { getWorkspaceMigrationV2ObjectCreateAction, getWorkspaceMigrationV2ObjectDeleteAction, @@ -18,7 +20,20 @@ export const buildWorkspaceMigrationV2ObjectActions = ({ updatedObjectMetadata, }: CreatedDeletedUpdatedObjectMetadataInputMatrix): WorkspaceMigrationObjectActionV2[] => { const createdObjectActions = createdObjectMetadata.map( - getWorkspaceMigrationV2ObjectCreateAction, + (flatObjectMetadata) => { + const createFieldActions = flatObjectMetadata.flatFieldMetadatas.map( + (flatFieldMetadata) => + getWorkspaceMigrationV2FieldCreateAction({ + flatFieldMetadata, + flatObjectMetadata, + }), + ); + + return getWorkspaceMigrationV2ObjectCreateAction({ + flatObjectMetadata, + createFieldActions, + }); + }, ); const deletedObjectActions = deletedObjectMetadata.map( @@ -38,7 +53,8 @@ export const buildWorkspaceMigrationV2ObjectActions = ({ return { type: 'update_object', - flatObjectMetadata: to, + flatObjectMetadataWithoutFields: + fromFlatObjectMetadataToFlatObjectMetadataWithoutFields(to), updates: objectUpdatedProperties, }; }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-field-action-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-field-action-runner.service.ts index c38567b1d..f6ed5f837 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-field-action-runner.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-field-action-runner.service.ts @@ -1,5 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { In } from 'typeorm'; +import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { FlatFieldMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-field-metadata'; +import { FlatFieldMetadataPropertiesToCompare } from 'src/engine/workspace-manager/workspace-migration-v2/utils/flat-field-metadata-comparator.util'; import { CreateFieldAction, DeleteFieldAction, @@ -9,24 +12,59 @@ import { import { RunnerMethodForActionType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/runner-method-for-action-type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -@Injectable() export class WorkspaceMetadataFieldActionRunnerService implements RunnerMethodForActionType { - runDeleteFieldMetadataMigration = async ( - _action: WorkspaceMigrationActionRunnerArgs, - ) => { - return; + runDeleteFieldMetadataMigration = async ({ + action, + queryRunner, + }: WorkspaceMigrationActionRunnerArgs) => { + const fieldMetadataRepository = + queryRunner.manager.getRepository( + FieldMetadataEntity, + ); + + const { flatFieldMetadata } = action; + + await fieldMetadataRepository.delete({ + id: In([flatFieldMetadata.id]), + }); }; - runCreateFieldMetadataMigration = async ( - _action: WorkspaceMigrationActionRunnerArgs, - ) => { - return; + + runCreateFieldMetadataMigration = async ({ + action, + queryRunner, + }: WorkspaceMigrationActionRunnerArgs) => { + const fieldMetadataRepository = + queryRunner.manager.getRepository( + FieldMetadataEntity, + ); + + const { flatFieldMetadata } = action; + + // We need to defer here in case we create a relation the relationTargetFieldMetadataId might not already be created here + await fieldMetadataRepository.save(flatFieldMetadata); }; - runUpdateFieldMetadataMigration = async ( - _action: WorkspaceMigrationActionRunnerArgs, - ) => { - return; + runUpdateFieldMetadataMigration = async ({ + action, + queryRunner, + }: WorkspaceMigrationActionRunnerArgs) => { + const fieldMetadataRepository = + queryRunner.manager.getRepository( + FieldMetadataEntity, + ); + + const { flatFieldMetadata, updates } = action; + const update = updates.reduce< + Partial> + >((acc, { property, to }) => { + return { + ...acc, + [property]: to, + }; + }, {}); + + await fieldMetadataRepository.update(flatFieldMetadata.id, update); }; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-object-action-runner.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-object-action-runner.service.ts index e1ff88229..a68cb2a70 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-object-action-runner.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-object-action-runner.service.ts @@ -1,5 +1,9 @@ import { Injectable } from '@nestjs/common'; +import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; +import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { FlatObjectMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-object-metadata'; +import { FlatObjectMetadataPropertiesToCompare } from 'src/engine/workspace-manager/workspace-migration-v2/utils/flat-object-metadata-comparator.util'; import { CreateObjectAction, DeleteObjectAction, @@ -14,19 +18,61 @@ export class WorkspaceMetadataObjectActionRunnerService implements RunnerMethodForActionType { - runDeleteObjectMetadataMigration = async ( - _action: WorkspaceMigrationActionRunnerArgs, - ) => { - return; + constructor(private readonly dataSourceService: DataSourceService) {} + + runDeleteObjectMetadataMigration = async ({ + action: { flatObjectMetadataWithoutFields }, + queryRunner, + }: WorkspaceMigrationActionRunnerArgs) => { + const objectMetadataRepository = + queryRunner.manager.getRepository( + ObjectMetadataEntity, + ); + + await objectMetadataRepository.delete(flatObjectMetadataWithoutFields.id); }; - runCreateObjectMetadataMigration = async ( - _action: WorkspaceMigrationActionRunnerArgs, - ) => { - return; + + runCreateObjectMetadataMigration = async ({ + action: { flatObjectMetadataWithoutFields }, + queryRunner, + }: WorkspaceMigrationActionRunnerArgs) => { + const objectMetadataRepository = + queryRunner.manager.getRepository( + ObjectMetadataEntity, + ); + const lastDataSourceMetadata = + await this.dataSourceService.getLastDataSourceMetadataFromWorkspaceIdOrFail( + flatObjectMetadataWithoutFields.workspaceId, + ); + + await objectMetadataRepository.save({ + ...flatObjectMetadataWithoutFields, + dataSourceId: lastDataSourceMetadata.id, + targetTableName: 'DEPRECATED', + }); }; - runUpdateObjectMetadataMigration = async ( - _action: WorkspaceMigrationActionRunnerArgs, - ) => { - return; + + runUpdateObjectMetadataMigration = async ({ + action: { flatObjectMetadataWithoutFields, updates }, + queryRunner, + }: WorkspaceMigrationActionRunnerArgs) => { + const objectMetadataRepository = + queryRunner.manager.getRepository( + ObjectMetadataEntity, + ); + + const update = updates.reduce< + Partial> + >((acc, { property, to }) => { + return { + ...acc, + [property]: to, + }; + }, {}); + + await objectMetadataRepository.save({ + ...flatObjectMetadataWithoutFields, // could be stricter + ...update, + }); }; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts index 681aafedc..fd76dc13c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts @@ -2,6 +2,9 @@ import { Module } from '@nestjs/common'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; +import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; +import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; +import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module'; import { WorkspaceMetadataFieldActionRunnerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-field-action-runner.service'; import { WorkspaceMetadataIndexActionRunnerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-index-action-runner.service'; import { WorkspaceMetadataMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-migration-runner-service'; @@ -13,7 +16,13 @@ import { WorkspaceSchemaMigrationRunnerService } from 'src/engine/workspace-mana import { WorkspaceSchemaObjectActionRunnerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-schema-migration-runner/workspace-schema-object-action-runner.service'; @Module({ - imports: [FeatureFlagModule, TypeORMModule], + imports: [ + FeatureFlagModule, + TypeORMModule, + DataSourceModule, + WorkspaceMetadataVersionModule, + WorkspacePermissionsCacheModule, + ], providers: [ WorkspaceMetadataObjectActionRunnerService, WorkspaceMetadataIndexActionRunnerService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.service.ts index ce89cfb66..c82c3c06e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.service.ts @@ -3,6 +3,8 @@ import { InjectDataSource } from '@nestjs/typeorm'; import { DataSource } from 'typeorm'; +import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; +import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service'; import { WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2'; import { WorkspaceMetadataMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-metadata-migration-runner/workspace-metadata-migration-runner-service'; import { WorkspaceSchemaMigrationRunnerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-schema-migration-runner/workspace-schema-migration-runner.service'; @@ -12,6 +14,8 @@ export class WorkspaceMigrationRunnerV2Service { constructor( private readonly workspaceMetadataMigrationRunner: WorkspaceMetadataMigrationRunnerService, private readonly workspaceSchemaMigrationRunner: WorkspaceSchemaMigrationRunnerService, + private readonly workspaceMetadataVersionService: WorkspaceMetadataVersionService, + private readonly workspacePermissionsCacheService: WorkspacePermissionsCacheService, @InjectDataSource('core') private readonly coreDataSource: DataSource, ) {} @@ -34,6 +38,17 @@ export class WorkspaceMigrationRunnerV2Service { ]); await queryRunner.commitTransaction(); + const { workspaceId } = workspaceMigration; + + await this.workspaceMetadataVersionService.incrementMetadataVersion( + workspaceId, + ); + + await this.workspacePermissionsCacheService.recomputeRolesPermissionsCache( + { + workspaceId, + }, + ); } catch (error) { if (queryRunner.isTransactionActive) { await queryRunner.rollbackTransaction();