From 3ee93b5ec925890467e107c6ebdb5351daa95006 Mon Sep 17 00:00:00 2001 From: Weiko Date: Wed, 17 Jun 2026 15:56:27 +0200 Subject: [PATCH] feat(server): add isSystemSideEffect & merge createOneObject/createOneField side-effect migrations (#21673) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Context When an object is created via the metadata API, `createOneObject` creates its side-effect entities (INDEX view + viewFields, indexes, navigation menu item, "go to" command menu item, record-page fields view, page layout/tabs/widgets) across **three separate `validateBuildAndRunWorkspaceMigration` calls**, purely because the protection behavior (mutations → overrides, delete → deactivate, reset → reactivate) was keyed on *"owned by the standard app"*, forcing the side effects into batches with different application owners. This misrepresents ownership and breaks atomicity. This PR separates two orthogonal concepts: - **Ownership** (`applicationId`), the true owner: the caller's application (the workspace custom app today, 3rd-party apps later). - **Protection** (`isSystemSideEffect`), the row was generated by the system, so user mutations route to overrides, deletion becomes deactivation, and reset restores defaults. Once side effects are re-owned to the caller, the old `applicationId === standardApp` check can no longer tell an original side-effect row from a user-added one so a dedicated `isSystemSideEffect` flag carries the protection instead. This is **PR 1 of 2** (forward-only). It makes newly created objects and fields correct; existing workspaces are handled by a follow-up backfill (see *Out of scope*). ## What this PR does - **`isSystemSideEffect` column** on the 8 affected entities (`view`, `viewField`, `indexMetadata`, `commandMenuItem`, `pageLayout`, `pageLayoutTab`, `pageLayoutWidget`, `fieldMetadata`), with `@WasIntroducedInUpgrade` + an entry in the flat-entity property configuration (`toCompare: true`, read-only). - **Single atomic migration in `createOneObject`**: the three `validateBuildAndRunWorkspaceMigration` calls are merged into one, owned by the caller (`resolvedOwnerFlatApplication`) and the record-page view/fields, page layout, and navigation command item are re-owned to the caller and flagged `isSystemSideEffect: true`. `buildNavigationFlatCommandMenuItem` is parameterized with `applicationUniversalIdentifier` (no longer hardcoded to the standard app). - **Field-creation side effects** (`createManyFields`/`createOneField` already run as a single caller-owned migration, so no re-ownership/merge was needed): the auto-created viewField is flagged `isSystemSideEffect: true`, and a new field now also propagates to the object's **INDEX/table view** (added there as a **hidden** column, `isVisible: false`) in addition to the record-page FIELDS widget. The INDEX view is targeted directly by `key = INDEX` (it is not a page-layout widget), de-duplicated per `(viewId, fieldMetadataUniversalIdentifier)` to respect the per-view unique index. The unique-field index is likewise flagged the inverse relation field stays unflagged (`isSystem: false`). - **Protection predicate** extended: `isCallerOverridingEntity` and the removal/reset split strategies now treat `isSystemSideEffect` rows as protected even when caller-owned (route to overrides / deactivate / reset) and the page-layout-reset guards allow resetting flagged entities. - **Standard compute maps** set the flag consistently so a re-sync produces no diff (standard-object side effects stay `false`; per-object nav command items and custom-object base fields are `true`). - **Read-only GraphQL exposure** of `isSystemSideEffect` on the view / view-field / page-layout / tab / widget / command-menu-item DTOs (not exposed on create/update inputs). => Todo: needs to take this new flag into account. This is fine for now because isSystem remains on object/field. - **Fast instance command** (`2-14`) adding the 8 columns (`NOT NULL DEFAULT false`). ## Scope decisions - **`pageLayout` is not an `OverridableEntity`**, its own row has nothing user-overridable (all customization lives on tabs/widgets). It's dual-purpose (`RECORD_PAGE` side-effect vs. user `DASHBOARD`), so it gets `isSystemSideEffect` for protection only, no `overrides` jsonb. - **`navigationMenuItem` is out of scope.**: Those are side effects only for the metadata API and not marked as "system" (they can be deleted/updated etc...) - **`viewFieldGroup` is not a side effect**, it's only created via the explicit view-field-group API, never by object/field creation, so it gets no flag. ## Out of scope (follow-ups) **PR 2** — slow per-workspace backfill (re-own + flag existing side effects, recreate missing ones) and deterministic v5 identifiers for base fields / pageLayout / tab. Review in cubic --- ...00-refactor-navigation-commands.command.ts | 3 + ...call-recording-standard-objects.command.ts | 1 + ...menu-item-operations-or-throw.util.spec.ts | 3 + ...mand-menu-item-operations-or-throw.util.ts | 3 + ...1781600000000-add-is-system-side-effect.ts | 36 + ...de-effect-upgrade-command-name.constant.ts | 2 + .../instance-commands.constant.ts | 26 +- ...o-universal-flat-command-menu-item.util.ts | 1 + ...t-to-universal-flat-field-metadata.util.ts | 2 + ...x-manifest-to-universal-flat-index.util.ts | 1 + ...fest-to-universal-flat-page-layout.util.ts | 1 + ...-to-universal-flat-page-layout-tab.util.ts | 1 + ...-universal-flat-page-layout-widget.util.ts | 1 + ...ifest-to-universal-flat-view-field.util.ts | 1 + ...ew-manifest-to-universal-flat-view.util.ts | 1 + .../command-menu-item.service.ts | 1 + .../entities/command-menu-item.entity.ts | 7 + ...ation-command-menu-item-field.util.spec.ts | 1 + .../field-metadata/field-metadata.entity.ts | 7 + ...gation-flat-command-menu-item.util.spec.ts | 8 +- ...-navigation-flat-command-menu-item.util.ts | 7 +- ...m-entity-to-flat-command-menu-item.util.ts | 1 + ...o-flat-command-menu-item-to-create.util.ts | 1 + ...mmand-menu-item-to-update-or-throw.util.ts | 1 + ...configuration-by-metadata-name.constant.ts | 40 + ...split-entities-by-removal-strategy.util.ts | 4 +- .../split-entities-by-reset-strategy.util.ts | 4 +- .../__mocks__/get-flat-field-metadata.mock.ts | 1 + ...elation-target-flat-field-metadata-mock.ts | 1 + ...lat-field-metadatas-to-create.spec.ts.snap | 6 + ...rate-index-for-flat-field-metadata.util.ts | 1 + ...d-metadata-from-create-field-input.util.ts | 1 + .../__mocks__/get-flat-index-metadata.mock.ts | 1 + ...fter-flat-object-identifier-update.util.ts | 10 +- ...-to-flat-page-layout-tab-to-create.util.ts | 1 + ...page-layout-tab-to-update-or-throw.util.ts | 1 + ...tab-entity-to-flat-page-layout-tab.util.ts | 1 + ...-flat-page-layout-widget-to-create.util.ts | 1 + ...e-layout-widget-to-update-or-throw.util.ts | 2 + ...nput-to-flat-page-layout-to-create.util.ts | 1 + ...-layout-entity-to-flat-page-layout.util.ts | 1 + ...iew-field-group-to-update-or-throw.util.ts | 1 + ...ew-fields-from-fields-widgets.util.spec.ts | 213 ++- ...at-view-fields-from-fields-widgets.util.ts | 103 +- ...input-to-flat-view-field-to-create.util.ts | 1 + ...flat-view-field-to-update-or-throw.util.ts | 1 + ...-view-input-to-flat-view-to-create.util.ts | 1 + ...e-view-input-to-flat-view-or-throw.util.ts | 1 + ...ut-to-flat-view-to-update-or-throw.util.ts | 1 + .../index-metadata/index-metadata.entity.ts | 8 + .../services/index-metadata.service.ts | 1 + .../generate-flat-index.util.spec.ts | 1 + ...al-system-flat-field-metadatas.constant.ts | 8 + .../object-metadata.service.ts | 171 +- ...-field-metadatas-for-custom-object.util.ts | 1 + ...ld-default-index-for-custom-object.util.ts | 1 + ...fault-record-page-layout-to-create.util.ts | 3 + ...-record-page-fields-view-to-create.util.ts | 1 + ...compute-flat-view-fields-to-create.util.ts | 1 + .../entities/page-layout-tab.entity.ts | 8 + .../entities/page-layout-widget.entity.ts | 8 + .../entities/page-layout.entity.ts | 8 + .../services/page-layout-reset.service.ts | 9 +- .../services/page-layout-update.service.ts | 5 + .../is-caller-overriding-entity.util.spec.ts | 3 + .../utils/is-caller-overriding-entity.util.ts | 7 +- .../services/fields-widget-upsert.service.ts | 7 + .../view-field/entities/view-field.entity.ts | 8 + .../view/entities/view.entity.ts | 7 + .../services/view-widget-upsert.service.ts | 2 + .../view/services/view.service.ts | 1 + .../workspace-entity-manager.spec.ts | 1 + .../__tests__/workspace.repository.spec.ts | 1 + .../utils/get-page-layout-data-seeds.util.ts | 4 + .../get-page-layout-tab-data-seeds.util.ts | 1 + ...front-component-command-menu-items.util.ts | 1 + ...refill-workflow-command-menu-items.util.ts | 1 + ...andard-flat-command-menu-item-maps.util.ts | 3 + ...rd-command-menu-item-flat-metadata.util.ts | 1 + ...reate-standard-field-flat-metadata.util.ts | 2 + ...ndard-relation-field-flat-metadata.util.ts | 1 + ...reate-standard-index-flat-metadata.util.ts | 1 + ...dard-page-layout-tab-flat-metadata.util.ts | 3 + ...d-page-layout-widget-flat-metadata.util.ts | 3 + ...standard-page-layout-flat-metadata.util.ts | 3 +- ...dard-flat-view-field-metadata-maps.util.ts | 12 +- ...-standard-view-field-flat-metadata.util.ts | 1 + ...create-standard-view-flat-metadata.util.ts | 6 +- ...pdated-matrix-dispatcher.util.spec.ts.snap | 4 + ...universal-flat-index-to-flat-index.util.ts | 1 + ...-entity-to-scalar-flat-entity.util.spec.ts | 1 + .../get-field-metadata-entity.mock.ts | 1 + ...cessful-find-view.integration-spec.ts.snap | 84 + .../successful-find-view.integration-spec.ts | 11 +- ...rkspace-migration.integration-spec.ts.snap | 21 + ...ne-field-metadata.integration-spec.ts.snap | 23 +- ...ne-field-metadata.integration-spec.ts.snap | 46 +- ...es-field-metadata.integration-spec.ts.snap | 92 +- ...-metadata-enum-v2.integration-spec.ts.snap | 1610 +++++++++++++--- ...morph-relation-v2.integration-spec.ts.snap | 195 +- ...relation-creation.integration-spec.ts.snap | 516 ++++- ...bject-metadata-v2.integration-spec.ts.snap | 1667 ++++++++++++++++- 102 files changed, 4572 insertions(+), 530 deletions(-) create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-15/2-15-instance-command-fast-1781600000000-add-is-system-side-effect.ts create mode 100644 packages/twenty-server/src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant.ts diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-workspace-command-1775500013000-refactor-navigation-commands.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-workspace-command-1775500013000-refactor-navigation-commands.command.ts index aa0ce33c15..429abd1738 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-workspace-command-1775500013000-refactor-navigation-commands.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/1-21/1-21-workspace-command-1775500013000-refactor-navigation-commands.command.ts @@ -197,6 +197,8 @@ export class RefactorNavigationCommandsCommand extends ActiveOrSuspendedWorkspac objectMetadata, commandMenuItemId: v4(), applicationId: twentyStandardFlatApplication.id, + applicationUniversalIdentifier: + twentyStandardFlatApplication.universalIdentifier, workspaceId, position: nextPosition++, now, @@ -222,6 +224,7 @@ export class RefactorNavigationCommandsCommand extends ActiveOrSuspendedWorkspac applicationUniversalIdentifier: TWENTY_STANDARD_APPLICATION.universalIdentifier, workspaceId, + isSystemSideEffect: false, label: commandMenuItem.label, shortLabel: commandMenuItem.shortLabel, icon: commandMenuItem.icon, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts index 8c0ef145f8..a7e0dd74c2 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/2-10-workspace-command-1799000055000-sync-call-recording-standard-objects.command.ts @@ -122,6 +122,7 @@ const buildLegacyCalendarEventRecordingPreferenceFieldMetadata = ({ icon: 'IconSettingsAutomation', isActive: true, isSystem: false, + isSystemSideEffect: false, isNullable: false, isUnique: false, isUIEditable: true, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/__tests__/build-navigation-command-menu-item-operations-or-throw.util.spec.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/__tests__/build-navigation-command-menu-item-operations-or-throw.util.spec.ts index f2a0153e5c..35cae2d219 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/__tests__/build-navigation-command-menu-item-operations-or-throw.util.spec.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/__tests__/build-navigation-command-menu-item-operations-or-throw.util.spec.ts @@ -1,3 +1,4 @@ +import { TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER } from 'twenty-shared/application'; import { v5 } from 'uuid'; import { buildNavigationCommandMenuItemOperationsOrThrow } from 'src/database/commands/upgrade-version-command/2-10/utils/build-navigation-command-menu-item-operations-or-throw.util'; @@ -51,6 +52,8 @@ const buildExistingNavigationItem = ({ }, commandMenuItemId: `command-menu-item-${objectUniversalIdentifier}`, applicationId: APPLICATION_ID, + applicationUniversalIdentifier: + TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER, workspaceId: WORKSPACE_ID, position, now: NOW, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/build-navigation-command-menu-item-operations-or-throw.util.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/build-navigation-command-menu-item-operations-or-throw.util.ts index b3b62de7c5..b0bb1458ba 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/build-navigation-command-menu-item-operations-or-throw.util.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-10/utils/build-navigation-command-menu-item-operations-or-throw.util.ts @@ -1,3 +1,4 @@ +import { TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER } from 'twenty-shared/application'; import { isDefined } from 'twenty-shared/utils'; import { v4, v5 } from 'uuid'; @@ -63,6 +64,8 @@ export const buildNavigationCommandMenuItemOperationsOrThrow = ({ objectMetadata, commandMenuItemId: v4(), applicationId, + applicationUniversalIdentifier: + TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER, workspaceId, position: nextPosition++, now, diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-15/2-15-instance-command-fast-1781600000000-add-is-system-side-effect.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-15/2-15-instance-command-fast-1781600000000-add-is-system-side-effect.ts new file mode 100644 index 0000000000..be0f38ba42 --- /dev/null +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-15/2-15-instance-command-fast-1781600000000-add-is-system-side-effect.ts @@ -0,0 +1,36 @@ +import { QueryRunner } from 'typeorm'; + +import { RegisteredInstanceCommand } from 'src/engine/core-modules/upgrade/decorators/registered-instance-command.decorator'; +import { FastInstanceCommand } from 'src/engine/core-modules/upgrade/interfaces/fast-instance-command.interface'; + +const TABLES_WITH_IS_SYSTEM_SIDE_EFFECT = [ + 'view', + 'viewField', + 'indexMetadata', + 'commandMenuItem', + 'pageLayout', + 'pageLayoutTab', + 'pageLayoutWidget', + 'fieldMetadata', +] as const; + +@RegisteredInstanceCommand('2.15.0', 1781600000000) +export class AddIsSystemSideEffectFastInstanceCommand + implements FastInstanceCommand +{ + public async up(queryRunner: QueryRunner): Promise { + for (const table of TABLES_WITH_IS_SYSTEM_SIDE_EFFECT) { + await queryRunner.query( + `ALTER TABLE "core"."${table}" ADD COLUMN IF NOT EXISTS "isSystemSideEffect" boolean NOT NULL DEFAULT false`, + ); + } + } + + public async down(queryRunner: QueryRunner): Promise { + for (const table of TABLES_WITH_IS_SYSTEM_SIDE_EFFECT) { + await queryRunner.query( + `ALTER TABLE "core"."${table}" DROP COLUMN IF EXISTS "isSystemSideEffect"`, + ); + } + } +} diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant.ts new file mode 100644 index 0000000000..37ef38ae6d --- /dev/null +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant.ts @@ -0,0 +1,2 @@ +export const ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME = + '2.15.0_AddIsSystemSideEffectFastInstanceCommand_1781600000000'; diff --git a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts index 6a8999d359..71a68c5f16 100644 --- a/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts +++ b/packages/twenty-server/src/database/commands/upgrade-version-command/instance-commands.constant.ts @@ -18,6 +18,19 @@ import { DropWorkspaceVersionColumnFastInstanceCommand } from 'src/database/comm import { AddIsPreInstalledToApplicationRegistrationFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-1/2-1-instance-command-fast-1776886452831-add-is-pre-installed-to-application-registration'; import { AddProviderExecutedToAgentMessagePartFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-1/2-1-instance-command-fast-1777012800000-add-provider-executed-to-agent-message-part'; import { BackfillPageLayoutWidgetPositionSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-1/2-1-instance-command-slow-1795000002000-backfill-page-layout-widget-position'; +import { DropEmailingDomainDriverColumnFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-11/2-11-instance-command-fast-1780926908000-drop-emailing-domain-driver-column'; +import { DropIsCustomFromObjectAndFieldMetadataFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-12/2-12-instance-command-fast-1780579070012-drop-is-custom-from-object-and-field-metadata'; +import { ViewOverridableEntityFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-12/2-12-instance-command-fast-1781114009075-view-overridable-entity'; +import { AddEmailingDomainUnsubscribeHostFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1780088214774-add-emailing-domain-unsubscribe-host'; +import { AddArchivedAtToConnectedAccountFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781171103000-add-archived-at-to-connected-account'; +import { CreateMessageSuppressionCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781250000000-create-message-suppression-core-table'; +import { CommandMenuItemOverridableEntityFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781253016028-command-menu-item-overridable-entity'; +import { CreateUnsubscribeTopicCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781260000000-create-unsubscribe-topic-core-table'; +import { RenameIsUiReadOnlyToIsUiEditableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781277453604-rename-is-ui-read-only-to-is-ui-editable'; +import { BackfillNonUiCreatableStandardSystemObjectsSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-slow-1781277480000-backfill-non-ui-creatable-standard-system-objects'; +import { SetTableWidgetViewsVisibilityToWorkspaceSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-14/2-14-instance-command-slow-1781515653781-set-table-widget-views-visibility-to-workspace'; +import { AddIsSystemSideEffectFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-15/2-15-instance-command-fast-1781600000000-add-is-system-side-effect'; +import { BackfillConnectionSecuritySlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-15/2-15-instance-command-slow-1781461753981-backfill-connection-security'; import { AddCacheTokensToAgentChatThreadFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-2/2-2-instance-command-fast-1777455269302-add-cache-tokens-to-agent-chat-thread'; import { AddLogoToApplicationFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-2/2-2-instance-command-fast-1777539664664-add-logo-to-application'; import { AddSubFieldNameToViewSortEarlyFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-3/2-3-instance-command-fast-1747234200000-add-sub-field-name-to-view-sort'; @@ -59,18 +72,6 @@ import { EmailingDomainTenantStatusAndGlobalUniquenessFastInstanceCommand } from import { AddLogicFunctionExecutionModeFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-9/2-9-instance-command-fast-1799000030000-add-logic-function-execution-mode'; import { EncryptNonSecretApplicationVariableSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-9/2-9-instance-command-slow-1798400000000-encrypt-non-secret-application-variable'; import { MigrateAiModelPreferencesSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-9/2-9-instance-command-slow-1799000010000-migrate-ai-model-preferences'; -import { DropIsCustomFromObjectAndFieldMetadataFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-12/2-12-instance-command-fast-1780579070012-drop-is-custom-from-object-and-field-metadata'; -import { AddArchivedAtToConnectedAccountFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781171103000-add-archived-at-to-connected-account'; -import { DropEmailingDomainDriverColumnFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-11/2-11-instance-command-fast-1780926908000-drop-emailing-domain-driver-column'; -import { AddEmailingDomainUnsubscribeHostFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1780088214774-add-emailing-domain-unsubscribe-host'; -import { CreateMessageSuppressionCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781250000000-create-message-suppression-core-table'; -import { CreateUnsubscribeTopicCoreTableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781260000000-create-unsubscribe-topic-core-table'; -import { ViewOverridableEntityFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-12/2-12-instance-command-fast-1781114009075-view-overridable-entity'; -import { RenameIsUiReadOnlyToIsUiEditableFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781277453604-rename-is-ui-read-only-to-is-ui-editable'; -import { BackfillNonUiCreatableStandardSystemObjectsSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-slow-1781277480000-backfill-non-ui-creatable-standard-system-objects'; -import { CommandMenuItemOverridableEntityFastInstanceCommand } from 'src/database/commands/upgrade-version-command/2-13/2-13-instance-command-fast-1781253016028-command-menu-item-overridable-entity'; -import { SetTableWidgetViewsVisibilityToWorkspaceSlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-14/2-14-instance-command-slow-1781515653781-set-table-widget-views-visibility-to-workspace'; -import { BackfillConnectionSecuritySlowInstanceCommand } from 'src/database/commands/upgrade-version-command/2-15/2-15-instance-command-slow-1781461753981-backfill-connection-security'; export const INSTANCE_COMMANDS = [ AddViewFieldGroupIdIndexOnViewFieldFastInstanceCommand, @@ -143,5 +144,6 @@ export const INSTANCE_COMMANDS = [ BackfillNonUiCreatableStandardSystemObjectsSlowInstanceCommand, CommandMenuItemOverridableEntityFastInstanceCommand, SetTableWidgetViewsVisibilityToWorkspaceSlowInstanceCommand, + AddIsSystemSideEffectFastInstanceCommand, BackfillConnectionSecuritySlowInstanceCommand, ]; diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts index 0462fb40c2..f1a1443e7f 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-command-menu-item-manifest-to-universal-flat-command-menu-item.util.ts @@ -46,6 +46,7 @@ export const fromCommandMenuItemManifestToUniversalFlatCommandMenuItem = ({ workflowVersionId: null, pageLayoutUniversalIdentifier: null, isActive: true, + isSystemSideEffect: false, universalOverrides: null, createdAt: now, updatedAt: now, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts index 1c4e86cf70..a1b6b877e6 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-field-manifest-to-universal-flat-field-metadata.util.ts @@ -94,6 +94,8 @@ export const fromFieldManifestToUniversalFlatFieldMetadata = ({ universalSettings: fieldManifest.universalSettings ?? null, isActive: true, isSystem: fieldManifest.name in PARTIAL_SYSTEM_FLAT_FIELD_METADATAS, + isSystemSideEffect: + fieldManifest.name in PARTIAL_SYSTEM_FLAT_FIELD_METADATAS, isUIEditable: fieldManifest.isUIEditable ?? true, isNullable: fieldManifest.isNullable ?? true, isUnique: fieldManifest.isUnique ?? false, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-index-manifest-to-universal-flat-index.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-index-manifest-to-universal-flat-index.util.ts index 1642294122..5172ac7adc 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-index-manifest-to-universal-flat-index.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-index-manifest-to-universal-flat-index.util.ts @@ -129,6 +129,7 @@ export const fromIndexManifestToUniversalFlatIndex = ({ indexWhereClause: null, isCustom: false, isUnique: indexManifest.isUnique ?? false, + isSystemSideEffect: false, universalFlatIndexFieldMetadatas, }, }); diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-manifest-to-universal-flat-page-layout.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-manifest-to-universal-flat-page-layout.util.ts index becc5fe0c7..d3bfaa7f6b 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-manifest-to-universal-flat-page-layout.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-manifest-to-universal-flat-page-layout.util.ts @@ -24,6 +24,7 @@ export const fromPageLayoutManifestToUniversalFlatPageLayout = ({ pageLayoutManifest.defaultTabToFocusOnMobileAndSidePanelUniversalIdentifier ?? null, tabUniversalIdentifiers: [], + isSystemSideEffect: false, createdAt: now, updatedAt: now, deletedAt: null, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-tab-manifest-to-universal-flat-page-layout-tab.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-tab-manifest-to-universal-flat-page-layout-tab.util.ts index fa367b91aa..bb821dba59 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-tab-manifest-to-universal-flat-page-layout-tab.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-tab-manifest-to-universal-flat-page-layout-tab.util.ts @@ -24,6 +24,7 @@ export const fromPageLayoutTabManifestToUniversalFlatPageLayoutTab = ({ layoutMode: pageLayoutTabManifest.layoutMode ?? PageLayoutTabLayoutMode.GRID, isActive: true, + isSystemSideEffect: false, widgetUniversalIdentifiers: [], createdAt: now, updatedAt: now, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-widget-manifest-to-universal-flat-page-layout-widget.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-widget-manifest-to-universal-flat-page-layout-widget.util.ts index 9cf78a04b9..883bfab689 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-widget-manifest-to-universal-flat-page-layout-widget.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-page-layout-widget-manifest-to-universal-flat-page-layout-widget.util.ts @@ -21,6 +21,7 @@ export const fromPageLayoutWidgetManifestToUniversalFlatPageLayoutWidget = ({ pageLayoutTabUniversalIdentifier, title: pageLayoutWidgetManifest.title, isActive: true, + isSystemSideEffect: false, type: pageLayoutWidgetManifest.type as WidgetType, objectMetadataUniversalIdentifier: pageLayoutWidgetManifest.objectUniversalIdentifier ?? null, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-field-manifest-to-universal-flat-view-field.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-field-manifest-to-universal-flat-view-field.util.ts index 836a5ab299..4cc0a452f8 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-field-manifest-to-universal-flat-view-field.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-field-manifest-to-universal-flat-view-field.util.ts @@ -23,6 +23,7 @@ export const fromViewFieldManifestToUniversalFlatViewField = ({ viewFieldManifest.viewFieldGroupUniversalIdentifier ?? null, isVisible: viewFieldManifest.isVisible ?? true, isActive: true, + isSystemSideEffect: false, size: viewFieldManifest.size ?? 0, position: viewFieldManifest.position, aggregateOperation: viewFieldManifest.aggregateOperation ?? null, diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-manifest-to-universal-flat-view.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-manifest-to-universal-flat-view.util.ts index fb72e567a8..1491e084ad 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-manifest-to-universal-flat-view.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-view-manifest-to-universal-flat-view.util.ts @@ -42,6 +42,7 @@ export const fromViewManifestToUniversalFlatView = ({ anyFieldFilterValue: null, createdByUserWorkspaceId: null, isActive: true, + isSystemSideEffect: false, universalOverrides: null, viewFieldUniversalIdentifiers: [], viewFilterUniversalIdentifiers: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.service.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.service.ts index 01ab54e29a..c1f0545d18 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/command-menu-item.service.ts @@ -356,6 +356,7 @@ export class CommandMenuItemService { flatCommandMenuItemToDelete.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: workspaceCustomFlatApplication.universalIdentifier, + isSystemSideEffect: flatCommandMenuItemToDelete.isSystemSideEffect, }); const deactivatedFlatCommandMenuItem = { diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts index ece709d96c..8556535d7c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity.ts @@ -14,6 +14,7 @@ import { type SerializedRelation } from 'twenty-shared/types'; import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; import { type CommandMenuItemPayload } from 'src/engine/metadata-modules/command-menu-item/dtos/command-menu-item-payload.union'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum'; import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum'; import { FrontComponentEntity } from 'src/engine/metadata-modules/front-component/entities/front-component.entity'; @@ -129,6 +130,12 @@ export class CommandMenuItemEntity @JoinColumn({ name: 'pageLayoutId' }) pageLayout: Relation | null; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/utils/__tests__/interpolate-navigation-command-menu-item-field.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/utils/__tests__/interpolate-navigation-command-menu-item-field.util.spec.ts index 52530c259e..d81b8a7e22 100644 --- a/packages/twenty-server/src/engine/metadata-modules/command-menu-item/utils/__tests__/interpolate-navigation-command-menu-item-field.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/command-menu-item/utils/__tests__/interpolate-navigation-command-menu-item-field.util.spec.ts @@ -35,6 +35,7 @@ const baseCommandMenuItem = { payload: { objectMetadataItemId: 'obj-id-1' }, workspaceId: 'ws-id-1', isActive: true, + isSystemSideEffect: false, createdAt: new Date(), updatedAt: new Date(), }; 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 00b59f461f..45b1a069f3 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 @@ -22,6 +22,7 @@ import { import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; import { WasRemovedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { RENAME_IS_UI_READ_ONLY_TO_IS_UI_EDITABLE_UPGRADE_COMMAND_NAME } from 'src/engine/metadata-modules/object-metadata/constants/rename-is-ui-read-only-to-is-ui-editable-upgrade-command-name.constant'; import { type FieldStandardOverridesDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-standard-overrides.dto'; import { AssignIfIsGivenFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/assign-if-is-given-field-metadata-type.type'; @@ -122,6 +123,12 @@ export class FieldMetadataEntity< @Column({ default: false }) isSystem: boolean; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @WasIntroducedInUpgrade({ upgradeCommandName: RENAME_IS_UI_READ_ONLY_TO_IS_UI_EDITABLE_UPGRADE_COMMAND_NAME, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/__tests__/build-navigation-flat-command-menu-item.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/__tests__/build-navigation-flat-command-menu-item.util.spec.ts index c6d9da6ab4..7f0279d217 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/__tests__/build-navigation-flat-command-menu-item.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/__tests__/build-navigation-flat-command-menu-item.util.spec.ts @@ -10,7 +10,6 @@ import { NAVIGATION_INTERPOLATED_LABEL, NAVIGATION_INTERPOLATED_SHORT_LABEL, } from 'src/engine/metadata-modules/flat-command-menu-item/utils/build-navigation-flat-command-menu-item.util'; -import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications'; const NAVIGATION_COMMAND_UUID_NAMESPACE = 'b31830da-2ae0-48eb-a915-12fa4ab96dd3'; @@ -26,6 +25,7 @@ const baseArgs = { objectMetadata: baseObjectMetadata, commandMenuItemId: 'cmd-id-1', applicationId: 'app-id-1', + applicationUniversalIdentifier: 'app-universal-1', workspaceId: 'ws-id-1', position: 5, now: '2026-01-01T00:00:00.000Z', @@ -86,12 +86,10 @@ describe('buildNavigationFlatCommandMenuItem', () => { expect(result.position).toBe(5); }); - it('should set applicationUniversalIdentifier from TWENTY_STANDARD_APPLICATION', () => { + it('should set applicationUniversalIdentifier from the provided argument', () => { const result = buildNavigationFlatCommandMenuItem(baseArgs); - expect(result.applicationUniversalIdentifier).toBe( - TWENTY_STANDARD_APPLICATION.universalIdentifier, - ); + expect(result.applicationUniversalIdentifier).toBe('app-universal-1'); }); it('should set engineComponentKey to NAVIGATION', () => { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/build-navigation-flat-command-menu-item.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/build-navigation-flat-command-menu-item.util.ts index c6d763101d..8120c89dfe 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/build-navigation-flat-command-menu-item.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/build-navigation-flat-command-menu-item.util.ts @@ -6,7 +6,6 @@ import { v5 } from 'uuid'; import { CommandMenuItemAvailabilityType } from 'src/engine/metadata-modules/command-menu-item/enums/command-menu-item-availability-type.enum'; import { EngineComponentKey } from 'src/engine/metadata-modules/command-menu-item/enums/engine-component-key.enum'; import { type FlatCommandMenuItem } from 'src/engine/metadata-modules/flat-command-menu-item/types/flat-command-menu-item.type'; -import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications'; export const NAVIGATION_COMMAND_UUID_NAMESPACE = 'b31830da-2ae0-48eb-a915-12fa4ab96dd3'; @@ -51,6 +50,7 @@ export const buildNavigationFlatCommandMenuItem = ({ objectMetadata, commandMenuItemId, applicationId, + applicationUniversalIdentifier, workspaceId, position, now, @@ -63,6 +63,7 @@ export const buildNavigationFlatCommandMenuItem = ({ }; commandMenuItemId: string; applicationId: string; + applicationUniversalIdentifier: string; workspaceId: string; position: number; now: string; @@ -82,8 +83,7 @@ export const buildNavigationFlatCommandMenuItem = ({ id: commandMenuItemId, universalIdentifier, applicationId, - applicationUniversalIdentifier: - TWENTY_STANDARD_APPLICATION.universalIdentifier, + applicationUniversalIdentifier, workspaceId, label: NAVIGATION_INTERPOLATED_LABEL, shortLabel: NAVIGATION_INTERPOLATED_SHORT_LABEL, @@ -105,6 +105,7 @@ export const buildNavigationFlatCommandMenuItem = ({ pageLayoutId: null, pageLayoutUniversalIdentifier: null, isActive: true, + isSystemSideEffect: true, overrides: null, universalOverrides: null, createdAt: now, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts index 8850c73053..00d08f250d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-command-menu-item-entity-to-flat-command-menu-item.util.ts @@ -116,6 +116,7 @@ export const fromCommandMenuItemEntityToFlatCommandMenuItem = ({ pageLayoutId: commandMenuItemEntity.pageLayoutId, pageLayoutUniversalIdentifier, isActive: commandMenuItemEntity.isActive, + isSystemSideEffect: commandMenuItemEntity.isSystemSideEffect, overrides: commandMenuItemEntity.overrides, universalOverrides, }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts index df3794910e..6c6446eab9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-create-command-menu-item-input-to-flat-command-menu-item-to-create.util.ts @@ -77,6 +77,7 @@ export const fromCreateCommandMenuItemInputToFlatCommandMenuItemToCreate = ({ applicationId: flatApplication.id, applicationUniversalIdentifier: flatApplication.universalIdentifier, isActive: true, + isSystemSideEffect: false, overrides: null, universalOverrides: null, createdAt: now, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-update-command-menu-item-input-to-flat-command-menu-item-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-update-command-menu-item-input-to-flat-command-menu-item-to-update-or-throw.util.ts index d1f5652ef5..49b308211e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-update-command-menu-item-input-to-flat-command-menu-item-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-command-menu-item/utils/from-update-command-menu-item-input-to-flat-command-menu-item-to-update-or-throw.util.ts @@ -53,6 +53,7 @@ export const fromUpdateCommandMenuItemInputToFlatCommandMenuItemToUpdateOrThrow entityApplicationUniversalIdentifier: existingFlatCommandMenuItem.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingFlatCommandMenuItem.isSystemSideEffect, }); const { overrides, updatedEditableProperties } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts index f23e43d37b..e643f9dcd2 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts @@ -40,6 +40,11 @@ type MetadataEntityPropertyConfiguration< export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { fieldMetadata: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, defaultValue: { toCompare: true, toStringify: true, @@ -265,6 +270,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, view: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, key: { toCompare: true, toStringify: false, universalProperty: undefined }, deletedAt: { toCompare: true, @@ -445,6 +455,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, viewField: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, isVisible: { toCompare: true, toStringify: false, @@ -550,6 +565,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, index: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, indexType: { toCompare: true, toStringify: false, @@ -893,6 +913,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, pageLayout: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, name: { toCompare: true, toStringify: false, universalProperty: undefined }, type: { toCompare: true, toStringify: false, universalProperty: undefined }, objectMetadataId: { @@ -923,6 +948,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, pageLayoutWidget: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, title: { toCompare: true, toStringify: false, @@ -997,6 +1027,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, pageLayoutTab: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, title: { toCompare: true, toStringify: false, @@ -1092,6 +1127,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = { }, }, commandMenuItem: { + isSystemSideEffect: { + toCompare: false, + toStringify: false, + universalProperty: undefined, + }, label: { toCompare: true, toStringify: false, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-removal-strategy.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-removal-strategy.util.ts index 33602a54b9..134fb9ee25 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-removal-strategy.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-removal-strategy.util.ts @@ -1,5 +1,6 @@ type EntityWithApplicationIdentifier = { applicationUniversalIdentifier: string; + isSystemSideEffect?: boolean; }; export const splitEntitiesByRemovalStrategy = < @@ -22,7 +23,8 @@ export const splitEntitiesByRemovalStrategy = < for (const entity of entitiesToRemove) { if ( entity.applicationUniversalIdentifier === - workspaceCustomApplicationUniversalIdentifier + workspaceCustomApplicationUniversalIdentifier && + !entity.isSystemSideEffect ) { toHardDelete.push(entity); } else { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-reset-strategy.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-reset-strategy.util.ts index 16ee1038ed..f08b4df79f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-reset-strategy.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/split-entities-by-reset-strategy.util.ts @@ -2,6 +2,7 @@ type EntityWithApplicationIdentifierAndOverrides = { applicationUniversalIdentifier: string; isActive: boolean; overrides: unknown; + isSystemSideEffect?: boolean; }; export const splitEntitiesByResetStrategy = < @@ -28,7 +29,8 @@ export const splitEntitiesByResetStrategy = < for (const entity of entities) { if ( entity.applicationUniversalIdentifier === - workspaceCustomApplicationUniversalIdentifier + workspaceCustomApplicationUniversalIdentifier && + !entity.isSystemSideEffect ) { toHardDelete.push(entity); } else { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts index 3f87b4085c..d5c5156176 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock.ts @@ -32,6 +32,7 @@ export const getFlatFieldMetadataMock = ( icon: 'icon', id: faker.string.uuid(), isActive: true, + isSystemSideEffect: false, name: 'flatFieldMetadataName', label: 'flat field metadata label', isNullable: true, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts index 20486963a3..f2f640ffe0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__mocks__/get-morph-or-relation-target-flat-field-metadata-mock.ts @@ -32,6 +32,7 @@ export const getRelationTargetFlatFieldMetadataMock = ({ const createdAt = '2024-01-01T00:00:00.000Z'; return { + isSystemSideEffect: false, calendarViewIds: [], mainGroupByFieldMetadataViewIds: [], viewFilterIds: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap index 68c65fa01b..231e563869 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/__snapshots__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts.snap @@ -127,6 +127,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewUniversalIdentifiers": [], @@ -161,6 +162,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewUniversalIdentifiers": [], @@ -197,6 +199,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewUniversalIdentifiers": [], @@ -231,6 +234,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewUniversalIdentifiers": [], @@ -263,6 +267,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "indexType": "BTREE", "indexWhereClause": null, "isCustom": true, + "isSystemSideEffect": true, "isUnique": false, "name": "IDX_f687e4e4252800dddd8e5518362", "objectMetadataUniversalIdentifier": Any, @@ -285,6 +290,7 @@ exports[`fromCreateFieldInputToFlatFieldMetadatasToCreate MORPH_RELATION test su "indexType": "BTREE", "indexWhereClause": null, "isCustom": true, + "isSystemSideEffect": true, "isUnique": false, "name": "IDX_cb15d901e889e25d0a9acecb595", "objectMetadataUniversalIdentifier": Any, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts index 01c8278328..b286ac8595 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/generate-index-for-flat-field-metadata.util.ts @@ -38,6 +38,7 @@ export const generateIndexForFlatFieldMetadata = ({ indexWhereClause: null, isCustom: true, isUnique: flatFieldMetadata.isUnique ?? false, + isSystemSideEffect: true, objectMetadataUniversalIdentifier: flatObjectMetadata.universalIdentifier, universalIdentifier: indexMetadataUniversalIdentifier, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts index 63d06b57a3..63aabbf5cc 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/get-default-flat-field-metadata-from-create-field-input.util.ts @@ -41,6 +41,7 @@ export const getDefaultFlatFieldMetadata = ({ createFieldInput.isRemoteCreation, ), isSystem: createFieldInput.isSystem ?? false, + isSystemSideEffect: false, isUnique: createFieldInput.isUnique ?? false, label: createFieldInput.label, name: createFieldInput.name, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts index edb83567cc..ada1d2077d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts @@ -27,6 +27,7 @@ export const getFlatIndexMetadataMock = ( indexWhereClause: null, isCustom: false, isUnique: false, + isSystemSideEffect: false, name: 'defaultFlatIndexMetadataName', updatedAt: createdAt, workspaceId: faker.string.uuid(), diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts index 61b76de792..c20ba8a9f3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts @@ -71,6 +71,7 @@ export const recomputeViewFieldIdentifierAfterFlatObjectIdentifierUpdate = ({ position: lowestViewFieldPosition - 1, isVisible: true, isActive: true, + isSystemSideEffect: flatView.isSystemSideEffect, size: DEFAULT_VIEW_FIELD_SIZE, viewId: flatView.id, viewUniversalIdentifier: flatView.universalIdentifier, @@ -92,11 +93,16 @@ export const recomputeViewFieldIdentifierAfterFlatObjectIdentifierUpdate = ({ accumulator.flatViewFieldsToCreate.push(flatViewFieldToCreate); } else if ( - labelMetadataIdentifierViewField.position > lowestViewFieldPosition + labelMetadataIdentifierViewField.position > lowestViewFieldPosition || + labelMetadataIdentifierViewField.isVisible === false ) { const updatedFlatViewField = { ...labelMetadataIdentifierViewField, - position: lowestViewFieldPosition - 1, + position: + labelMetadataIdentifierViewField.position > lowestViewFieldPosition + ? lowestViewFieldPosition - 1 + : labelMetadataIdentifierViewField.position, + isVisible: true, }; accumulator.flatViewFieldsToUpdate.push(updatedFlatViewField); diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-create-page-layout-tab-input-to-flat-page-layout-tab-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-create-page-layout-tab-input-to-flat-page-layout-tab-to-create.util.ts index c78ebefd94..f5a05b4a17 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-create-page-layout-tab-input-to-flat-page-layout-tab-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-create-page-layout-tab-input-to-flat-page-layout-tab-to-create.util.ts @@ -45,6 +45,7 @@ export const fromCreatePageLayoutTabInputToFlatPageLayoutTabToCreate = ({ title: createPageLayoutTabInput.title, position: createPageLayoutTabInput.position ?? 0, isActive: true, + isSystemSideEffect: false, pageLayoutId: createPageLayoutTabInput.pageLayoutId, pageLayoutUniversalIdentifier, workspaceId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-update-page-layout-tab-input-to-flat-page-layout-tab-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-update-page-layout-tab-input-to-flat-page-layout-tab-to-update-or-throw.util.ts index 43a96ad770..b607972113 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-update-page-layout-tab-input-to-flat-page-layout-tab-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/from-update-page-layout-tab-input-to-flat-page-layout-tab-to-update-or-throw.util.ts @@ -60,6 +60,7 @@ export const fromUpdatePageLayoutTabInputToFlatPageLayoutTabToUpdateOrThrow = ({ entityApplicationUniversalIdentifier: existingFlatPageLayoutTabToUpdate.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingFlatPageLayoutTabToUpdate.isSystemSideEffect, }); const { overrides, updatedEditableProperties } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts index 673a0d1622..b7e7ad53b1 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-tab/utils/transform-page-layout-tab-entity-to-flat-page-layout-tab.util.ts @@ -42,6 +42,7 @@ export const transformPageLayoutTabEntityToFlatPageLayoutTab = ({ title: pageLayoutTabEntity.title, position: pageLayoutTabEntity.position, isActive: pageLayoutTabEntity.isActive, + isSystemSideEffect: pageLayoutTabEntity.isSystemSideEffect, pageLayoutId: pageLayoutTabEntity.pageLayoutId, workspaceId: pageLayoutTabEntity.workspaceId, universalIdentifier: pageLayoutTabEntity.universalIdentifier, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts index 03b65bc812..656710defb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-create-page-layout-widget-input-to-flat-page-layout-widget-to-create.util.ts @@ -65,6 +65,7 @@ export const fromCreatePageLayoutWidgetInputToFlatPageLayoutWidgetToCreate = ({ id: pageLayoutWidgetId, ...commonProperties, isActive: true, + isSystemSideEffect: false, workspaceId, createdAt, updatedAt: createdAt, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-update-page-layout-widget-input-to-flat-page-layout-widget-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-update-page-layout-widget-input-to-flat-page-layout-widget-to-update-or-throw.util.ts index f167853e6a..720ed12418 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-update-page-layout-widget-input-to-flat-page-layout-widget-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout-widget/utils/from-update-page-layout-widget-input-to-flat-page-layout-widget-to-update-or-throw.util.ts @@ -89,6 +89,8 @@ export const fromUpdatePageLayoutWidgetInputToFlatPageLayoutWidgetToUpdateOrThro entityApplicationUniversalIdentifier: existingFlatPageLayoutWidgetToUpdate.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: + existingFlatPageLayoutWidgetToUpdate.isSystemSideEffect, }); const { overrides, updatedEditableProperties } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/from-create-page-layout-input-to-flat-page-layout-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/from-create-page-layout-input-to-flat-page-layout-to-create.util.ts index 2d1187bcc0..ae9821293c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/from-create-page-layout-input-to-flat-page-layout-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/from-create-page-layout-input-to-flat-page-layout-to-create.util.ts @@ -44,6 +44,7 @@ export const fromCreatePageLayoutInputToFlatPageLayoutToCreate = ({ type: createPageLayoutInput.type ?? PageLayoutType.RECORD_PAGE, objectMetadataId: createPageLayoutInput.objectMetadataId ?? null, objectMetadataUniversalIdentifier, + isSystemSideEffect: false, workspaceId, createdAt, updatedAt: createdAt, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts index a02917c37d..adea93a297 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-page-layout/utils/transform-page-layout-entity-to-flat-page-layout.util.ts @@ -64,6 +64,7 @@ export const transformPageLayoutEntityToFlatPageLayout = ({ name: pageLayoutEntity.name, type: pageLayoutEntity.type, objectMetadataId: pageLayoutEntity.objectMetadataId, + isSystemSideEffect: pageLayoutEntity.isSystemSideEffect, workspaceId: pageLayoutEntity.workspaceId, universalIdentifier: pageLayoutEntity.universalIdentifier, applicationId: pageLayoutEntity.applicationId, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field-group/utils/from-update-view-field-group-input-to-flat-view-field-group-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field-group/utils/from-update-view-field-group-input-to-flat-view-field-group-to-update-or-throw.util.ts index 3d16c2f631..12bb5d39ad 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field-group/utils/from-update-view-field-group-input-to-flat-view-field-group-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field-group/utils/from-update-view-field-group-input-to-flat-view-field-group-to-update-or-throw.util.ts @@ -59,6 +59,7 @@ export const fromUpdateViewFieldGroupInputToFlatViewFieldGroupToUpdateOrThrow = entityApplicationUniversalIdentifier: existingFlatViewFieldGroupToUpdate.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: false, }); const { overrides, updatedEditableProperties } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/__tests__/compute-flat-view-fields-from-fields-widgets.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/__tests__/compute-flat-view-fields-from-fields-widgets.util.spec.ts index 174271d552..ea8e0bb678 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/__tests__/compute-flat-view-fields-from-fields-widgets.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/__tests__/compute-flat-view-fields-from-fields-widgets.util.spec.ts @@ -1,3 +1,5 @@ +import { ViewKey } from 'twenty-shared/types'; + import { type FlatPageLayoutWidgetMaps } from 'src/engine/metadata-modules/flat-page-layout-widget/types/flat-page-layout-widget-maps.type'; import { type FlatViewFieldGroupMaps } from 'src/engine/metadata-modules/flat-view-field-group/types/flat-view-field-group-maps.type'; import { DEFAULT_VIEW_FIELD_SIZE } from 'src/engine/metadata-modules/flat-view-field/constants/default-view-field-size.constant'; @@ -21,13 +23,30 @@ const buildEmptyFlatEntityMaps = () => ({ }); const buildFlatViewMaps = ( - entries: { id: string; universalIdentifier: string }[] = [], + entries: { + id: string; + universalIdentifier: string; + key?: ViewKey | null; + isActive?: boolean; + isSystemSideEffect?: boolean; + objectMetadataUniversalIdentifier?: string | null; + deletedAt?: string | null; + }[] = [], ): FlatViewMaps => ({ byUniversalIdentifier: Object.fromEntries( entries.map((entry) => [ entry.universalIdentifier, - { universalIdentifier: entry.universalIdentifier, id: entry.id }, + { + universalIdentifier: entry.universalIdentifier, + id: entry.id, + key: entry.key ?? null, + isActive: entry.isActive ?? true, + isSystemSideEffect: entry.isSystemSideEffect ?? false, + objectMetadataUniversalIdentifier: + entry.objectMetadataUniversalIdentifier ?? null, + deletedAt: entry.deletedAt ?? null, + }, ]), ), universalIdentifierById: Object.fromEntries( @@ -713,6 +732,196 @@ describe('computeFlatViewFieldsFromFieldsWidgets', () => { }); }); + describe('isSystemSideEffect inheritance from parent view', () => { + it('should flag the created view field when the parent view is a system side effect', () => { + const result = computeFlatViewFieldsFromFieldsWidgets({ + fieldsToCreate: [ + { + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + fieldMetadataUniversalIdentifier: 'field-uid-1', + }, + ], + flatPageLayoutWidgetMaps: buildFlatPageLayoutWidgetMaps([ + buildFieldsWidget(), + ]), + flatViewFieldMaps: buildFlatViewFieldMaps(), + flatViewMaps: buildFlatViewMaps([ + { + id: VIEW_ID, + universalIdentifier: VIEW_UNIVERSAL_IDENTIFIER, + isSystemSideEffect: true, + }, + ]), + flatViewFieldGroupMaps: buildFlatViewFieldGroupMaps(), + applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + }); + + expect(result).toHaveLength(1); + expect(result[0].isSystemSideEffect).toBe(true); + }); + + it('should not flag the created view field when the parent view is not a system side effect', () => { + const result = computeFlatViewFieldsFromFieldsWidgets({ + fieldsToCreate: [ + { + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + fieldMetadataUniversalIdentifier: 'field-uid-1', + }, + ], + flatPageLayoutWidgetMaps: buildFlatPageLayoutWidgetMaps([ + buildFieldsWidget(), + ]), + flatViewFieldMaps: buildFlatViewFieldMaps(), + flatViewMaps: buildFlatViewMaps([ + { + id: VIEW_ID, + universalIdentifier: VIEW_UNIVERSAL_IDENTIFIER, + isSystemSideEffect: false, + }, + ]), + flatViewFieldGroupMaps: buildFlatViewFieldGroupMaps(), + applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + }); + + expect(result).toHaveLength(1); + expect(result[0].isSystemSideEffect).toBe(false); + }); + }); + + describe('INDEX view propagation', () => { + it('should add a hidden, flagged view field to the object INDEX view even without a fields widget', () => { + const result = computeFlatViewFieldsFromFieldsWidgets({ + fieldsToCreate: [ + { + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + fieldMetadataUniversalIdentifier: 'field-uid-1', + }, + ], + flatPageLayoutWidgetMaps: + buildEmptyFlatEntityMaps() as unknown as FlatPageLayoutWidgetMaps, + flatViewFieldMaps: buildFlatViewFieldMaps(), + flatViewMaps: buildFlatViewMaps([ + { + id: 'index-view-db-id', + universalIdentifier: 'index-view-uid', + key: ViewKey.INDEX, + isSystemSideEffect: true, + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + }, + ]), + flatViewFieldGroupMaps: buildFlatViewFieldGroupMaps(), + applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + }); + + expect(result).toHaveLength(1); + expect(result[0]).toMatchObject({ + viewUniversalIdentifier: 'index-view-uid', + fieldMetadataUniversalIdentifier: 'field-uid-1', + isVisible: false, + isSystemSideEffect: true, + }); + }); + + it('should not target a standalone non-INDEX view without a widget', () => { + const result = computeFlatViewFieldsFromFieldsWidgets({ + fieldsToCreate: [ + { + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + fieldMetadataUniversalIdentifier: 'field-uid-1', + }, + ], + flatPageLayoutWidgetMaps: + buildEmptyFlatEntityMaps() as unknown as FlatPageLayoutWidgetMaps, + flatViewFieldMaps: buildFlatViewFieldMaps(), + flatViewMaps: buildFlatViewMaps([ + { + id: 'plain-view-db-id', + universalIdentifier: 'plain-view-uid', + key: null, + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + }, + ]), + flatViewFieldGroupMaps: buildFlatViewFieldGroupMaps(), + applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + }); + + expect(result).toEqual([]); + }); + + it('should skip an inactive or soft-deleted INDEX view', () => { + const result = computeFlatViewFieldsFromFieldsWidgets({ + fieldsToCreate: [ + { + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + fieldMetadataUniversalIdentifier: 'field-uid-1', + }, + ], + flatPageLayoutWidgetMaps: + buildEmptyFlatEntityMaps() as unknown as FlatPageLayoutWidgetMaps, + flatViewFieldMaps: buildFlatViewFieldMaps(), + flatViewMaps: buildFlatViewMaps([ + { + id: 'inactive-index-view-db-id', + universalIdentifier: 'inactive-index-view-uid', + key: ViewKey.INDEX, + isActive: false, + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + }, + { + id: 'deleted-index-view-db-id', + universalIdentifier: 'deleted-index-view-uid', + key: ViewKey.INDEX, + deletedAt: '2024-01-01T00:00:00.000Z', + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + }, + ]), + flatViewFieldGroupMaps: buildFlatViewFieldGroupMaps(), + applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + }); + + expect(result).toEqual([]); + }); + + it('should not duplicate a field when a fields widget and the INDEX view share the same view', () => { + const result = computeFlatViewFieldsFromFieldsWidgets({ + fieldsToCreate: [ + { + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + fieldMetadataUniversalIdentifier: 'field-uid-1', + }, + ], + flatPageLayoutWidgetMaps: buildFlatPageLayoutWidgetMaps([ + buildFieldsWidget({ viewId: 'index-view-db-id', isVisible: true }), + ]), + flatViewFieldMaps: buildFlatViewFieldMaps(), + flatViewMaps: buildFlatViewMaps([ + { + id: 'index-view-db-id', + universalIdentifier: 'index-view-uid', + key: ViewKey.INDEX, + objectMetadataUniversalIdentifier: + OBJECT_METADATA_UNIVERSAL_IDENTIFIER, + }, + ]), + flatViewFieldGroupMaps: buildFlatViewFieldGroupMaps(), + applicationUniversalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER, + }); + + expect(result).toHaveLength(1); + expect(result[0].isVisible).toBe(true); + }); + }); + describe('unique universal identifiers', () => { it('should generate unique universalIdentifier for each created view field', () => { const result = computeFlatViewFieldsFromFieldsWidgets({ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compute-flat-view-fields-from-fields-widgets.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compute-flat-view-fields-from-fields-widgets.util.ts index b74b9220a2..a1a813b9a3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compute-flat-view-fields-from-fields-widgets.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compute-flat-view-fields-from-fields-widgets.util.ts @@ -1,8 +1,8 @@ +import { ViewKey } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; import { type FlatPageLayoutWidgetMaps } from 'src/engine/metadata-modules/flat-page-layout-widget/types/flat-page-layout-widget-maps.type'; -import { type FlatPageLayoutWidget } from 'src/engine/metadata-modules/flat-page-layout-widget/types/flat-page-layout-widget.type'; import { type FlatViewFieldGroupMaps } from 'src/engine/metadata-modules/flat-view-field-group/types/flat-view-field-group-maps.type'; import { DEFAULT_VIEW_FIELD_SIZE } from 'src/engine/metadata-modules/flat-view-field/constants/default-view-field-size.constant'; import { type FlatViewFieldMaps } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type'; @@ -19,6 +19,11 @@ type FieldToCreateInfo = { fieldMetadataUniversalIdentifier: string; }; +type FieldViewTarget = { + viewId: string; + isVisible: boolean; +}; + const isFieldsWidgetConfiguration = ( configuration: AllPageLayoutWidgetConfiguration, ): configuration is FieldsConfigurationDTO => { @@ -28,25 +33,65 @@ const isFieldsWidgetConfiguration = ( ); }; -const getMatchingFieldsWidgets = ({ +const getFieldViewTargets = ({ objectMetadataUniversalIdentifier, flatPageLayoutWidgetMaps, + flatViewMaps, }: { objectMetadataUniversalIdentifier: string; flatPageLayoutWidgetMaps: FlatPageLayoutWidgetMaps; -}): FlatPageLayoutWidget[] => - Object.values(flatPageLayoutWidgetMaps.byUniversalIdentifier) - .filter(isDefined) - .filter( - (widget) => - widget.isActive && - widget.type === WidgetType.FIELDS && - widget.objectMetadataUniversalIdentifier === - objectMetadataUniversalIdentifier && - isFieldsWidgetConfiguration(widget.configuration) && - isDefined(widget.configuration.viewId) && - isDefined(widget.configuration.newFieldDefaultVisibility), - ); + flatViewMaps: FlatViewMaps; +}): FieldViewTarget[] => { + const targets: FieldViewTarget[] = []; + const seenViewIds = new Set(); + + for (const widget of Object.values( + flatPageLayoutWidgetMaps.byUniversalIdentifier, + ).filter(isDefined)) { + if ( + !widget.isActive || + widget.type !== WidgetType.FIELDS || + widget.objectMetadataUniversalIdentifier !== + objectMetadataUniversalIdentifier || + !isFieldsWidgetConfiguration(widget.configuration) + ) { + continue; + } + + const { viewId, newFieldDefaultVisibility } = widget.configuration; + + if ( + !isDefined(viewId) || + !isDefined(newFieldDefaultVisibility) || + seenViewIds.has(viewId) + ) { + continue; + } + + seenViewIds.add(viewId); + targets.push({ viewId, isVisible: newFieldDefaultVisibility }); + } + + for (const view of Object.values(flatViewMaps.byUniversalIdentifier).filter( + isDefined, + )) { + if ( + view.key !== ViewKey.INDEX || + !view.isActive || + isDefined(view.deletedAt) || + view.objectMetadataUniversalIdentifier !== + objectMetadataUniversalIdentifier || + seenViewIds.has(view.id) + ) { + continue; + } + + seenViewIds.add(view.id); + targets.push({ viewId: view.id, isVisible: false }); + } + + return targets; +}; const findLastViewFieldGroupId = ({ viewId, @@ -130,11 +175,13 @@ export const computeFlatViewFieldsFromFieldsWidgets = ({ ]; const nextPositionByKey = new Map(); + const queuedViewFieldKeys = new Set(); for (const objectMetadataUniversalIdentifier of objectMetadataUniversalIdentifiers) { - const matchingWidgets = getMatchingFieldsWidgets({ + const targets = getFieldViewTargets({ objectMetadataUniversalIdentifier, flatPageLayoutWidgetMaps, + flatViewMaps, }); const fieldsForObject = fieldsToCreate.filter( @@ -143,16 +190,7 @@ export const computeFlatViewFieldsFromFieldsWidgets = ({ objectMetadataUniversalIdentifier, ); - for (const widget of matchingWidgets) { - if (!isFieldsWidgetConfiguration(widget.configuration)) { - continue; - } - - const configuration = widget.configuration; - - const viewId = configuration.viewId!; - const isVisible = configuration.newFieldDefaultVisibility!; - + for (const { viewId, isVisible } of targets) { const viewUniversalIdentifier = flatViewMaps.universalIdentifierById[viewId] ?? null; @@ -160,6 +198,10 @@ export const computeFlatViewFieldsFromFieldsWidgets = ({ continue; } + const isSystemSideEffect = + flatViewMaps.byUniversalIdentifier[viewUniversalIdentifier] + ?.isSystemSideEffect ?? false; + const viewFieldGroupId = findLastViewFieldGroupId({ viewId, flatViewFieldGroupMaps, @@ -184,6 +226,14 @@ export const computeFlatViewFieldsFromFieldsWidgets = ({ } for (const field of fieldsForObject) { + const dedupKey = `${viewId}:${field.fieldMetadataUniversalIdentifier}`; + + if (queuedViewFieldKeys.has(dedupKey)) { + continue; + } + + queuedViewFieldKeys.add(dedupKey); + const position = nextPositionByKey.get(positionKey)!; nextPositionByKey.set(positionKey, position + 1); @@ -200,6 +250,7 @@ export const computeFlatViewFieldsFromFieldsWidgets = ({ position, aggregateOperation: null, isActive: true, + isSystemSideEffect, universalOverrides: null, createdAt: now, updatedAt: now, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts index a524ce7ef4..5b47a19a87 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util.ts @@ -67,6 +67,7 @@ export const fromCreateViewFieldInputToFlatViewFieldToCreate = ({ position: createViewFieldInput.position ?? 0, aggregateOperation: createViewFieldInput.aggregateOperation ?? null, isActive: true, + isSystemSideEffect: false, universalOverrides: null, viewFieldGroupUniversalIdentifier, applicationUniversalIdentifier: flatApplication.universalIdentifier, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-update-view-field-input-to-flat-view-field-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-update-view-field-input-to-flat-view-field-to-update-or-throw.util.ts index bf0c08d1c7..5ba0cd540f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-update-view-field-input-to-flat-view-field-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/from-update-view-field-input-to-flat-view-field-to-update-or-throw.util.ts @@ -64,6 +64,7 @@ export const fromUpdateViewFieldInputToFlatViewFieldToUpdateOrThrow = ({ entityApplicationUniversalIdentifier: existingFlatViewFieldToUpdate.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingFlatViewFieldToUpdate.isSystemSideEffect, }); const { overrides, updatedEditableProperties } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts index 4092bd17ef..b0ed631a3a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util.ts @@ -87,6 +87,7 @@ export const fromCreateViewInputToFlatViewToCreate = ({ visibility: createViewInput.visibility ?? ViewVisibility.WORKSPACE, createdByUserWorkspaceId: createdByUserWorkspaceId ?? null, isActive: true, + isSystemSideEffect: false, universalOverrides: null, viewFieldUniversalIdentifiers: [], viewFilterUniversalIdentifiers: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts index f998e0be74..ca17087d9f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util.ts @@ -49,6 +49,7 @@ export const fromDeleteViewInputToFlatViewOrThrow = ({ entityApplicationUniversalIdentifier: existingFlatViewToDelete.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingFlatViewToDelete.isSystemSideEffect, }); if (shouldDeactivate) { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-update-view-input-to-flat-view-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-update-view-input-to-flat-view-to-update-or-throw.util.ts index 0b8a865b19..468b4a6be9 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-update-view-input-to-flat-view-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/from-update-view-input-to-flat-view-to-update-or-throw.util.ts @@ -75,6 +75,7 @@ export const fromUpdateViewInputToFlatViewToUpdateOrThrow = ({ entityApplicationUniversalIdentifier: existingFlatViewToUpdate.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingFlatViewToUpdate.isSystemSideEffect, }); const { overrides, updatedEditableProperties } = diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts index 17e2a38e65..6dbc221037 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts @@ -12,6 +12,8 @@ import { UpdateDateColumn, } from 'typeorm'; +import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; import { IndexType } from 'src/engine/metadata-modules/index-metadata/types/indexType.types'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -78,4 +80,10 @@ export class IndexMetadataEntity nullable: false, }) indexType: IndexType; + + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; } diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/services/index-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/services/index-metadata.service.ts index 165d4d70ec..74fdf6de75 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/services/index-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/services/index-metadata.service.ts @@ -243,6 +243,7 @@ export class IndexMetadataService { indexWhereClause: null, isCustom: true, isUnique: false, + isSystemSideEffect: false, objectMetadataUniversalIdentifier: flatObjectMetadata.universalIdentifier, universalIdentifier: indexMetadataUniversalIdentifier, diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/__tests__/generate-flat-index.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/__tests__/generate-flat-index.util.spec.ts index ff0cc19cb2..4058639bf5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/__tests__/generate-flat-index.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/__tests__/generate-flat-index.util.spec.ts @@ -65,6 +65,7 @@ describe('generateFlatIndexMetadataWithNameOrThrow', () => { indexWhereClause: overrides.indexWhereClause ?? null, isUnique: overrides.isUnique, isCustom: false, + isSystemSideEffect: false, universalFlatIndexFieldMetadatas: overrides.fieldIds.map((id, order) => ({ createdAt: now, updatedAt: now, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts index 347290512a..ddb79529ff 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant.ts @@ -23,6 +23,7 @@ const PARTIAL_ID_FIELD = { isUnique: true, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: 'uuid', @@ -51,6 +52,7 @@ const PARTIAL_CREATED_AT_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: 'now', @@ -79,6 +81,7 @@ const PARTIAL_UPDATED_AT_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: 'now', @@ -107,6 +110,7 @@ const PARTIAL_DELETED_AT_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: null, @@ -135,6 +139,7 @@ const PARTIAL_CREATED_BY_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: { name: "''", source: "'MANUAL'" }, @@ -163,6 +168,7 @@ const PARTIAL_UPDATED_BY_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: { name: "''", source: "'MANUAL'" }, @@ -191,6 +197,7 @@ const PARTIAL_POSITION_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: 0, @@ -219,6 +226,7 @@ const PARTIAL_SEARCH_VECTOR_FIELD = { isUnique: false, isActive: true, isSystem: true, + isSystemSideEffect: true, isUIEditable: false, isLabelSyncedWithName: false, defaultValue: null, 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 8156e7529f..80f4766325 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 @@ -145,7 +145,9 @@ export class ObjectMetadataService extends TypeOrmQueryService { - const { workspaceCustomFlatApplication, twentyStandardFlatApplication } = + const { workspaceCustomFlatApplication } = await this.applicationService.findWorkspaceTwentyStandardAndCustomApplicationOrThrow( { workspaceId, @@ -497,7 +499,7 @@ export class ObjectMetadataService extends TypeOrmQueryService; }; @@ -876,6 +843,7 @@ export class ObjectMetadataService extends TypeOrmQueryService tab.universalIdentifier, ), + isSystemSideEffect: true, createdAt: now, updatedAt: now, deletedAt: null, diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-record-page-fields-view-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-record-page-fields-view-to-create.util.ts index ce2069232c..fde559d9cf 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-record-page-fields-view-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-record-page-fields-view-to-create.util.ts @@ -43,6 +43,7 @@ export const computeFlatRecordPageFieldsViewToCreate = ({ visibility: ViewVisibility.WORKSPACE, createdByUserWorkspaceId: null, isActive: true, + isSystemSideEffect: true, universalOverrides: null, viewFieldUniversalIdentifiers: [], viewFieldGroupUniversalIdentifiers: [], diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-view-fields-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-view-fields-to-create.util.ts index e4d883d36f..c30049ace1 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-view-fields-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/compute-flat-view-fields-to-create.util.ts @@ -65,6 +65,7 @@ export const computeFlatViewFieldsToCreate = ({ position: index, aggregateOperation: null, isActive: true, + isSystemSideEffect: true, universalOverrides: null, applicationUniversalIdentifier: flatApplication.universalIdentifier, })); diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity.ts index 4813835291..3eac30f400 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity.ts @@ -15,6 +15,8 @@ import { UpdateDateColumn, } from 'typeorm'; +import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { PageLayoutWidgetEntity } from 'src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity'; import { PageLayoutEntity } from 'src/engine/metadata-modules/page-layout/entities/page-layout.entity'; import { OverridableEntity } from 'src/engine/workspace-manager/types/overridable-entity'; @@ -70,6 +72,12 @@ export class PageLayoutTabEntity }) layoutMode: PageLayoutTabLayoutMode; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity.ts index 1d89a65da3..d05021c363 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity.ts @@ -19,6 +19,8 @@ import { type Relation, } from 'typeorm'; +import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity'; import { WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type'; @@ -100,6 +102,12 @@ export class PageLayoutWidgetEntity< PageLayoutWidgetConfigurationTypeSettings >; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout/entities/page-layout.entity.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout/entities/page-layout.entity.ts index baf2410dc7..52e58596a7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout/entities/page-layout.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout/entities/page-layout.entity.ts @@ -14,6 +14,8 @@ import { UpdateDateColumn, } from 'typeorm'; +import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity'; import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; @@ -69,6 +71,12 @@ export class PageLayoutEntity @JoinColumn({ name: 'defaultTabToFocusOnMobileAndSidePanelId' }) defaultTabToFocusOnMobileAndSidePanel: Relation | null; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-reset.service.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-reset.service.ts index a07715fcb8..8a1d8271e0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-reset.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-reset.service.ts @@ -112,7 +112,8 @@ export class PageLayoutResetService { if ( widget.applicationUniversalIdentifier === - workspaceCustomFlatApplication.universalIdentifier + workspaceCustomFlatApplication.universalIdentifier && + !widget.isSystemSideEffect ) { throw new PageLayoutWidgetException( `Custom widget "${id}" cannot be reset to default`, @@ -255,7 +256,8 @@ export class PageLayoutResetService { if ( tab.applicationUniversalIdentifier === - workspaceCustomFlatApplication.universalIdentifier + workspaceCustomFlatApplication.universalIdentifier && + !tab.isSystemSideEffect ) { throw new PageLayoutTabException( `Custom tab "${id}" cannot be reset to default`, @@ -404,7 +406,8 @@ export class PageLayoutResetService { if ( layout.applicationUniversalIdentifier === - workspaceCustomFlatApplication.universalIdentifier + workspaceCustomFlatApplication.universalIdentifier && + !layout.isSystemSideEffect ) { throw new PageLayoutException( `Custom page layout "${id}" cannot be reset to default`, diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-update.service.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-update.service.ts index c7c62b81f1..f9bcaf1c31 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-update.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout/services/page-layout-update.service.ts @@ -328,6 +328,7 @@ export class PageLayoutUpdateService { layoutMode: tabInput.layoutMode ?? PageLayoutTabLayoutMode.GRID, overrides: null, isActive: true, + isSystemSideEffect: false, }; }, ); @@ -345,6 +346,7 @@ export class PageLayoutUpdateService { entityApplicationUniversalIdentifier: existingTab.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingTab.isSystemSideEffect, }); const editableProperties = { @@ -384,6 +386,7 @@ export class PageLayoutUpdateService { entityApplicationUniversalIdentifier: existingTab.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingTab.isSystemSideEffect, }); const editableProperties = { @@ -605,6 +608,7 @@ export class PageLayoutUpdateService { overrides: null, universalOverrides: null, isActive: true, + isSystemSideEffect: false, universalConfiguration: fromPageLayoutWidgetConfigurationToUniversalConfiguration({ configuration: widgetInput.configuration, @@ -721,6 +725,7 @@ export class PageLayoutUpdateService { entityApplicationUniversalIdentifier: existingWidget.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect: existingWidget.isSystemSideEffect, }); const configuration = widgetInput.configuration ?? null; diff --git a/packages/twenty-server/src/engine/metadata-modules/utils/__tests__/is-caller-overriding-entity.util.spec.ts b/packages/twenty-server/src/engine/metadata-modules/utils/__tests__/is-caller-overriding-entity.util.spec.ts index c0565e222a..a714b740d5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/utils/__tests__/is-caller-overriding-entity.util.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/utils/__tests__/is-caller-overriding-entity.util.spec.ts @@ -11,6 +11,7 @@ describe('isCallerOverridingEntity', () => { callerApplicationUniversalIdentifier: CUSTOM_APP_ID, entityApplicationUniversalIdentifier: STANDARD_APP_ID, workspaceCustomApplicationUniversalIdentifier: CUSTOM_APP_ID, + isSystemSideEffect: false, }), ).toBe(true); }); @@ -21,6 +22,7 @@ describe('isCallerOverridingEntity', () => { callerApplicationUniversalIdentifier: CUSTOM_APP_ID, entityApplicationUniversalIdentifier: CUSTOM_APP_ID, workspaceCustomApplicationUniversalIdentifier: CUSTOM_APP_ID, + isSystemSideEffect: false, }), ).toBe(false); }); @@ -31,6 +33,7 @@ describe('isCallerOverridingEntity', () => { callerApplicationUniversalIdentifier: OTHER_APP_ID, entityApplicationUniversalIdentifier: STANDARD_APP_ID, workspaceCustomApplicationUniversalIdentifier: CUSTOM_APP_ID, + isSystemSideEffect: false, }), ).toBe(false); }); diff --git a/packages/twenty-server/src/engine/metadata-modules/utils/is-caller-overriding-entity.util.ts b/packages/twenty-server/src/engine/metadata-modules/utils/is-caller-overriding-entity.util.ts index 03e19e0d1d..e63d0f1d1e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/utils/is-caller-overriding-entity.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/utils/is-caller-overriding-entity.util.ts @@ -2,15 +2,18 @@ export const isCallerOverridingEntity = ({ callerApplicationUniversalIdentifier, entityApplicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier, + isSystemSideEffect, }: { callerApplicationUniversalIdentifier: string; entityApplicationUniversalIdentifier: string; workspaceCustomApplicationUniversalIdentifier: string; + isSystemSideEffect: boolean; }): boolean => { return ( callerApplicationUniversalIdentifier === workspaceCustomApplicationUniversalIdentifier && - entityApplicationUniversalIdentifier !== - workspaceCustomApplicationUniversalIdentifier + (entityApplicationUniversalIdentifier !== + workspaceCustomApplicationUniversalIdentifier || + isSystemSideEffect) ); }; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field-group/services/fields-widget-upsert.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-field-group/services/fields-widget-upsert.service.ts index ed3741bdd4..34c759af40 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field-group/services/fields-widget-upsert.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field-group/services/fields-widget-upsert.service.ts @@ -250,6 +250,7 @@ export class FieldsWidgetUpsertService { existingGroup.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: applicationUniversalIdentifier, + isSystemSideEffect: false, }); const { overrides, updatedEditableProperties: sanitizedGroupProps } = @@ -349,6 +350,7 @@ export class FieldsWidgetUpsertService { existingField.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: applicationUniversalIdentifier, + isSystemSideEffect: existingField.isSystemSideEffect, }); const { overrides, updatedEditableProperties: sanitizedFieldProps } = @@ -435,6 +437,7 @@ export class FieldsWidgetUpsertService { existingField.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: applicationUniversalIdentifier, + isSystemSideEffect: existingField.isSystemSideEffect, }); const { overrides, updatedEditableProperties: sanitizedFieldProps } = @@ -530,6 +533,7 @@ export class FieldsWidgetUpsertService { overrides: null, universalOverrides: null, isActive: true, + isSystemSideEffect: false, createdAt: now, updatedAt: now, deletedAt: null, @@ -641,6 +645,7 @@ export class FieldsWidgetUpsertService { existingField.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: applicationUniversalIdentifier, + isSystemSideEffect: existingField.isSystemSideEffect, }); const { overrides, updatedEditableProperties: sanitizedFieldProps } = @@ -700,6 +705,7 @@ export class FieldsWidgetUpsertService { existingField.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: applicationUniversalIdentifier, + isSystemSideEffect: existingField.isSystemSideEffect, }); const { overrides, updatedEditableProperties: sanitizedFieldProps } = @@ -788,6 +794,7 @@ export class FieldsWidgetUpsertService { overrides: null, universalOverrides: null, isActive: true, + isSystemSideEffect: false, createdAt: now, updatedAt: now, deletedAt: null, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts index af2c36c46d..ab9890cc7d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/entities/view-field.entity.ts @@ -15,7 +15,9 @@ import { type SerializedRelation, } from 'twenty-shared/types'; +import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { ViewFieldGroupEntity } from 'src/engine/metadata-modules/view-field-group/entities/view-field-group.entity'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; import { OverridableEntity } from 'src/engine/workspace-manager/types/overridable-entity'; @@ -80,6 +82,12 @@ export class ViewFieldEntity @Column({ nullable: true, type: 'uuid' }) viewFieldGroupId: string | null; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @CreateDateColumn({ type: 'timestamptz' }) createdAt: Date; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts b/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts index 21a37e2545..dc4ea53b46 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/entities/view.entity.ts @@ -24,6 +24,7 @@ import { import { WasIntroducedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-introduced-in-upgrade.decorator'; import { UserWorkspaceEntity } from 'src/engine/core-modules/user-workspace/user-workspace.entity'; +import { ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME } from 'src/database/commands/upgrade-version-command/2-15/is-system-side-effect-upgrade-command-name.constant'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ViewFieldGroupEntity } from 'src/engine/metadata-modules/view-field-group/entities/view-field-group.entity'; @@ -204,6 +205,12 @@ export class ViewEntity }) visibility: ViewVisibility; + @WasIntroducedInUpgrade({ + upgradeCommandName: ADD_IS_SYSTEM_SIDE_EFFECT_UPGRADE_COMMAND_NAME, + }) + @Column({ nullable: false, default: false, type: 'boolean' }) + isSystemSideEffect: boolean; + @Column({ nullable: true, type: 'uuid' }) createdByUserWorkspaceId: string | null; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/view-widget-upsert.service.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/view-widget-upsert.service.ts index 837c870f14..2309be9799 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/view-widget-upsert.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/view-widget-upsert.service.ts @@ -443,6 +443,7 @@ export class ViewWidgetUpsertService { existingField.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: applicationUniversalIdentifier, + isSystemSideEffect: existingField.isSystemSideEffect, }); const { overrides, updatedEditableProperties: sanitizedFieldProps } = @@ -523,6 +524,7 @@ export class ViewWidgetUpsertService { overrides: null, universalOverrides: null, isActive: true, + isSystemSideEffect: false, createdAt: now, updatedAt: now, deletedAt: null, diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts index 64f1cb9e8f..4095ac291b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/view.service.ts @@ -329,6 +329,7 @@ export class ViewService { existingFlatView.applicationUniversalIdentifier, workspaceCustomApplicationUniversalIdentifier: workspaceCustomFlatApplication.universalIdentifier, + isSystemSideEffect: existingFlatView.isSystemSideEffect, }); const now = new Date().toISOString(); diff --git a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts index b31f4647d9..a1591b8a16 100644 --- a/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/entity-manager/workspace-entity-manager.spec.ts @@ -146,6 +146,7 @@ describe('WorkspaceEntityManager', () => { label: 'Field Name', objectMetadataId: 'test-entity-id', isNullable: true, + isSystemSideEffect: false, isLabelSyncedWithName: false, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), diff --git a/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts b/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts index 32bb92d206..beee23a5e6 100644 --- a/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts +++ b/packages/twenty-server/src/engine/twenty-orm/repository/__tests__/workspace.repository.spec.ts @@ -70,6 +70,7 @@ describe('WorkspaceRepository', () => { type: FieldMetadataType.UUID, objectMetadataId: 'test-metadata-id', isActive: true, + isSystemSideEffect: false, isNullable: false, isUnique: true, isSystem: true, diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-data-seeds.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-data-seeds.util.ts index 93e50f3dcb..f8a405d94a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-data-seeds.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-data-seeds.util.ts @@ -23,6 +23,7 @@ export const getPageLayoutFlatEntitySeeds = ({ applicationId: flatApplication.id, applicationUniversalIdentifier: flatApplication.universalIdentifier, workspaceId, + isSystemSideEffect: false, name: 'Sales Dashboard Layout', type: PageLayoutType.DASHBOARD, objectMetadataId: null, @@ -44,6 +45,7 @@ export const getPageLayoutFlatEntitySeeds = ({ applicationId: flatApplication.id, applicationUniversalIdentifier: flatApplication.universalIdentifier, workspaceId, + isSystemSideEffect: false, name: 'Customer Dashboard Layout', type: PageLayoutType.DASHBOARD, objectMetadataId: null, @@ -65,6 +67,7 @@ export const getPageLayoutFlatEntitySeeds = ({ applicationId: flatApplication.id, applicationUniversalIdentifier: flatApplication.universalIdentifier, workspaceId, + isSystemSideEffect: false, name: 'Team Dashboard Layout', type: PageLayoutType.DASHBOARD, objectMetadataId: null, @@ -89,6 +92,7 @@ export const getPageLayoutFlatEntitySeeds = ({ applicationId: flatApplication.id, applicationUniversalIdentifier: flatApplication.universalIdentifier, workspaceId, + isSystemSideEffect: false, name: 'Documentation', type: PageLayoutType.STANDALONE_PAGE, objectMetadataId: null, diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-tab-data-seeds.util.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-tab-data-seeds.util.ts index e0e3637c61..e8b02ecdbc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-tab-data-seeds.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/core/utils/get-page-layout-tab-data-seeds.util.ts @@ -33,6 +33,7 @@ export const getPageLayoutTabFlatEntitySeeds = ({ widgetIds: [], widgetUniversalIdentifiers: [], isActive: true, + isSystemSideEffect: false, icon: null, layoutMode: PageLayoutTabLayoutMode.GRID, overrides: null, diff --git a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-front-component-command-menu-items.util.ts b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-front-component-command-menu-items.util.ts index 095192eeb2..5c3b0ac329 100644 --- a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-front-component-command-menu-items.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-front-component-command-menu-items.util.ts @@ -92,6 +92,7 @@ export const prefillFrontComponentCommandMenuItems = async ({ pageLayoutId: definition.pageLayoutId ?? null, pageLayoutUniversalIdentifier: definition.pageLayoutId ?? null, isActive: true, + isSystemSideEffect: false, overrides: null, universalOverrides: null, createdAt: now, diff --git a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-workflow-command-menu-items.util.ts b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-workflow-command-menu-items.util.ts index 9ec4d2c844..cead263176 100644 --- a/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-workflow-command-menu-items.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/standard-objects-prefill-data/utils/prefill-workflow-command-menu-items.util.ts @@ -71,6 +71,7 @@ export const prefillWorkflowCommandMenuItems = async ({ pageLayoutId: null, pageLayoutUniversalIdentifier: null, isActive: true, + isSystemSideEffect: false, overrides: null, universalOverrides: null, createdAt: now, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/build-standard-flat-command-menu-item-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/build-standard-flat-command-menu-item-maps.util.ts index 836bb660ac..fcc92c67d7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/build-standard-flat-command-menu-item-maps.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/build-standard-flat-command-menu-item-maps.util.ts @@ -1,3 +1,4 @@ +import { TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER } from 'twenty-shared/application'; import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; @@ -72,6 +73,8 @@ export const buildStandardFlatCommandMenuItemMaps = ({ objectMetadata: flatObject, commandMenuItemId: v4(), applicationId: twentyStandardApplicationId, + applicationUniversalIdentifier: + TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER, workspaceId, position, now, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/create-standard-command-menu-item-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/create-standard-command-menu-item-flat-metadata.util.ts index 780a2f0dd5..eb85c3116c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/create-standard-command-menu-item-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/command-menu-item/create-standard-command-menu-item-flat-metadata.util.ts @@ -77,6 +77,7 @@ export const createStandardCommandMenuItemFlatMetadata = ({ pageLayoutId: null, pageLayoutUniversalIdentifier: null, isActive: true, + isSystemSideEffect: false, overrides: null, universalOverrides: null, createdAt: now, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts index 6988a48edd..5c34ebb817 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-field-flat-metadata.util.ts @@ -9,6 +9,7 @@ import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { TWENTY_STANDARD_APPLICATION_UNIVERSAL_IDENTIFIER } from 'twenty-shared/application'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; +import { PARTIAL_SYSTEM_FLAT_FIELD_METADATAS } from 'src/engine/metadata-modules/object-metadata/constants/partial-system-flat-field-metadatas.constant'; import { type AllStandardObjectFieldName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-field-name.type'; import { type AllStandardObjectName } from 'src/engine/workspace-manager/twenty-standard-application/types/all-standard-object-name.type'; import { type StandardBuilderArgs } from 'src/engine/workspace-manager/twenty-standard-application/types/metadata-standard-buillder-args.type'; @@ -82,6 +83,7 @@ export const createStandardFieldFlatMetadata = < icon, isActive: true, isSystem, + isSystemSideEffect: name in PARTIAL_SYSTEM_FLAT_FIELD_METADATAS, isNullable, isUnique, isUIEditable, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts index 584afc1f04..4361b98271 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/field-metadata/create-standard-relation-field-flat-metadata.util.ts @@ -101,6 +101,7 @@ export const createStandardRelationFieldFlatMetadata = < icon, isActive: true, isSystem: false, + isSystemSideEffect: false, isNullable, isUnique: false, isUIEditable, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts index c1c4bfc66b..1380d0d8e9 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/index/create-standard-index-flat-metadata.util.ts @@ -97,6 +97,7 @@ export const createStandardIndexFlatMetadata = < indexWhereClause, isCustom: false, isUnique, + isSystemSideEffect: true, objectMetadataUniversalIdentifier: flatObjectMetadata.universalIdentifier, universalIdentifier: indexDefinition.universalIdentifier, updatedAt: now, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-tab/create-standard-page-layout-tab-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-tab/create-standard-page-layout-tab-flat-metadata.util.ts index fa6bf6ee4d..163fc2bc20 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-tab/create-standard-page-layout-tab-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-tab/create-standard-page-layout-tab-flat-metadata.util.ts @@ -2,6 +2,7 @@ import { type PageLayoutTabLayoutMode } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; import { type FlatPageLayoutTab } from 'src/engine/metadata-modules/flat-page-layout-tab/types/flat-page-layout-tab.type'; +import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { STANDARD_PAGE_LAYOUTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-page-layout.constant'; import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications'; import { type StandardPageLayoutMetadataRelatedEntityIds } from 'src/engine/workspace-manager/twenty-standard-application/utils/get-standard-page-layout-metadata-related-entity-ids.util'; @@ -36,6 +37,7 @@ export const createStandardPageLayoutTabFlatMetadata = ({ layoutName as keyof typeof STANDARD_PAGE_LAYOUTS ] as { universalIdentifier: string; + type: PageLayoutType; tabs: Record< string, StandardPageLayoutTabConfig & { @@ -69,6 +71,7 @@ export const createStandardPageLayoutTabFlatMetadata = ({ widgetIds, widgetUniversalIdentifiers, isActive: true, + isSystemSideEffect: layout.type === PageLayoutType.RECORD_PAGE, createdAt: now, updatedAt: now, deletedAt: null, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/create-standard-page-layout-widget-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/create-standard-page-layout-widget-flat-metadata.util.ts index 9b2c0f77ad..269bd7bfa2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/create-standard-page-layout-widget-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout-widget/create-standard-page-layout-widget-flat-metadata.util.ts @@ -7,6 +7,7 @@ import { isDefined } from 'twenty-shared/utils'; import { type MetadataUniversalFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-universal-flat-entity.type'; import { type FlatPageLayoutWidget } from 'src/engine/metadata-modules/flat-page-layout-widget/types/flat-page-layout-widget.type'; +import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { type WidgetType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-type.enum'; import { type AllPageLayoutWidgetConfiguration } from 'src/engine/metadata-modules/page-layout-widget/types/all-page-layout-widget-configuration.type'; import { STANDARD_PAGE_LAYOUTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-page-layout.constant'; @@ -69,6 +70,7 @@ export const createStandardPageLayoutWidgetFlatMetadata = ({ const layout = STANDARD_PAGE_LAYOUTS[ layoutName as keyof typeof STANDARD_PAGE_LAYOUTS ] as { + type: PageLayoutType; tabs: Record< string, StandardPageLayoutTabConfig & { @@ -107,6 +109,7 @@ export const createStandardPageLayoutWidgetFlatMetadata = ({ objectMetadataId, objectMetadataUniversalIdentifier, isActive: true, + isSystemSideEffect: layout.type === PageLayoutType.RECORD_PAGE, createdAt: now, updatedAt: now, deletedAt: null, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout/create-standard-page-layout-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout/create-standard-page-layout-flat-metadata.util.ts index bd0e06b55c..867a7106c3 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout/create-standard-page-layout-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/page-layout/create-standard-page-layout-flat-metadata.util.ts @@ -3,7 +3,7 @@ import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { type FlatPageLayout } from 'src/engine/metadata-modules/flat-page-layout/types/flat-page-layout.type'; import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications'; -import { type PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; +import { PageLayoutType } from 'src/engine/metadata-modules/page-layout/enums/page-layout-type.enum'; import { STANDARD_PAGE_LAYOUTS } from 'src/engine/workspace-manager/twenty-standard-application/constants/standard-page-layout.constant'; import { type StandardObjectMetadataRelatedEntityIds } from 'src/engine/workspace-manager/twenty-standard-application/utils/get-standard-object-metadata-related-entity-ids.util'; import { type StandardPageLayoutMetadataRelatedEntityIds } from 'src/engine/workspace-manager/twenty-standard-application/utils/get-standard-page-layout-metadata-related-entity-ids.util'; @@ -119,6 +119,7 @@ export const createStandardPageLayoutFlatMetadata = ({ type, objectMetadataId, objectMetadataUniversalIdentifier: objectUniversalIdentifier, + isSystemSideEffect: type === PageLayoutType.RECORD_PAGE, tabIds: [], tabUniversalIdentifiers: [], createdAt: now, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/build-standard-flat-view-field-metadata-maps.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/build-standard-flat-view-field-metadata-maps.util.ts index a175a75935..9c7ad457a0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/build-standard-flat-view-field-metadata-maps.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/build-standard-flat-view-field-metadata-maps.util.ts @@ -75,6 +75,8 @@ export type BuildStandardFlatViewFieldMetadataMapsArgs = Omit< export const buildStandardFlatViewFieldMetadataMaps = ( args: BuildStandardFlatViewFieldMetadataMapsArgs, ): FlatEntityMaps => { + const { flatViewMaps } = args.dependencyFlatEntityMaps; + const allViewFieldMetadatas: FlatViewField[] = ( Object.keys( STANDARD_FLAT_VIEW_FIELD_METADATA_BUILDERS_BY_OBJECT_NAME, @@ -94,8 +96,16 @@ export const buildStandardFlatViewFieldMetadataMaps = ( let flatViewFieldMaps = createEmptyFlatEntityMaps(); for (const viewFieldMetadata of allViewFieldMetadatas) { + const parentView = + flatViewMaps.byUniversalIdentifier[ + viewFieldMetadata.viewUniversalIdentifier + ]; + flatViewFieldMaps = addFlatEntityToFlatEntityMapsOrThrow({ - flatEntity: viewFieldMetadata, + flatEntity: { + ...viewFieldMetadata, + isSystemSideEffect: parentView?.isSystemSideEffect ?? false, + }, flatEntityMaps: flatViewFieldMaps, }); } diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts index cc85b419c0..41c1b99a97 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view-field/create-standard-view-field-flat-metadata.util.ts @@ -121,6 +121,7 @@ export const createStandardViewFieldFlatMetadata = < size, aggregateOperation, isActive: true, + isSystemSideEffect: false, overrides: null, universalOverrides: null, createdAt: now, diff --git a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts index 20bf545e5a..bd5865c466 100644 --- a/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/twenty-standard-application/utils/view/create-standard-view-flat-metadata.util.ts @@ -2,8 +2,8 @@ import { isDefined } from 'class-validator'; import { STANDARD_OBJECTS } from 'twenty-shared/metadata'; import { type AggregateOperations, - type ViewType, - type ViewKey, + ViewType, + ViewKey, ViewOpenRecordIn, ViewVisibility, } from 'twenty-shared/types'; @@ -143,6 +143,8 @@ export const createStandardViewFlatMetadata = < visibility: ViewVisibility.WORKSPACE, createdByUserWorkspaceId: null, isActive: true, + isSystemSideEffect: + key === ViewKey.INDEX || type === ViewType.FIELDS_WIDGET, overrides: null, universalOverrides: null, viewFieldIds: [], diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap index bec82bb0a0..cf9ffe3584 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/__tests__/__snapshots__/universal-flat-entity-deleted-created-updated-matrix-dispatcher.util.spec.ts.snap @@ -20,6 +20,7 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect a crea "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewIds": [], @@ -84,6 +85,7 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect a dele "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewIds": [], @@ -162,6 +164,7 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect create "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewIds": [], @@ -212,6 +215,7 @@ exports[`flatEntityDeletedCreatedUpdatedMatrixDispatcher It should detect create "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "kanbanAggregateOperationViewIds": [], diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/index/utils/from-universal-flat-index-to-flat-index.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/index/utils/from-universal-flat-index-to-flat-index.util.ts index e254daea0a..7acb034d0b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/index/utils/from-universal-flat-index-to-flat-index.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/index/utils/from-universal-flat-index-to-flat-index.util.ts @@ -82,6 +82,7 @@ export const fromUniversalFlatIndexToFlatIndex = ({ name: universalFlatIndexMetadata.name, isCustom: universalFlatIndexMetadata.isCustom, isUnique: universalFlatIndexMetadata.isUnique, + isSystemSideEffect: universalFlatIndexMetadata.isSystemSideEffect, indexWhereClause: universalFlatIndexMetadata.indexWhereClause, indexType: universalFlatIndexMetadata.indexType, createdAt: universalFlatIndexMetadata.createdAt, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/__tests__/flat-entity-to-scalar-flat-entity.util.spec.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/__tests__/flat-entity-to-scalar-flat-entity.util.spec.ts index 78f18ed0c0..c8d5d7a09b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/__tests__/flat-entity-to-scalar-flat-entity.util.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/__tests__/flat-entity-to-scalar-flat-entity.util.spec.ts @@ -58,6 +58,7 @@ describe('flatEntityToScalarFlatEntity', () => { "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "label": "Test Label", diff --git a/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts b/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts index 43c2900bbb..a91f083057 100644 --- a/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts +++ b/packages/twenty-server/src/utils/__test__/get-field-metadata-entity.mock.ts @@ -20,6 +20,7 @@ export const getMockFieldMetadataEntity = < overrides: GetMockFieldMetadataEntityOverride, ): FieldMetadataEntity => { return { + isSystemSideEffect: false, workspace: {} as WorkspaceEntity, calendarViews: [], mainGroupByFieldMetadataViews: [], diff --git a/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/successful-find-view.integration-spec.ts.snap b/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/successful-find-view.integration-spec.ts.snap index a77af817c0..9c023a72d4 100644 --- a/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/successful-find-view.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/successful-find-view.integration-spec.ts.snap @@ -101,6 +101,90 @@ exports[`successful find view with all sub-relations (e2e) Company View Structur "viewFieldGroupId": null, "viewId": Any, }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 7, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 8, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 9, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 10, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 11, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 12, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, + { + "createdAt": Any, + "deletedAt": null, + "fieldMetadataId": Any, + "id": Any, + "isVisible": false, + "position": 13, + "size": 180, + "updatedAt": Any, + "viewFieldGroupId": null, + "viewId": Any, + }, ], "viewFilterGroups": [], "viewFilters": [], diff --git a/packages/twenty-server/test/integration/graphql/suites/view/successful-find-view.integration-spec.ts b/packages/twenty-server/test/integration/graphql/suites/view/successful-find-view.integration-spec.ts index 991ffb6bb5..c34c98bc39 100644 --- a/packages/twenty-server/test/integration/graphql/suites/view/successful-find-view.integration-spec.ts +++ b/packages/twenty-server/test/integration/graphql/suites/view/successful-find-view.integration-spec.ts @@ -69,8 +69,15 @@ describe('successful find view with all sub-relations (e2e)', () => { jestExpectToBeDefined(testView); - expect(testView).toMatchSnapshot( - extractRecordIdsAndDatesAsExpectAny({ ...testView }), + const stableTestView = { + ...testView, + viewFields: [...testView.viewFields].sort( + (a, b) => a.position - b.position, + ), + }; + + expect(stableTestView).toMatchSnapshot( + extractRecordIdsAndDatesAsExpectAny({ ...stableTestView }), ); }); }); diff --git a/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap index 86e3939e23..024c0f1a44 100644 --- a/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/application/__snapshots__/successful-sync-application-workspace-migration.integration-spec.ts.snap @@ -15,6 +15,7 @@ exports[`syncApplication should create a TEXT field on the standard Company obje "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "label": "Industry", @@ -108,6 +109,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Id", @@ -133,6 +135,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Creation date", @@ -158,6 +161,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Last update", @@ -183,6 +187,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Deleted at", @@ -213,6 +218,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Created by", @@ -243,6 +249,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Updated by", @@ -268,6 +275,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Position", @@ -293,6 +301,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Search vector", @@ -321,6 +330,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "label": "Description", @@ -388,6 +398,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUIReadOnly": false, "isUnique": false, @@ -434,6 +445,7 @@ exports[`syncApplication should delete old field and create equivalent one when "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "label": "Description", @@ -504,6 +516,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Id", @@ -529,6 +542,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Creation date", @@ -554,6 +568,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Last update", @@ -579,6 +594,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Deleted at", @@ -609,6 +625,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Created by", @@ -639,6 +656,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Updated by", @@ -664,6 +682,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Position", @@ -689,6 +708,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": true, + "isSystemSideEffect": true, "isUIEditable": true, "isUnique": false, "label": "Search vector", @@ -717,6 +737,7 @@ exports[`syncApplication should return workspace migration actions on initial sy "isLabelSyncedWithName": false, "isNullable": true, "isSystem": false, + "isSystemSideEffect": false, "isUIEditable": true, "isUnique": false, "label": "Description", diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/create-one-field-metadata.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/create-one-field-metadata.integration-spec.ts.snap index 263225092a..c01469219f 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/create-one-field-metadata.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/create-one-field-metadata.integration-spec.ts.snap @@ -43,13 +43,30 @@ exports[`createOne FieldMetadataService name/label sync should return an error w "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/failing-create-one-field-metadata.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/failing-create-one-field-metadata.integration-spec.ts.snap index f1018238f4..0e56239a8c 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/failing-create-one-field-metadata.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/__snapshots__/failing-create-one-field-metadata.integration-spec.ts.snap @@ -44,13 +44,30 @@ exports[`Failing create field metadata tests suite should fail to create NUMERIC "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -110,13 +127,30 @@ exports[`Failing create field metadata tests suite should fail to create POSITIO "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/atomic/__snapshots__/create-one-files-field-metadata.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/atomic/__snapshots__/create-one-files-field-metadata.integration-spec.ts.snap index fe8dc4c9b7..9b85c5f398 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/atomic/__snapshots__/create-one-files-field-metadata.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/atomic/__snapshots__/create-one-files-field-metadata.integration-spec.ts.snap @@ -60,14 +60,31 @@ exports[`createOne FILES field metadata - failing should fail to create files fi "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -118,13 +135,30 @@ exports[`createOne FILES field metadata - failing should fail to create files fi "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -175,13 +209,30 @@ exports[`createOne FILES field metadata - failing should fail to create files fi "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -232,13 +283,30 @@ exports[`createOne FILES field metadata - failing should fail to create files fi "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap index 77d9c95198..1205831370 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap @@ -44,13 +44,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -104,13 +121,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -164,13 +198,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -239,13 +290,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -314,13 +382,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -389,13 +474,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -464,13 +566,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -524,13 +643,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -584,13 +720,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -650,13 +803,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -710,13 +880,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -770,13 +957,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -830,13 +1034,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -908,13 +1129,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -968,13 +1206,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1028,13 +1283,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1088,13 +1360,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1148,13 +1437,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1208,13 +1514,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1268,13 +1591,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1328,13 +1668,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1393,13 +1750,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1452,13 +1826,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1512,13 +1903,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1571,13 +1979,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1637,13 +2062,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1697,13 +2139,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1757,13 +2216,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1817,13 +2293,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1883,13 +2376,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1943,13 +2453,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2003,13 +2530,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2069,13 +2613,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2128,13 +2689,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2187,13 +2765,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2247,13 +2842,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2307,13 +2919,30 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2373,13 +3002,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2433,13 +3079,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2493,13 +3156,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2568,13 +3248,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2643,13 +3340,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2718,13 +3432,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2793,13 +3524,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2853,13 +3601,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2919,13 +3684,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -2979,13 +3761,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3039,13 +3838,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3099,13 +3915,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3159,13 +3992,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3219,13 +4069,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3279,13 +4146,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3339,13 +4223,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3399,13 +4300,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3459,13 +4377,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3524,13 +4459,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3583,13 +4535,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3643,13 +4612,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3702,13 +4688,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3768,13 +4771,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3828,13 +4848,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3888,13 +4925,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -3948,13 +5002,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4014,13 +5085,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4074,13 +5162,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4134,13 +5239,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4200,13 +5322,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4259,13 +5398,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4318,13 +5474,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -4378,13 +5551,30 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap index 0f1b4d664d..5290f85ad2 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap @@ -112,14 +112,48 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morph r "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 2 indices", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 2 indices", "summary": { "fieldMetadata": 2, "index": 2, - "totalErrors": 6, - "viewField": 2, + "totalErrors": 8, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -171,13 +205,30 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morph r "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -280,14 +331,48 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -397,14 +482,31 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -474,14 +576,31 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -551,14 +670,31 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -634,14 +770,31 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/relation/__snapshots__/failing-field-metadata-relation-creation.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/relation/__snapshots__/failing-field-metadata-relation-creation.integration-spec.ts.snap index 7bd0615128..f615465f05 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/relation/__snapshots__/failing-field-metadata-relation-creation.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/relation/__snapshots__/failing-field-metadata-relation-creation.integration-spec.ts.snap @@ -43,13 +43,30 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -101,13 +118,30 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -165,13 +199,30 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -223,13 +274,30 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -287,13 +355,30 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -556,14 +641,48 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE when "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -747,14 +866,48 @@ exports[`Field metadata relation creation should fail relation MANY_TO_ONE when "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -865,14 +1018,31 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -944,14 +1114,31 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1029,14 +1216,31 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1108,14 +1312,31 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1193,14 +1414,31 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY (rela "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1473,14 +1711,48 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY when "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -1670,14 +1942,48 @@ exports[`Field metadata relation creation should fail relation ONE_TO_MANY when "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -1772,13 +2078,30 @@ exports[`Field metadata relation creation should fail should fail when creating "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields", "summary": { "fieldMetadata": 1, - "totalErrors": 2, - "viewField": 1, + "totalErrors": 3, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1848,14 +2171,31 @@ exports[`Field metadata relation creation should fail should fail when creating "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 1 fieldMetadata, 1 viewField, 1 index", + "message": "Validation failed for 1 fieldMetadata, 2 viewFields, 1 index", "summary": { "fieldMetadata": 1, "index": 1, - "totalErrors": 3, - "viewField": 1, + "totalErrors": 4, + "viewField": 2, }, "userFriendlyMessage": "Many validation errors", }, @@ -1959,14 +2299,48 @@ exports[`Field metadata relation creation should fail should fail when creating "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, @@ -2070,14 +2444,48 @@ exports[`Field metadata relation creation should fail should fail when creating "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 2 fieldMetadata, 2 viewFields, 1 index", + "message": "Validation failed for 2 fieldMetadata, 4 viewFields, 1 index", "summary": { "fieldMetadata": 2, "index": 1, - "totalErrors": 5, - "viewField": 2, + "totalErrors": 7, + "viewField": 4, }, "userFriendlyMessage": "Many validation errors", }, diff --git a/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap index 0ef26bfb1a..ffacba5c0b 100644 --- a/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap @@ -1,4 +1,4 @@ -// Jest Snapshot v1, https://jestjs.io/docs/snapshot-testing +// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Object metadata creation should fail v2 when labelPlural contains only whitespace 1`] = ` { @@ -419,6 +419,21 @@ exports[`Object metadata creation should fail v2 when labelPlural contains only "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -531,16 +546,104 @@ exports[`Object metadata creation should fail v2 when labelPlural contains only "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -968,6 +1071,21 @@ exports[`Object metadata creation should fail v2 when labelPlural exceeds maximu "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -1080,16 +1198,104 @@ exports[`Object metadata creation should fail v2 when labelPlural exceeds maximu "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -1528,6 +1734,21 @@ exports[`Object metadata creation should fail v2 when labelSingular contains onl "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -1640,16 +1861,104 @@ exports[`Object metadata creation should fail v2 when labelSingular contains onl "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -2077,6 +2386,21 @@ exports[`Object metadata creation should fail v2 when labelSingular exceeds maxi "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -2189,16 +2513,104 @@ exports[`Object metadata creation should fail v2 when labelSingular exceeds maxi "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -2661,6 +3073,21 @@ exports[`Object metadata creation should fail v2 when name exceeds maximum lengt "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -2773,16 +3200,104 @@ exports[`Object metadata creation should fail v2 when name exceeds maximum lengt "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -3210,6 +3725,21 @@ exports[`Object metadata creation should fail v2 when namePlural has invalid cha "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -3322,16 +3852,104 @@ exports[`Object metadata creation should fail v2 when namePlural has invalid cha "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -3759,6 +4377,21 @@ exports[`Object metadata creation should fail v2 when namePlural is a reserved k "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -3871,16 +4504,104 @@ exports[`Object metadata creation should fail v2 when namePlural is a reserved k "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -4319,6 +5040,21 @@ exports[`Object metadata creation should fail v2 when namePlural is not camelCas "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -4431,16 +5167,104 @@ exports[`Object metadata creation should fail v2 when namePlural is not camelCas "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -4892,6 +5716,21 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -5004,16 +5843,104 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -5447,6 +6374,21 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -5559,16 +6501,104 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -6020,6 +7050,21 @@ exports[`Object metadata creation should fail v2 when nameSingular has invalid c "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -6132,16 +7177,104 @@ exports[`Object metadata creation should fail v2 when nameSingular has invalid c "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -6569,6 +7702,21 @@ exports[`Object metadata creation should fail v2 when nameSingular is a reserved "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -6681,16 +7829,104 @@ exports[`Object metadata creation should fail v2 when nameSingular is a reserved "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -7153,6 +8389,21 @@ exports[`Object metadata creation should fail v2 when nameSingular is not camelC "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -7265,16 +8516,104 @@ exports[`Object metadata creation should fail v2 when nameSingular is not camelC "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -7702,6 +9041,21 @@ exports[`Object metadata creation should fail v2 when names are identical 1`] = "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -7814,16 +9168,104 @@ exports[`Object metadata creation should fail v2 when names are identical 1`] = "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", }, @@ -8251,6 +9693,21 @@ exports[`Object metadata creation should fail v2 when names with whitespaces res "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Object metadata not found", + "userFriendlyMessage": "Object metadata not found", + }, + ], + "flatEntityMinimalInformation": { + "universalIdentifier": Any, + }, + "metadataName": "view", + "status": "fail", + "type": "create", + }, ], "viewField": [ { @@ -8363,16 +9820,104 @@ exports[`Object metadata creation should fail v2 when names with whitespaces res "status": "fail", "type": "create", }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, + { + "errors": [ + { + "code": "INVALID_VIEW_DATA", + "message": "Field metadata not found", + "userFriendlyMessage": "Field metadata not found", + }, + { + "code": "INVALID_VIEW_DATA", + "message": "View not found", + "userFriendlyMessage": "View not found", + }, + ], + "flatEntityMinimalInformation": { + "fieldMetadataUniversalIdentifier": Any, + "universalIdentifier": Any, + "viewUniversalIdentifier": Any, + }, + "metadataName": "viewField", + "status": "fail", + "type": "create", + }, ], }, - "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 1 view, 5 viewFields, 5 indices", + "message": "Validation failed for 17 fieldMetadata, 1 objectMetadata, 2 views, 9 viewFields, 5 indices", "summary": { "fieldMetadata": 17, "index": 5, "objectMetadata": 1, - "totalErrors": 29, - "view": 1, - "viewField": 5, + "totalErrors": 34, + "view": 2, + "viewField": 9, }, "userFriendlyMessage": "Many validation errors", },