Migrate all remaining workspace migration create action to universal (#17836)

# Introduction
Completely finalize the universal migration at builder and runner
levels.
Which mean that from now on the builder only compares
`universalFlatEntity` and produces universal workspace migration that
the runner ingest

## What's done
Migrated all create metadata remaining for
- agent
- skill
- commandMenuItem
- navigationMenuItem
- fieldMetadata
- objectMetadata
- view
- viewField
- viewFilter
- viewGroup
- viewFilterGroup
- index
- logicFunction
- role
- roleTarget
- pageLayout
- pageLayoutTab
- pageLayoutWidget
- rowLevelPermissionPredicate
- rowLevelPermissionPredicateGroup
- frontComponent
This commit is contained in:
Paul Rastoin
2026-02-10 14:39:37 +01:00
committed by GitHub
parent b7ff587b5e
commit 148584c730
74 changed files with 1012 additions and 391 deletions
@@ -0,0 +1,4 @@
import { type AgentEntity } from 'src/engine/metadata-modules/ai/ai-agent/entities/agent.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatAgent = UniversalFlatEntityFrom<AgentEntity, 'agent'>;
@@ -0,0 +1,7 @@
import { type CommandMenuItemEntity } from 'src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatCommandMenuItem = UniversalFlatEntityFrom<
CommandMenuItemEntity,
'commandMenuItem'
>;
@@ -0,0 +1,7 @@
import { type FrontComponentEntity } from 'src/engine/metadata-modules/front-component/entities/front-component.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatFrontComponent = UniversalFlatEntityFrom<
FrontComponentEntity,
'frontComponent'
>;
@@ -0,0 +1,11 @@
import { type Sources } from 'twenty-shared/types';
import { type LogicFunctionEntity } from 'src/engine/metadata-modules/logic-function/logic-function.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatLogicFunction = UniversalFlatEntityFrom<
LogicFunctionEntity,
'logicFunction'
> & {
code?: Sources;
};
@@ -0,0 +1,7 @@
import { type NavigationMenuItemEntity } from 'src/engine/metadata-modules/navigation-menu-item/entities/navigation-menu-item.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatNavigationMenuItem = UniversalFlatEntityFrom<
NavigationMenuItemEntity,
'navigationMenuItem'
>;
@@ -0,0 +1,7 @@
import { type PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatPageLayoutTab = UniversalFlatEntityFrom<
PageLayoutTabEntity,
'pageLayoutTab'
>;
@@ -0,0 +1,11 @@
import { type PageLayoutWidgetEntity } from 'src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity';
import { type WidgetConfigurationType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-configuration-type.type';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatPageLayoutWidget<
TWidgetConfigurationType extends
WidgetConfigurationType = WidgetConfigurationType,
> = UniversalFlatEntityFrom<
PageLayoutWidgetEntity<TWidgetConfigurationType>,
'pageLayoutWidget'
>;
@@ -0,0 +1,7 @@
import { type PageLayoutEntity } from 'src/engine/metadata-modules/page-layout/entities/page-layout.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatPageLayout = UniversalFlatEntityFrom<
PageLayoutEntity,
'pageLayout'
>;
@@ -0,0 +1,7 @@
import { type RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatRoleTarget = UniversalFlatEntityFrom<
RoleTargetEntity,
'roleTarget'
>;
@@ -0,0 +1,8 @@
import { type RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatRowLevelPermissionPredicateGroup =
UniversalFlatEntityFrom<
RowLevelPermissionPredicateGroupEntity,
'rowLevelPermissionPredicateGroup'
>;
@@ -0,0 +1,7 @@
import { type RowLevelPermissionPredicateEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatRowLevelPermissionPredicate = UniversalFlatEntityFrom<
RowLevelPermissionPredicateEntity,
'rowLevelPermissionPredicate'
>;
@@ -0,0 +1,7 @@
import { type WebhookEntity } from 'src/engine/metadata-modules/webhook/entities/webhook.entity';
import { type UniversalFlatEntityFrom } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
export type UniversalFlatWebhook = UniversalFlatEntityFrom<
WebhookEntity,
'webhook'
>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateAgentAction =
BaseFlatCreateWorkspaceMigrationAction<'agent'>;
export type UniversalCreateAgentAction =
BaseUniversalCreateWorkspaceMigrationAction<'agent'>;
export type FlatUpdateAgentAction =
BaseFlatUpdateWorkspaceMigrationAction<'agent'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateCommandMenuItemAction =
BaseFlatCreateWorkspaceMigrationAction<'commandMenuItem'>;
export type UniversalCreateCommandMenuItemAction =
BaseUniversalCreateWorkspaceMigrationAction<'commandMenuItem'>;
export type FlatUpdateCommandMenuItemAction =
BaseFlatUpdateWorkspaceMigrationAction<'commandMenuItem'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateFrontComponentAction =
BaseFlatCreateWorkspaceMigrationAction<'frontComponent'>;
export type UniversalCreateFrontComponentAction =
BaseUniversalCreateWorkspaceMigrationAction<'frontComponent'>;
export type FlatUpdateFrontComponentAction =
BaseFlatUpdateWorkspaceMigrationAction<'frontComponent'>;
@@ -3,12 +3,16 @@ import { type Sources } from 'twenty-shared/types';
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateLogicFunctionAction =
BaseFlatCreateWorkspaceMigrationAction<'logicFunction'>;
export type UniversalCreateLogicFunctionAction =
BaseUniversalCreateWorkspaceMigrationAction<'logicFunction'>;
export type FlatUpdateLogicFunctionAction =
BaseFlatUpdateWorkspaceMigrationAction<'logicFunction'> & {
code?: Sources;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateNavigationMenuItemAction =
BaseFlatCreateWorkspaceMigrationAction<'navigationMenuItem'>;
export type UniversalCreateNavigationMenuItemAction =
BaseUniversalCreateWorkspaceMigrationAction<'navigationMenuItem'>;
export type FlatUpdateNavigationMenuItemAction =
BaseFlatUpdateWorkspaceMigrationAction<'navigationMenuItem'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreatePageLayoutTabAction =
BaseFlatCreateWorkspaceMigrationAction<'pageLayoutTab'>;
export type UniversalCreatePageLayoutTabAction =
BaseUniversalCreateWorkspaceMigrationAction<'pageLayoutTab'>;
export type FlatUpdatePageLayoutTabAction =
BaseFlatUpdateWorkspaceMigrationAction<'pageLayoutTab'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreatePageLayoutWidgetAction =
BaseFlatCreateWorkspaceMigrationAction<'pageLayoutWidget'>;
export type UniversalCreatePageLayoutWidgetAction =
BaseUniversalCreateWorkspaceMigrationAction<'pageLayoutWidget'>;
export type FlatUpdatePageLayoutWidgetAction =
BaseFlatUpdateWorkspaceMigrationAction<'pageLayoutWidget'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreatePageLayoutAction =
BaseFlatCreateWorkspaceMigrationAction<'pageLayout'>;
export type UniversalCreatePageLayoutAction =
BaseUniversalCreateWorkspaceMigrationAction<'pageLayout'>;
export type FlatUpdatePageLayoutAction =
BaseFlatUpdateWorkspaceMigrationAction<'pageLayout'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateRoleTargetAction =
BaseFlatCreateWorkspaceMigrationAction<'roleTarget'>;
export type UniversalCreateRoleTargetAction =
BaseUniversalCreateWorkspaceMigrationAction<'roleTarget'>;
export type FlatUpdateRoleTargetAction =
BaseFlatUpdateWorkspaceMigrationAction<'roleTarget'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateRoleAction =
BaseFlatCreateWorkspaceMigrationAction<'role'>;
export type UniversalCreateRoleAction =
BaseUniversalCreateWorkspaceMigrationAction<'role'>;
export type FlatUpdateRoleAction =
BaseFlatUpdateWorkspaceMigrationAction<'role'>;
@@ -3,12 +3,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateRowLevelPermissionPredicateGroupAction =
BaseFlatCreateWorkspaceMigrationAction<'rowLevelPermissionPredicateGroup'>;
export type UniversalCreateRowLevelPermissionPredicateGroupAction =
BaseUniversalCreateWorkspaceMigrationAction<'rowLevelPermissionPredicateGroup'>;
export type FlatUpdateRowLevelPermissionPredicateGroupAction =
BaseFlatUpdateWorkspaceMigrationAction<'rowLevelPermissionPredicateGroup'>;
@@ -3,12 +3,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateRowLevelPermissionPredicateAction =
BaseFlatCreateWorkspaceMigrationAction<'rowLevelPermissionPredicate'>;
export type UniversalCreateRowLevelPermissionPredicateAction =
BaseUniversalCreateWorkspaceMigrationAction<'rowLevelPermissionPredicate'>;
export type FlatUpdateRowLevelPermissionPredicateAction =
BaseFlatUpdateWorkspaceMigrationAction<'rowLevelPermissionPredicate'>;
@@ -1,12 +1,16 @@
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-workspace-migration-action.type';
import { type BaseFlatDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-delete-workspace-migration-action.type';
import { type BaseFlatUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-update-workspace-migration-action.type';
import { type BaseUniversalCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-create-workspace-migration-action.type';
import { type BaseUniversalDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-delete-workspace-migration-action.type';
import { type BaseUniversalUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-universal-update-workspace-migration-action.type';
export type FlatCreateWebhookAction =
BaseFlatCreateWorkspaceMigrationAction<'webhook'>;
export type UniversalCreateWebhookAction =
BaseUniversalCreateWorkspaceMigrationAction<'webhook'>;
export type FlatUpdateWebhookAction =
BaseFlatUpdateWorkspaceMigrationAction<'webhook'>;
@@ -5,8 +5,8 @@ import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { isDefined } from 'twenty-shared/utils';
import { AgentExceptionCode } from 'src/engine/metadata-modules/ai/ai-agent/agent.exception';
import { type FlatAgent } from 'src/engine/metadata-modules/flat-agent/types/flat-agent.type';
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
import { type UniversalFlatAgent } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-agent.type';
import { belongsToTwentyStandardApp } from 'src/engine/metadata-modules/utils/belongs-to-twenty-standard-app.util';
import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
import { getEmptyFlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/utils/get-flat-entity-validation-error.util';
@@ -162,7 +162,7 @@ export class FlatAgentValidatorService {
});
}
const optimisticFlatAgent: FlatAgent = {
const optimisticFlatAgent: UniversalFlatAgent = {
...fromFlatAgent,
...flatEntityUpdate,
};
@@ -38,12 +38,14 @@ export class FlatCommandMenuItemValidatorService {
const hasWorkflowVersionId = isDefined(
flatCommandMenuItem.workflowVersionId,
);
const hasFrontComponentId = isDefined(flatCommandMenuItem.frontComponentId);
const hasFrontComponentUniversalIdentifier = isDefined(
flatCommandMenuItem.frontComponentUniversalIdentifier,
);
if (hasWorkflowVersionId === hasFrontComponentId) {
if (hasWorkflowVersionId === hasFrontComponentUniversalIdentifier) {
validationResult.errors.push({
code: CommandMenuItemExceptionCode.WORKFLOW_OR_FRONT_COMPONENT_REQUIRED,
message: t`Exactly one of workflowVersionId or frontComponentId is required`,
message: t`Exactly one of workflowVersionId or frontComponentUniversalIdentifier is required`,
userFriendlyMessage: msg`Exactly one of workflow version or front component is required`,
});
}
@@ -10,13 +10,12 @@ import { isDefined } from 'twenty-shared/utils';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { findFlatEntityByUniversalIdentifier } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier.util';
import { type FlatPageLayoutTab } from 'src/engine/metadata-modules/flat-page-layout-tab/types/flat-page-layout-tab.type';
import { type UniversalFlatPageLayoutTab } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-page-layout-tab.type';
import { FlatPageLayoutWidgetTypeValidatorService } from 'src/engine/metadata-modules/flat-page-layout-widget/services/flat-page-layout-widget-type-validator.service';
import { PageLayoutTabExceptionCode } from 'src/engine/metadata-modules/page-layout-tab/exceptions/page-layout-tab.exception';
import { GraphType } from 'src/engine/metadata-modules/page-layout-widget/enums/graph-type.enum';
import { WidgetType } from 'src/engine/metadata-modules/page-layout-widget/enums/widget-type.enum';
import { PageLayoutWidgetExceptionCode } from 'src/engine/metadata-modules/page-layout-widget/exceptions/page-layout-widget.exception';
import { AllPageLayoutWidgetConfiguration } from 'src/engine/metadata-modules/page-layout-widget/types/all-page-layout-widget-configuration.type';
import { GridPosition } from 'src/engine/metadata-modules/page-layout-widget/types/grid-position.type';
import { validatePageLayoutWidgetGridPosition } from 'src/engine/metadata-modules/page-layout-widget/utils/validate-page-layout-widget-grid-position.util';
import { validatePageLayoutWidgetVerticalListPosition } from 'src/engine/metadata-modules/page-layout-widget/utils/validate-page-layout-widget-vertical-list-position.util';
@@ -107,7 +106,7 @@ export class FlatPageLayoutWidgetValidatorService {
const featureFlagErrors = this.validateFeatureFlags({
type: updatedFlatPageLayoutWidget.type,
configuration: updatedFlatPageLayoutWidget.configuration,
configuration: updatedFlatPageLayoutWidget.universalConfiguration,
widgetTitle: updatedFlatPageLayoutWidget.title,
isDashboardV2Enabled,
});
@@ -239,7 +238,7 @@ export class FlatPageLayoutWidgetValidatorService {
const featureFlagErrors = this.validateFeatureFlags({
type: flatPageLayoutWidgetToValidate.type,
configuration: flatPageLayoutWidgetToValidate.configuration,
configuration: flatPageLayoutWidgetToValidate.universalConfiguration,
widgetTitle: flatPageLayoutWidgetToValidate.title,
isDashboardV2Enabled,
});
@@ -290,7 +289,7 @@ export class FlatPageLayoutWidgetValidatorService {
isDashboardV2Enabled,
}: {
type: WidgetType | undefined;
configuration: AllPageLayoutWidgetConfiguration | null | undefined;
configuration: { configurationType?: unknown } | null | undefined;
widgetTitle: string;
isDashboardV2Enabled: boolean;
}): FlatEntityValidationError[] {
@@ -302,7 +301,7 @@ export class FlatPageLayoutWidgetValidatorService {
return [];
}
const graphConfiguration = configuration as unknown as {
const graphConfiguration = configuration as {
configurationType?: GraphType;
};
@@ -330,7 +329,7 @@ export class FlatPageLayoutWidgetValidatorService {
widgetTitle,
}: {
position: PageLayoutWidgetPosition | null | undefined;
pageLayoutTab: FlatPageLayoutTab | undefined;
pageLayoutTab: UniversalFlatPageLayoutTab | undefined;
widgetTitle: string;
}): FlatEntityValidationError[] {
if (!isDefined(position)) {
@@ -180,27 +180,34 @@ export class FlatRowLevelPermissionPredicateGroupValidatorService {
...flatEntityUpdate,
};
if (updatedPredicateGroup.roleId !== existingPredicateGroup.roleId) {
const existingRoleId = existingPredicateGroup.roleId;
const updatedRoleId = updatedPredicateGroup.roleId;
if (
updatedPredicateGroup.roleUniversalIdentifier !==
existingPredicateGroup.roleUniversalIdentifier
) {
const existingRoleIdentifier =
existingPredicateGroup.roleUniversalIdentifier;
const updatedRoleIdentifier =
updatedPredicateGroup.roleUniversalIdentifier;
validationResult.errors.push({
code: RowLevelPermissionPredicateGroupExceptionCode.UNAUTHORIZED_ROLE_MODIFICATION,
message: t`Cannot modify predicate group to change its role from ${existingRoleId} to ${updatedRoleId}`,
message: t`Cannot modify predicate group to change its role from ${existingRoleIdentifier} to ${updatedRoleIdentifier}`,
userFriendlyMessage: msg`Cannot modify predicate group to change its role`,
});
}
if (
updatedPredicateGroup.objectMetadataId !==
existingPredicateGroup.objectMetadataId
updatedPredicateGroup.objectMetadataUniversalIdentifier !==
existingPredicateGroup.objectMetadataUniversalIdentifier
) {
const existingObjectMetadataId = existingPredicateGroup.objectMetadataId;
const updatedObjectMetadataId = updatedPredicateGroup.objectMetadataId;
const existingObjectMetadataIdentifier =
existingPredicateGroup.objectMetadataUniversalIdentifier;
const updatedObjectMetadataIdentifier =
updatedPredicateGroup.objectMetadataUniversalIdentifier;
validationResult.errors.push({
code: RowLevelPermissionPredicateGroupExceptionCode.UNAUTHORIZED_OBJECT_MODIFICATION,
message: t`Cannot modify predicate group to change its object from ${existingObjectMetadataId} to ${updatedObjectMetadataId}`,
message: t`Cannot modify predicate group to change its object from ${existingObjectMetadataIdentifier} to ${updatedObjectMetadataIdentifier}`,
userFriendlyMessage: msg`Cannot modify predicate group to change its object`,
});
}
@@ -196,26 +196,32 @@ export class FlatRowLevelPermissionPredicateValidatorService {
...flatEntityUpdate,
};
if (updatedPredicate.roleId !== existingPredicate.roleId) {
const existingRoleId = existingPredicate.roleId;
const updatedRoleId = updatedPredicate.roleId;
if (
updatedPredicate.roleUniversalIdentifier !==
existingPredicate.roleUniversalIdentifier
) {
const existingRoleIdentifier = existingPredicate.roleUniversalIdentifier;
const updatedRoleIdentifier = updatedPredicate.roleUniversalIdentifier;
validationResult.errors.push({
code: RowLevelPermissionPredicateExceptionCode.UNAUTHORIZED_ROLE_MODIFICATION,
message: t`Cannot modify predicate to change its role from ${existingRoleId} to ${updatedRoleId}`,
message: t`Cannot modify predicate to change its role from ${existingRoleIdentifier} to ${updatedRoleIdentifier}`,
userFriendlyMessage: msg`Cannot modify predicate to change its role`,
});
}
if (
updatedPredicate.objectMetadataId !== existingPredicate.objectMetadataId
updatedPredicate.objectMetadataUniversalIdentifier !==
existingPredicate.objectMetadataUniversalIdentifier
) {
const existingObjectMetadataId = existingPredicate.objectMetadataId;
const updatedObjectMetadataId = updatedPredicate.objectMetadataId;
const existingObjectMetadataIdentifier =
existingPredicate.objectMetadataUniversalIdentifier;
const updatedObjectMetadataIdentifier =
updatedPredicate.objectMetadataUniversalIdentifier;
validationResult.errors.push({
code: RowLevelPermissionPredicateExceptionCode.UNAUTHORIZED_OBJECT_MODIFICATION,
message: t`Cannot modify predicate to change its object from ${existingObjectMetadataId} to ${updatedObjectMetadataId}`,
message: t`Cannot modify predicate to change its object from ${existingObjectMetadataIdentifier} to ${updatedObjectMetadataIdentifier}`,
userFriendlyMessage: msg`Cannot modify predicate to change its object`,
});
}
@@ -1,7 +1,7 @@
import { msg, t } from '@lingui/core/macro';
import { AgentExceptionCode } from 'src/engine/metadata-modules/ai/ai-agent/agent.exception';
import { type FlatAgent } from 'src/engine/metadata-modules/flat-agent/types/flat-agent.type';
import { type UniversalFlatAgent } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-agent.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
export const validateAgentNameUniqueness = ({
@@ -9,7 +9,7 @@ export const validateAgentNameUniqueness = ({
existingFlatAgents,
}: {
name: string;
existingFlatAgents: FlatAgent[];
existingFlatAgents: UniversalFlatAgent[];
}): FlatEntityValidationError<AgentExceptionCode>[] => {
const errors: FlatEntityValidationError<AgentExceptionCode>[] = [];
@@ -2,12 +2,12 @@ import { msg, t } from '@lingui/core/macro';
import { isNonEmptyString } from '@sniptt/guards';
import { AgentExceptionCode } from 'src/engine/metadata-modules/ai/ai-agent/agent.exception';
import { type FlatAgent } from 'src/engine/metadata-modules/flat-agent/types/flat-agent.type';
import { type UniversalFlatAgent } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-agent.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
type ValidateAgentRequiredPropertiesArgs = {
flatAgent: FlatAgent;
updatedProperties?: Partial<FlatAgent>;
flatAgent: UniversalFlatAgent;
updatedProperties?: Partial<UniversalFlatAgent>;
};
export const validateAgentRequiredProperties = ({
@@ -1,14 +1,14 @@
import { msg, t } from '@lingui/core/macro';
import { isDefined } from 'class-validator';
import { type FlatRoleTarget } from 'src/engine/metadata-modules/flat-role-target/types/flat-role-target.type';
import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type';
import { RoleTargetExceptionCode } from 'src/engine/metadata-modules/role/exceptions/role-target.exception';
import { type UniversalFlatRole } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role.type';
import { type UniversalFlatRoleTarget } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role-target.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
type ValidateFlatRoleTargetAssignationAvailabilityArgs = {
flatRole: FlatRole;
flatRoleTarget: FlatRoleTarget;
flatRole: UniversalFlatRole;
flatRoleTarget: UniversalFlatRoleTarget;
};
export const validateFlatRoleTargetAssignationAvailability = ({
flatRole,
@@ -1,14 +1,14 @@
import { msg, t } from '@lingui/core/macro';
import { isDefined } from 'twenty-shared/utils';
import { type FlatRoleTarget } from 'src/engine/metadata-modules/flat-role-target/types/flat-role-target.type';
import { RoleTargetExceptionCode } from 'src/engine/metadata-modules/role/exceptions/role-target.exception';
import { type UniversalFlatRoleTarget } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role-target.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
export const validateFlatRoleTargetTargetsOnlyOneEntity = ({
flatRoleTarget,
}: {
flatRoleTarget: FlatRoleTarget;
flatRoleTarget: UniversalFlatRoleTarget;
}) => {
const errors: FlatEntityValidationError[] = [];
@@ -1,10 +1,10 @@
import { msg } from '@lingui/core/macro';
import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type';
import {
PermissionsExceptionCode,
PermissionsExceptionMessage,
} from 'src/engine/metadata-modules/permissions/permissions.exception';
import { type UniversalFlatRole } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/workspace-migration-builder-options.type';
@@ -12,7 +12,7 @@ export const validateRoleIsEditable = ({
flatRole,
buildOptions,
}: {
flatRole: FlatRole;
flatRole: UniversalFlatRole;
buildOptions: WorkspaceMigrationBuilderOptions;
}): FlatEntityValidationError[] => {
const errors: FlatEntityValidationError[] = [];
@@ -1,10 +1,10 @@
import { msg } from '@lingui/core/macro';
import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type';
import {
PermissionsExceptionCode,
PermissionsExceptionMessage,
} from 'src/engine/metadata-modules/permissions/permissions.exception';
import { type UniversalFlatRole } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
export const validateRoleLabelUniqueness = ({
@@ -12,7 +12,7 @@ export const validateRoleLabelUniqueness = ({
existingFlatRoles,
}: {
label: string;
existingFlatRoles: FlatRole[];
existingFlatRoles: UniversalFlatRole[];
}): FlatEntityValidationError[] => {
const errors: FlatEntityValidationError[] = [];
@@ -1,16 +1,16 @@
import { msg } from '@lingui/core/macro';
import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type';
import {
PermissionsExceptionCode,
PermissionsExceptionMessage,
} from 'src/engine/metadata-modules/permissions/permissions.exception';
import { type UniversalFlatRole } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
export const validateRoleReadWritePermissionsConsistency = ({
flatRole,
}: {
flatRole: FlatRole;
flatRole: UniversalFlatRole;
}): FlatEntityValidationError[] => {
const errors: FlatEntityValidationError[] = [];
@@ -2,14 +2,14 @@ import { msg, t } from '@lingui/core/macro';
import { isDefined } from 'twenty-shared/utils';
import { FLAT_ROLE_REQUIRED_PROPERTIES } from 'src/engine/metadata-modules/flat-role/constants/flat-role-required-properties.constants';
import { type FlatRole } from 'src/engine/metadata-modules/flat-role/types/flat-role.type';
import { PermissionsExceptionCode } from 'src/engine/metadata-modules/permissions/permissions.exception';
import { type UniversalFlatRole } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role.type';
import { type FlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/types/failed-flat-entity-validation.type';
export const validateRoleRequiredPropertiesAreDefined = ({
flatRole,
}: {
flatRole: FlatRole;
flatRole: UniversalFlatRole;
}): FlatEntityValidationError[] =>
FLAT_ROLE_REQUIRED_PROPERTIES.flatMap<FlatEntityValidationError>(
(property) => {
@@ -1,9 +1,14 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { AgentEntity } from 'src/engine/metadata-modules/ai/ai-agent/entities/agent.entity';
import { FlatCreateAgentAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/agent/types/workspace-migration-agent-action-builder.service';
import {
FlatCreateAgentAction,
UniversalCreateAgentAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/agent/types/workspace-migration-agent-action-builder.service';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +23,20 @@ export class CreateAgentActionHandlerService extends WorkspaceMigrationRunnerAct
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateAgentAction>,
): Promise<FlatCreateAgentAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateAgentAction>): Promise<FlatCreateAgentAction> {
return {
...action,
flatEntity: {
...action.flatEntity,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,9 +1,15 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { CommandMenuItemEntity } from 'src/engine/metadata-modules/command-menu-item/entities/command-menu-item.entity';
import { FlatCreateCommandMenuItemAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/command-menu-item/types/workspace-migration-command-menu-item-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreateCommandMenuItemAction,
UniversalCreateCommandMenuItemAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/command-menu-item/types/workspace-migration-command-menu-item-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +24,30 @@ export class CreateCommandMenuItemActionHandlerService extends WorkspaceMigratio
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateCommandMenuItemAction>,
): Promise<FlatCreateCommandMenuItemAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateCommandMenuItemAction>): Promise<FlatCreateCommandMenuItemAction> {
const { availabilityObjectMetadataId, frontComponentId } =
resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
availabilityObjectMetadataId,
frontComponentId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -2,6 +2,7 @@ import { Injectable } from '@nestjs/common';
import { FileFolder } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
@@ -11,7 +12,10 @@ import {
FrontComponentException,
FrontComponentExceptionCode,
} from 'src/engine/metadata-modules/front-component/front-component.exception';
import { FlatCreateFrontComponentAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/front-component/types/workspace-migration-front-component-action.type';
import {
FlatCreateFrontComponentAction,
UniversalCreateFrontComponentAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/front-component/types/workspace-migration-front-component-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -26,10 +30,20 @@ export class CreateFrontComponentActionHandlerService extends WorkspaceMigration
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateFrontComponentAction>,
): Promise<FlatCreateFrontComponentAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateFrontComponentAction>): Promise<FlatCreateFrontComponentAction> {
return {
...action,
flatEntity: {
...action.flatEntity,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,6 +1,7 @@
import { Injectable } from '@nestjs/common';
import { FileFolder } from 'twenty-shared/types';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
@@ -10,7 +11,10 @@ import {
LogicFunctionException,
LogicFunctionExceptionCode,
} from 'src/engine/metadata-modules/logic-function/logic-function.exception';
import { FlatCreateLogicFunctionAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/logic-function/types/workspace-migration-logic-function-action.type';
import {
FlatCreateLogicFunctionAction,
UniversalCreateLogicFunctionAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/logic-function/types/workspace-migration-logic-function-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -25,10 +29,20 @@ export class CreateLogicFunctionActionHandlerService extends WorkspaceMigrationR
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateLogicFunctionAction>,
): Promise<FlatCreateLogicFunctionAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateLogicFunctionAction>): Promise<FlatCreateLogicFunctionAction> {
return {
...action,
flatEntity: {
...action.flatEntity,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,9 +1,15 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { NavigationMenuItemEntity } from 'src/engine/metadata-modules/navigation-menu-item/entities/navigation-menu-item.entity';
import { FlatCreateNavigationMenuItemAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/navigation-menu-item/types/workspace-migration-navigation-menu-item-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreateNavigationMenuItemAction,
UniversalCreateNavigationMenuItemAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/navigation-menu-item/types/workspace-migration-navigation-menu-item-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +24,31 @@ export class CreateNavigationMenuItemActionHandlerService extends WorkspaceMigra
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateNavigationMenuItemAction>,
): Promise<FlatCreateNavigationMenuItemAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateNavigationMenuItemAction>): Promise<FlatCreateNavigationMenuItemAction> {
const { targetObjectMetadataId, folderId, viewId } =
resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
targetObjectMetadataId,
folderId,
viewId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,9 +1,15 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { PageLayoutTabEntity } from 'src/engine/metadata-modules/page-layout-tab/entities/page-layout-tab.entity';
import { FlatCreatePageLayoutTabAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout-tab/types/workspace-migration-page-layout-tab-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreatePageLayoutTabAction,
UniversalCreatePageLayoutTabAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout-tab/types/workspace-migration-page-layout-tab-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +24,29 @@ export class CreatePageLayoutTabActionHandlerService extends WorkspaceMigrationR
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreatePageLayoutTabAction>,
): Promise<FlatCreatePageLayoutTabAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreatePageLayoutTabAction>): Promise<FlatCreatePageLayoutTabAction> {
const { pageLayoutId } = resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
pageLayoutId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
widgetIds: [],
},
};
}
async executeForMetadata(
@@ -1,9 +1,16 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { PageLayoutWidgetEntity } from 'src/engine/metadata-modules/page-layout-widget/entities/page-layout-widget.entity';
import { FlatCreatePageLayoutWidgetAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout-widget/types/workspace-migration-page-layout-widget-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreatePageLayoutWidgetAction,
UniversalCreatePageLayoutWidgetAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout-widget/types/workspace-migration-page-layout-widget-action.type';
import { fromUniversalConfigurationToFlatPageLayoutWidgetConfiguration } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/page-layout-widget/services/utils/from-universal-configuration-to-flat-page-layout-widget-configuration.util';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +25,37 @@ export class CreatePageLayoutWidgetActionHandlerService extends WorkspaceMigrati
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreatePageLayoutWidgetAction>,
): Promise<FlatCreatePageLayoutWidgetAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreatePageLayoutWidgetAction>): Promise<FlatCreatePageLayoutWidgetAction> {
const { pageLayoutTabId, objectMetadataId } =
resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
const configuration =
fromUniversalConfigurationToFlatPageLayoutWidgetConfiguration({
universalConfiguration: action.flatEntity.universalConfiguration,
flatFieldMetadataMaps: allFlatEntityMaps.flatFieldMetadataMaps,
});
return {
...action,
flatEntity: {
...action.flatEntity,
configuration,
pageLayoutTabId,
objectMetadataId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,9 +1,15 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { PageLayoutEntity } from 'src/engine/metadata-modules/page-layout/entities/page-layout.entity';
import { FlatCreatePageLayoutAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout/types/workspace-migration-page-layout-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreatePageLayoutAction,
UniversalCreatePageLayoutAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout/types/workspace-migration-page-layout-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +24,31 @@ export class CreatePageLayoutActionHandlerService extends WorkspaceMigrationRunn
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreatePageLayoutAction>,
): Promise<FlatCreatePageLayoutAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreatePageLayoutAction>): Promise<FlatCreatePageLayoutAction> {
const { objectMetadataId, defaultTabToFocusOnMobileAndSidePanelId } =
resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
objectMetadataId,
defaultTabToFocusOnMobileAndSidePanelId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
tabIds: [],
},
};
}
async executeForMetadata(
@@ -1,9 +1,15 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { RoleTargetEntity } from 'src/engine/metadata-modules/role-target/role-target.entity';
import { FlatCreateRoleTargetAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role-target/types/workspace-migration-role-target-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreateRoleTargetAction,
UniversalCreateRoleTargetAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role-target/types/workspace-migration-role-target-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -14,10 +20,28 @@ export class CreateRoleTargetActionHandlerService extends WorkspaceMigrationRunn
'create',
'roleTarget',
) {
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateRoleTargetAction>,
): Promise<FlatCreateRoleTargetAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateRoleTargetAction>): Promise<FlatCreateRoleTargetAction> {
const { roleId } = resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
roleId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,9 +1,14 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity';
import { FlatCreateRoleAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role/types/workspace-migration-role-action.type';
import {
FlatCreateRoleAction,
UniversalCreateRoleAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role/types/workspace-migration-role-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +23,26 @@ export class CreateRoleActionHandlerService extends WorkspaceMigrationRunnerActi
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateRoleAction>,
): Promise<FlatCreateRoleAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateRoleAction>): Promise<FlatCreateRoleAction> {
return {
...action,
flatEntity: {
...action.flatEntity,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
roleTargetIds: [],
rowLevelPermissionPredicateIds: [],
rowLevelPermissionPredicateGroupIds: [],
objectPermissionIds: [],
permissionFlagIds: [],
fieldPermissionIds: [],
},
};
}
async executeForMetadata(
@@ -2,10 +2,16 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { RowLevelPermissionPredicateGroupEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate-group.entity';
import { FlatCreateRowLevelPermissionPredicateGroupAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate-group/types/workspace-migration-row-level-permission-predicate-group-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreateRowLevelPermissionPredicateGroupAction,
UniversalCreateRowLevelPermissionPredicateGroupAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate-group/types/workspace-migration-row-level-permission-predicate-group-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -16,10 +22,36 @@ export class CreateRowLevelPermissionPredicateGroupActionHandlerService extends
'create',
'rowLevelPermissionPredicateGroup',
) {
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateRowLevelPermissionPredicateGroupAction>,
): Promise<FlatCreateRowLevelPermissionPredicateGroupAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateRowLevelPermissionPredicateGroupAction>): Promise<FlatCreateRowLevelPermissionPredicateGroupAction> {
const {
objectMetadataId,
roleId,
parentRowLevelPermissionPredicateGroupId,
} = resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
objectMetadataId,
roleId,
parentRowLevelPermissionPredicateGroupId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
rowLevelPermissionPredicateIds: [],
childRowLevelPermissionPredicateGroupIds: [],
},
};
}
async executeForMetadata(
@@ -2,10 +2,16 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { RowLevelPermissionPredicateEntity } from 'src/engine/metadata-modules/row-level-permission-predicate/entities/row-level-permission-predicate.entity';
import { FlatCreateRowLevelPermissionPredicateAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate/types/workspace-migration-row-level-permission-predicate-action.type';
import { resolveUniversalRelationIdentifiersToIds } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/utils/resolve-universal-relation-identifiers-to-ids.util';
import {
FlatCreateRowLevelPermissionPredicateAction,
UniversalCreateRowLevelPermissionPredicateAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate/types/workspace-migration-row-level-permission-predicate-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -16,10 +22,38 @@ export class CreateRowLevelPermissionPredicateActionHandlerService extends Works
'create',
'rowLevelPermissionPredicate',
) {
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateRowLevelPermissionPredicateAction>,
): Promise<FlatCreateRowLevelPermissionPredicateAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
allFlatEntityMaps,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateRowLevelPermissionPredicateAction>): Promise<FlatCreateRowLevelPermissionPredicateAction> {
const {
roleId,
fieldMetadataId,
workspaceMemberFieldMetadataId,
objectMetadataId,
rowLevelPermissionPredicateGroupId,
} = resolveUniversalRelationIdentifiersToIds({
flatEntityMaps: allFlatEntityMaps,
metadataName: action.metadataName,
universalForeignKeyValues: action.flatEntity,
});
return {
...action,
flatEntity: {
...action.flatEntity,
roleId,
fieldMetadataId,
workspaceMemberFieldMetadataId,
objectMetadataId,
rowLevelPermissionPredicateGroupId,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(
@@ -1,9 +1,14 @@
import { Injectable } from '@nestjs/common';
import { v4 } from 'uuid';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { WebhookEntity } from 'src/engine/metadata-modules/webhook/entities/webhook.entity';
import { FlatCreateWebhookAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/webhook/types/workspace-migration-webhook-action.type';
import {
FlatCreateWebhookAction,
UniversalCreateWebhookAction,
} from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/webhook/types/workspace-migration-webhook-action.type';
import {
WorkspaceMigrationActionRunnerArgs,
WorkspaceMigrationActionRunnerContext,
@@ -18,10 +23,20 @@ export class CreateWebhookActionHandlerService extends WorkspaceMigrationRunnerA
super();
}
override async transpileUniversalActionToFlatAction(
context: WorkspaceMigrationActionRunnerArgs<FlatCreateWebhookAction>,
): Promise<FlatCreateWebhookAction> {
return context.action;
override async transpileUniversalActionToFlatAction({
action,
flatApplication,
workspaceId,
}: WorkspaceMigrationActionRunnerArgs<UniversalCreateWebhookAction>): Promise<FlatCreateWebhookAction> {
return {
...action,
flatEntity: {
...action.flatEntity,
applicationId: flatApplication.id,
id: action.id ?? v4(),
workspaceId,
},
};
}
async executeForMetadata(