[OBJECT_MANIFEST_BREAKING_CHANGE] Sync returns workspace migration (#17918)

# Introduction
In this PR we start returning a workspace migration post sync so it can
committed and provided within the tarball

## Universal aggregators utils
Created two utils
### deleteUniversalFlatEntityForeignKeyAggregators
Used when building a universal create action, a newly created actions
should not contain any aggregated foreign key so they won't be codegen
in the workspace migration but also they are overriden at uninversal to
flat transpilation anw

### resetUniversalFlatEntityForeignKeyAggregators
Used before validating a new flat entity creation, some validator will
consume the fk aggregator in order to validate integrity, but of
optimstically provided it can result to errors. To avoid caller
responsability we override them here

## create-field-action refactor
Refactored the universal and flat field create action to be following
the base actions in order to ease typing
Also it was tailored to handle unlimited amount of flat field metadata
in the same actions whereas in the reality we were always only sending
at max 2 ( for relation fields )

Note: relation field has to be provided at the same as if not optimistic
would fail to retrieve circular universal identifiers

## ObjectManifest
Now always expect a `labelIdentifierFieldMetadataUniversalIdentifier`

## Integration test
Created an integration test that creates an app, sync a first manifest
and a second implying update workspace migration action generation
This commit is contained in:
Paul Rastoin
2026-02-16 15:00:24 +01:00
committed by GitHub
parent 4b3c58e013
commit 2b7b05de2e
107 changed files with 1662 additions and 566 deletions
@@ -158,7 +158,7 @@ export class AgentService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating agent',
@@ -242,7 +242,7 @@ export class AgentService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating agent',
@@ -357,7 +357,7 @@ export class AgentService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
`Multiple validation errors occurred while deleting agent${ids.length > 1 ? 's' : ''}`,
@@ -127,7 +127,7 @@ export class CommandMenuItemService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating command menu item',
@@ -194,7 +194,7 @@ export class CommandMenuItemService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating command menu item',
@@ -254,7 +254,7 @@ export class CommandMenuItemService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting command menu item',
@@ -141,7 +141,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting field',
@@ -286,7 +286,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating field',
@@ -394,7 +394,7 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating fields',
@@ -1,14 +1,10 @@
import { type AllMetadataName } from 'twenty-shared/metadata';
import { type Equal, type Expect } from 'twenty-shared/testing';
import { type Expect } from 'twenty-shared/testing';
import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name';
import { type SyncableFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-from.type';
import { type WorkspaceMigrationActionType } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type';
import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type';
import { type UniversalSyncableFlatEntity } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-entity-from.type';
import { type UniversalFlatObjectMetadata } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-object-metadata.type';
import { type BaseFlatCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-flat-create-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';
type ExpectedGenericFlatEntityInformation = {
universalActions: {
@@ -44,16 +40,4 @@ type Assertions = [
? true
: false
>,
Expect<
Equal<
BaseUniversalCreateWorkspaceMigrationAction<'objectMetadata'>['flatEntity'],
UniversalFlatObjectMetadata
>
>,
Expect<
Equal<
BaseFlatCreateWorkspaceMigrationAction<'view'>['flatEntity'],
FlatView
>
>,
];
@@ -114,7 +114,7 @@ export class FrontComponentService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating front component',
@@ -185,7 +185,7 @@ export class FrontComponentService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating front component',
@@ -262,7 +262,7 @@ export class FrontComponentService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying front component',
@@ -118,7 +118,7 @@ export class LogicFunctionMetadataService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating logic function',
@@ -178,7 +178,7 @@ export class LogicFunctionMetadataService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating logic function',
@@ -267,7 +267,7 @@ export class LogicFunctionMetadataService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying logic function',
@@ -198,7 +198,7 @@ export class NavigationMenuItemService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating navigation menu item',
@@ -287,7 +287,7 @@ export class NavigationMenuItemService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating navigation menu item',
@@ -367,7 +367,7 @@ export class NavigationMenuItemService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting navigation menu item',
@@ -74,7 +74,7 @@ export class NavigationMenuItemDeletionService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting navigation menu items for deleted records',
@@ -158,7 +158,7 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating object',
@@ -363,7 +363,7 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
`Multiple validation errors occurred while deleting object${deleteObjectInputs.length > 1 ? 's' : ''}`,
@@ -560,7 +560,7 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating object',
@@ -173,7 +173,7 @@ export class PageLayoutTabService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating page layout tab',
@@ -252,7 +252,7 @@ export class PageLayoutTabService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating page layout tab',
@@ -324,7 +324,7 @@ export class PageLayoutTabService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying page layout tab',
@@ -90,7 +90,7 @@ export class PageLayoutWidgetService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
errorMessage,
@@ -143,7 +143,7 @@ export class PageLayoutDuplicationService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while duplicating page layout',
@@ -163,7 +163,7 @@ export class PageLayoutUpdateService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating page layout with tabs',
@@ -223,7 +223,7 @@ export class PageLayoutService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating page layout',
@@ -300,7 +300,7 @@ export class PageLayoutService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating page layout',
@@ -376,7 +376,7 @@ export class PageLayoutService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying page layout',
@@ -444,7 +444,7 @@ export class PageLayoutService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying page layouts',
@@ -113,7 +113,7 @@ export class RoleTargetService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating role targets',
@@ -174,7 +174,7 @@ export class RoleTargetService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting role target',
@@ -131,7 +131,7 @@ export class RoleService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating role',
@@ -201,7 +201,7 @@ export class RoleService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating role',
@@ -338,7 +338,7 @@ export class RoleService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
`Multiple validation errors occurred while deleting role${ids.length > 1 ? 's' : ''}`,
@@ -540,7 +540,7 @@ export class RowLevelPermissionPredicateService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Validation errors occurred while upserting row level permission predicates',
@@ -97,7 +97,7 @@ export class SkillService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating skill',
@@ -159,7 +159,7 @@ export class SkillService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating skill',
@@ -218,7 +218,7 @@ export class SkillService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting skill',
@@ -308,7 +308,7 @@ export class SkillService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while activating skill',
@@ -373,7 +373,7 @@ export class SkillService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deactivating skill',
@@ -110,7 +110,7 @@ export class ViewFieldGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating view field groups',
@@ -176,7 +176,7 @@ export class ViewFieldGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating view field group',
@@ -247,7 +247,7 @@ export class ViewFieldGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view field group',
@@ -322,7 +322,7 @@ export class ViewFieldGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying view field group',
@@ -116,7 +116,7 @@ export class ViewFieldService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating view fields',
@@ -186,7 +186,7 @@ export class ViewFieldService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating view field',
@@ -254,7 +254,7 @@ export class ViewFieldService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view field',
@@ -328,7 +328,7 @@ export class ViewFieldService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view field',
@@ -1,7 +1,6 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { isDefined } from 'twenty-shared/utils';
import { IsNull, type Repository } from 'typeorm';
import { ApplicationService } from 'src/engine/core-modules/application/services/application.service';
@@ -82,7 +81,7 @@ export class ViewFilterGroupService {
},
);
if (isDefined(buildAndRunResult)) {
if (buildAndRunResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
buildAndRunResult,
'Multiple validation errors occurred while creating view filter group',
@@ -154,7 +153,7 @@ export class ViewFilterGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating view filter group',
@@ -227,7 +226,7 @@ export class ViewFilterGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view filter group',
@@ -305,7 +304,7 @@ export class ViewFilterGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying view filter group',
@@ -1,7 +1,6 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { isDefined } from 'twenty-shared/utils';
import { IsNull, Repository } from 'typeorm';
import { ApplicationService } from 'src/engine/core-modules/application/services/application.service';
@@ -84,7 +83,7 @@ export class ViewFilterService {
},
);
if (isDefined(buildAndRunResult)) {
if (buildAndRunResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
buildAndRunResult,
'Multiple validation errors occurred while creating view filter',
@@ -161,7 +160,7 @@ export class ViewFilterService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating view filter',
@@ -232,7 +231,7 @@ export class ViewFilterService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view filter',
@@ -306,7 +305,7 @@ export class ViewFilterService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying view filter',
@@ -124,7 +124,7 @@ export class ViewGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating view groups',
@@ -190,7 +190,7 @@ export class ViewGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating view group',
@@ -261,7 +261,7 @@ export class ViewGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view group',
@@ -335,7 +335,7 @@ export class ViewGroupService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying view group',
@@ -96,7 +96,7 @@ export class ViewService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating view',
@@ -181,7 +181,7 @@ export class ViewService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating view',
@@ -249,7 +249,7 @@ export class ViewService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting view',
@@ -321,7 +321,7 @@ export class ViewService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while destroying view',
@@ -130,7 +130,7 @@ export class WebhookService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while creating webhook',
@@ -202,7 +202,7 @@ export class WebhookService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while updating webhook',
@@ -260,7 +260,7 @@ export class WebhookService {
},
);
if (isDefined(validateAndBuildResult)) {
if (validateAndBuildResult.status === 'fail') {
throw new WorkspaceMigrationBuilderException(
validateAndBuildResult,
'Multiple validation errors occurred while deleting webhook',