Migrate cron, databaseEventTrigger, httpRoute triggers to serverless functions (#17488)

## Summary

Migrates trigger entities (`CronTriggerEntity`,
`DatabaseEventTriggerEntity`, `RouteTriggerEntity`) into
`ServerlessFunctionEntity` by storing trigger settings as JSONB columns
directly on the serverless function. This simplifies the architecture
since these relationships were effectively one-to-one.

## Changes

### Schema Changes
- Added three new nullable JSONB columns to `ServerlessFunctionEntity`:
  - `cronTriggerSettings` - stores cron pattern
- `databaseEventTriggerSettings` - stores event name and updated fields
filter
- `httpRouteTriggerSettings` - stores path, HTTP method, auth
requirements, and forwarded headers

### Core Logic Updates
- `CronTriggerCronJob` - now queries `ServerlessFunctionEntity` directly
instead of `CronTriggerEntity`
- `CallDatabaseEventTriggerJobsJob` - now queries
`ServerlessFunctionEntity` directly
- `RouteTriggerService` - now queries `ServerlessFunctionEntity`
directly
- `ApplicationSyncService` - extracts trigger settings from manifest and
writes to serverless function
This commit is contained in:
Charles Bochet
2026-01-27 20:54:09 +01:00
committed by GitHub
parent e1f92bd951
commit a4499d21bb
110 changed files with 439 additions and 5193 deletions
@@ -16,8 +16,6 @@ import {
import { aggregateOrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration/utils/aggregate-orchestrator-actions-report.util';
import { WorkspaceMigrationAgentActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/agent/workspace-migration-agent-actions-builder.service';
import { WorkspaceMigrationCommandMenuItemActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/command-menu-item/workspace-migration-command-menu-item-actions-builder.service';
import { WorkspaceMigrationCronTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/cron-trigger/workspace-migration-cron-trigger-action-builder.service';
import { WorkspaceMigrationDatabaseEventTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/database-event-trigger/workspace-migration-database-event-trigger-actions-builder.service';
import { WorkspaceMigrationFieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/workspace-migration-field-actions-builder.service';
import { WorkspaceMigrationFrontComponentActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/front-component/workspace-migration-front-component-actions-builder.service';
import { WorkspaceMigrationIndexActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/index/workspace-migration-index-actions-builder.service';
@@ -28,7 +26,6 @@ import { WorkspaceMigrationPageLayoutWidgetActionsBuilderService } from 'src/eng
import { WorkspaceMigrationPageLayoutActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout/workspace-migration-page-layout-actions-builder.service';
import { WorkspaceMigrationRoleTargetActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role-target/workspace-migration-role-target-actions-builder.service';
import { WorkspaceMigrationRoleActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role/workspace-migration-role-actions-builder.service';
import { WorkspaceMigrationRouteTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/route-trigger/workspace-migration-route-trigger-actions-builder.service';
import { WorkspaceMigrationRowLevelPermissionPredicateGroupActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate-group/workspace-migration-row-level-permission-predicate-group-actions-builder.service';
import { WorkspaceMigrationRowLevelPermissionPredicateActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate/workspace-migration-row-level-permission-predicate-actions-builder.service';
import { WorkspaceMigrationServerlessFunctionActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/serverless-function/workspace-migration-serverless-function-actions-builder.service';
@@ -51,9 +48,6 @@ export class WorkspaceMigrationBuildOrchestratorService {
private readonly workspaceMigrationViewFilterGroupActionsBuilderService: WorkspaceMigrationViewFilterGroupActionsBuilderService,
private readonly workspaceMigrationViewGroupActionsBuilderService: WorkspaceMigrationViewGroupActionsBuilderService,
private readonly workspaceMigrationServerlessFunctionActionsBuilderService: WorkspaceMigrationServerlessFunctionActionsBuilderService,
private readonly workspaceMigrationDatabaseEventTriggerActionsBuilderService: WorkspaceMigrationDatabaseEventTriggerActionsBuilderService,
private readonly workspaceMigrationCronTriggerActionsBuilderService: WorkspaceMigrationCronTriggerActionsBuilderService,
private readonly workspaceMigrationRouteTriggerActionsBuilderService: WorkspaceMigrationRouteTriggerActionsBuilderService,
private readonly workspaceMigrationRoleTargetActionsBuilderService: WorkspaceMigrationRoleTargetActionsBuilderService,
private readonly workspaceMigrationFieldActionsBuilderService: WorkspaceMigrationFieldActionsBuilderService,
private readonly workspaceMigrationRoleActionsBuilderService: WorkspaceMigrationRoleActionsBuilderService,
@@ -151,9 +145,6 @@ export class WorkspaceMigrationBuildOrchestratorService {
flatViewMaps,
flatIndexMaps,
flatServerlessFunctionMaps,
flatDatabaseEventTriggerMaps,
flatCronTriggerMaps,
flatRouteTriggerMaps,
flatFieldMetadataMaps,
flatViewFilterMaps,
flatViewFilterGroupMaps,
@@ -591,115 +582,6 @@ export class WorkspaceMigrationBuildOrchestratorService {
}
}
if (isDefined(flatDatabaseEventTriggerMaps)) {
const {
from: fromFlatDatabaseEventTriggerMaps,
to: toFlatDatabaseEventTriggerMaps,
} = flatDatabaseEventTriggerMaps;
const databaseEventTriggerResult =
await this.workspaceMigrationDatabaseEventTriggerActionsBuilderService.validateAndBuild(
{
additionalCacheDataMaps,
from: fromFlatDatabaseEventTriggerMaps,
to: toFlatDatabaseEventTriggerMaps,
buildOptions,
dependencyOptimisticFlatEntityMaps: {
flatServerlessFunctionMaps:
optimisticAllFlatEntityMaps.flatServerlessFunctionMaps,
},
workspaceId,
},
);
this.mergeFlatEntityMapsAndRelatedFlatEntityMapsInAllFlatEntityMapsThroughMutation(
{
allFlatEntityMaps: optimisticAllFlatEntityMaps,
flatEntityMapsAndRelatedFlatEntityMaps:
databaseEventTriggerResult.optimisticFlatEntityMapsAndRelatedFlatEntityMaps,
},
);
if (databaseEventTriggerResult.status === 'fail') {
orchestratorFailureReport.databaseEventTrigger.push(
...databaseEventTriggerResult.errors,
);
} else {
orchestratorActionsReport.databaseEventTrigger =
databaseEventTriggerResult.actions;
}
}
if (isDefined(flatCronTriggerMaps)) {
const { from: fromFlatCronTriggerMaps, to: toFlatCronTriggerMaps } =
flatCronTriggerMaps;
const cronTriggerResult =
await this.workspaceMigrationCronTriggerActionsBuilderService.validateAndBuild(
{
additionalCacheDataMaps,
from: fromFlatCronTriggerMaps,
to: toFlatCronTriggerMaps,
buildOptions,
dependencyOptimisticFlatEntityMaps: {
flatServerlessFunctionMaps:
optimisticAllFlatEntityMaps.flatServerlessFunctionMaps,
},
workspaceId,
},
);
this.mergeFlatEntityMapsAndRelatedFlatEntityMapsInAllFlatEntityMapsThroughMutation(
{
allFlatEntityMaps: optimisticAllFlatEntityMaps,
flatEntityMapsAndRelatedFlatEntityMaps:
cronTriggerResult.optimisticFlatEntityMapsAndRelatedFlatEntityMaps,
},
);
if (cronTriggerResult.status === 'fail') {
orchestratorFailureReport.cronTrigger.push(...cronTriggerResult.errors);
} else {
orchestratorActionsReport.cronTrigger = cronTriggerResult.actions;
}
}
if (isDefined(flatRouteTriggerMaps)) {
const { from: fromFlatRouteTriggerMaps, to: toFlatRouteTriggerMaps } =
flatRouteTriggerMaps;
const routeTriggerResult =
await this.workspaceMigrationRouteTriggerActionsBuilderService.validateAndBuild(
{
additionalCacheDataMaps,
from: fromFlatRouteTriggerMaps,
to: toFlatRouteTriggerMaps,
buildOptions,
dependencyOptimisticFlatEntityMaps: {
flatServerlessFunctionMaps:
optimisticAllFlatEntityMaps.flatServerlessFunctionMaps,
},
workspaceId,
},
);
this.mergeFlatEntityMapsAndRelatedFlatEntityMapsInAllFlatEntityMapsThroughMutation(
{
allFlatEntityMaps: optimisticAllFlatEntityMaps,
flatEntityMapsAndRelatedFlatEntityMaps:
routeTriggerResult.optimisticFlatEntityMapsAndRelatedFlatEntityMaps,
},
);
if (routeTriggerResult.status === 'fail') {
orchestratorFailureReport.routeTrigger.push(
...routeTriggerResult.errors,
);
} else {
orchestratorActionsReport.routeTrigger = routeTriggerResult.actions;
}
}
if (isDefined(flatRoleMaps)) {
const { from: fromFlatRoleMaps, to: toFlatRoleMaps } = flatRoleMaps;
@@ -1,12 +0,0 @@
import { type BaseCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-create-workspace-migration-action.type';
import { type BaseDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-delete-workspace-migration-action.type';
import { type BaseUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-update-workspace-migration-action.type';
export type CreateCronTriggerAction =
BaseCreateWorkspaceMigrationAction<'cronTrigger'>;
export type UpdateCronTriggerAction =
BaseUpdateWorkspaceMigrationAction<'cronTrigger'>;
export type DeleteCronTriggerAction =
BaseDeleteWorkspaceMigrationAction<'cronTrigger'>;
@@ -1,111 +0,0 @@
import { Injectable } from '@nestjs/common';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/cron-trigger/types/workspace-migration-cron-trigger-action.type';
import { WorkspaceEntityMigrationBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/services/workspace-entity-migration-builder.service';
import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-update-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-args.type';
import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-result.type';
import { FlatCronTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-cron-trigger-validator.service';
@Injectable()
export class WorkspaceMigrationCronTriggerActionsBuilderService extends WorkspaceEntityMigrationBuilderService<
typeof ALL_METADATA_NAME.cronTrigger
> {
constructor(
private readonly flatCronTriggerValidatorService: FlatCronTriggerValidatorService,
) {
super(ALL_METADATA_NAME.cronTrigger);
}
protected validateFlatEntityCreation(
args: FlatEntityValidationArgs<typeof ALL_METADATA_NAME.cronTrigger>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.cronTrigger,
'create'
> {
const validationResult =
this.flatCronTriggerValidatorService.validateFlatCronTriggerCreation(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityToValidate: flatCronTriggerToValidate } = args;
return {
status: 'success',
action: {
type: 'create',
metadataName: 'cronTrigger',
flatEntity: flatCronTriggerToValidate,
},
};
}
protected validateFlatEntityDeletion(
args: FlatEntityValidationArgs<typeof ALL_METADATA_NAME.cronTrigger>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.cronTrigger,
'delete'
> {
const validationResult =
this.flatCronTriggerValidatorService.validateFlatCronTriggerDeletion(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityToValidate: flatCronTriggerToValidate } = args;
return {
status: 'success',
action: {
type: 'delete',
metadataName: 'cronTrigger',
universalIdentifier: flatCronTriggerToValidate.universalIdentifier,
},
};
}
protected validateFlatEntityUpdate(
args: FlatEntityUpdateValidationArgs<typeof ALL_METADATA_NAME.cronTrigger>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.cronTrigger,
'update'
> {
const validationResult =
this.flatCronTriggerValidatorService.validateFlatCronTriggerUpdate(args);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityId, flatEntityUpdates } = args;
const updateCronTriggerAction: UpdateCronTriggerAction = {
type: 'update',
metadataName: 'cronTrigger',
entityId: flatEntityId,
updates: flatEntityUpdates,
};
return {
status: 'success',
action: updateCronTriggerAction,
};
}
}
@@ -1,12 +0,0 @@
import { type BaseCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-create-workspace-migration-action.type';
import { type BaseDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-delete-workspace-migration-action.type';
import { type BaseUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-update-workspace-migration-action.type';
export type CreateDatabaseEventTriggerAction =
BaseCreateWorkspaceMigrationAction<'databaseEventTrigger'>;
export type UpdateDatabaseEventTriggerAction =
BaseUpdateWorkspaceMigrationAction<'databaseEventTrigger'>;
export type DeleteDatabaseEventTriggerAction =
BaseDeleteWorkspaceMigrationAction<'databaseEventTrigger'>;
@@ -1,121 +0,0 @@
import { Injectable } from '@nestjs/common';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action.type';
import { WorkspaceEntityMigrationBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/services/workspace-entity-migration-builder.service';
import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-update-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-args.type';
import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-result.type';
import { FlatDatabaseEventTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-database-event-trigger-validator.service';
@Injectable()
export class WorkspaceMigrationDatabaseEventTriggerActionsBuilderService extends WorkspaceEntityMigrationBuilderService<
typeof ALL_METADATA_NAME.databaseEventTrigger
> {
constructor(
private readonly flatDatabaseEventTriggerValidatorService: FlatDatabaseEventTriggerValidatorService,
) {
super(ALL_METADATA_NAME.databaseEventTrigger);
}
protected validateFlatEntityCreation(
args: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.databaseEventTrigger
>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.databaseEventTrigger,
'create'
> {
const validationResult =
this.flatDatabaseEventTriggerValidatorService.validateFlatDatabaseEventTriggerCreation(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityToValidate: flatDatabaseEventTriggerToValidate } = args;
return {
status: 'success',
action: {
type: 'create',
metadataName: 'databaseEventTrigger',
flatEntity: flatDatabaseEventTriggerToValidate,
},
};
}
protected validateFlatEntityDeletion(
args: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.databaseEventTrigger
>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.databaseEventTrigger,
'delete'
> {
const validationResult =
this.flatDatabaseEventTriggerValidatorService.validateFlatDatabaseEventTriggerDeletion(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityToValidate: flatDatabaseEventTriggerToValidate } = args;
return {
status: 'success',
action: {
type: 'delete',
metadataName: 'databaseEventTrigger',
universalIdentifier:
flatDatabaseEventTriggerToValidate.universalIdentifier,
},
};
}
protected validateFlatEntityUpdate(
args: FlatEntityUpdateValidationArgs<
typeof ALL_METADATA_NAME.databaseEventTrigger
>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.databaseEventTrigger,
'update'
> {
const validationResult =
this.flatDatabaseEventTriggerValidatorService.validateFlatDatabaseEventTriggerUpdate(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityId, flatEntityUpdates } = args;
const updateDatabaseEventTriggerAction: UpdateDatabaseEventTriggerAction = {
type: 'update',
metadataName: 'databaseEventTrigger',
entityId: flatEntityId,
updates: flatEntityUpdates,
};
return {
status: 'success',
action: updateDatabaseEventTriggerAction,
};
}
}
@@ -1,12 +0,0 @@
import { type BaseCreateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-create-workspace-migration-action.type';
import { type BaseDeleteWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-delete-workspace-migration-action.type';
import { type BaseUpdateWorkspaceMigrationAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/base-update-workspace-migration-action.type';
export type CreateRouteTriggerAction =
BaseCreateWorkspaceMigrationAction<'routeTrigger'>;
export type UpdateRouteTriggerAction =
BaseUpdateWorkspaceMigrationAction<'routeTrigger'>;
export type DeleteRouteTriggerAction =
BaseDeleteWorkspaceMigrationAction<'routeTrigger'>;
@@ -1,114 +0,0 @@
import { Injectable } from '@nestjs/common';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/route-trigger/types/workspace-migration-route-trigger-action.type';
import { WorkspaceEntityMigrationBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/services/workspace-entity-migration-builder.service';
import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-update-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-args.type';
import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-result.type';
import { FlatRouteTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-route-trigger-validator.service';
@Injectable()
export class WorkspaceMigrationRouteTriggerActionsBuilderService extends WorkspaceEntityMigrationBuilderService<
typeof ALL_METADATA_NAME.routeTrigger
> {
constructor(
private readonly flatRouteTriggerValidatorService: FlatRouteTriggerValidatorService,
) {
super(ALL_METADATA_NAME.routeTrigger);
}
protected validateFlatEntityCreation(
args: FlatEntityValidationArgs<typeof ALL_METADATA_NAME.routeTrigger>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.routeTrigger,
'create'
> {
const validationResult =
this.flatRouteTriggerValidatorService.validateFlatRouteTriggerCreation(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityToValidate: flatRouteTriggerToValidate } = args;
return {
status: 'success',
action: {
type: 'create',
metadataName: 'routeTrigger',
flatEntity: flatRouteTriggerToValidate,
},
};
}
protected validateFlatEntityDeletion(
args: FlatEntityValidationArgs<typeof ALL_METADATA_NAME.routeTrigger>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.routeTrigger,
'delete'
> {
const validationResult =
this.flatRouteTriggerValidatorService.validateFlatRouteTriggerDeletion(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityToValidate: flatRouteTriggerToValidate } = args;
return {
status: 'success',
action: {
type: 'delete',
metadataName: 'routeTrigger',
universalIdentifier: flatRouteTriggerToValidate.universalIdentifier,
},
};
}
protected validateFlatEntityUpdate(
args: FlatEntityUpdateValidationArgs<typeof ALL_METADATA_NAME.routeTrigger>,
): FlatEntityValidationReturnType<
typeof ALL_METADATA_NAME.routeTrigger,
'update'
> {
const validationResult =
this.flatRouteTriggerValidatorService.validateFlatRouteTriggerUpdate(
args,
);
if (validationResult.errors.length > 0) {
return {
status: 'fail',
...validationResult,
};
}
const { flatEntityId, flatEntityUpdates } = args;
const updateRouteTriggerAction: UpdateRouteTriggerAction = {
type: 'update',
metadataName: 'routeTrigger',
entityId: flatEntityId,
updates: flatEntityUpdates,
};
return {
status: 'success',
action: updateRouteTriggerAction,
};
}
}
@@ -1,149 +0,0 @@
import { Injectable } from '@nestjs/common';
import { msg, t } from '@lingui/core/macro';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { isDefined } from 'twenty-shared/utils';
import { CronTriggerExceptionCode } from 'src/engine/metadata-modules/cron-trigger/exceptions/cron-trigger.exception';
import { 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';
import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-update-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-args.type';
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
@Injectable()
export class FlatCronTriggerValidatorService {
constructor() {}
public validateFlatCronTriggerUpdate({
flatEntityId,
flatEntityUpdates,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatCronTriggerMaps: optimisticFlatCronTriggerMaps,
flatServerlessFunctionMaps,
},
}: FlatEntityUpdateValidationArgs<
typeof ALL_METADATA_NAME.cronTrigger
>): FailedFlatEntityValidation<'cronTrigger', 'update'> {
const existingFlatCronTrigger =
optimisticFlatCronTriggerMaps.byId[flatEntityId];
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: flatEntityId,
universalIdentifier: existingFlatCronTrigger?.universalIdentifier,
},
metadataName: 'cronTrigger',
type: 'update',
});
if (!isDefined(existingFlatCronTrigger)) {
validationResult.errors.push({
code: CronTriggerExceptionCode.CRON_TRIGGER_NOT_FOUND,
message: t`Cron trigger not found`,
userFriendlyMessage: msg`Cron trigger not found`,
});
return validationResult;
}
const updatedFlatCronTrigger = {
...existingFlatCronTrigger,
...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({
updates: flatEntityUpdates,
}),
};
const serverlessFunction =
flatServerlessFunctionMaps.byId[
updatedFlatCronTrigger.serverlessFunctionId
];
if (!isDefined(serverlessFunction)) {
validationResult.errors.push({
code: CronTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND,
message: t`Serverless function not found`,
userFriendlyMessage: msg`Serverless function not found`,
});
}
return validationResult;
}
public validateFlatCronTriggerDeletion({
flatEntityToValidate: { id: cronTriggerIdToDelete, universalIdentifier },
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatCronTriggerMaps: optimisticFlatCronTriggerMaps,
},
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.cronTrigger
>): FailedFlatEntityValidation<'cronTrigger', 'delete'> {
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: cronTriggerIdToDelete,
universalIdentifier,
},
metadataName: 'cronTrigger',
type: 'delete',
});
const existingFlatCronTrigger =
optimisticFlatCronTriggerMaps.byId[cronTriggerIdToDelete];
if (!isDefined(existingFlatCronTrigger)) {
validationResult.errors.push({
code: CronTriggerExceptionCode.CRON_TRIGGER_NOT_FOUND,
message: t`Cron trigger not found`,
userFriendlyMessage: msg`Cron trigger not found`,
});
}
return validationResult;
}
public validateFlatCronTriggerCreation({
flatEntityToValidate: flatCronTriggerToValidate,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatCronTriggerMaps: optimisticFlatCronTriggerMaps,
flatServerlessFunctionMaps,
},
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.cronTrigger
>): FailedFlatEntityValidation<'cronTrigger', 'create'> {
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: flatCronTriggerToValidate.id,
universalIdentifier: flatCronTriggerToValidate.universalIdentifier,
},
metadataName: 'cronTrigger',
type: 'create',
});
if (
isDefined(
optimisticFlatCronTriggerMaps.byId[flatCronTriggerToValidate.id],
)
) {
validationResult.errors.push({
code: CronTriggerExceptionCode.CRON_TRIGGER_ALREADY_EXIST,
message: t`Cron trigger with same id already exists`,
userFriendlyMessage: msg`Cron trigger already exists`,
});
}
const serverlessFunction =
flatServerlessFunctionMaps.byId[
flatCronTriggerToValidate.serverlessFunctionId
];
if (!isDefined(serverlessFunction)) {
validationResult.errors.push({
code: CronTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND,
message: t`Serverless function not found`,
userFriendlyMessage: msg`Serverless function not found`,
});
}
return validationResult;
}
}
@@ -1,159 +0,0 @@
import { Injectable } from '@nestjs/common';
import { msg, t } from '@lingui/core/macro';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { isDefined } from 'twenty-shared/utils';
import { DatabaseEventTriggerExceptionCode } from 'src/engine/metadata-modules/database-event-trigger/exceptions/database-event-trigger.exception';
import { 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';
import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-update-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-args.type';
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
// TODO: validate settings integrity
@Injectable()
export class FlatDatabaseEventTriggerValidatorService {
constructor() {}
public validateFlatDatabaseEventTriggerUpdate({
flatEntityId,
flatEntityUpdates,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatDatabaseEventTriggerMaps: optimisticFlatDatabaseEventTriggerMaps,
flatServerlessFunctionMaps,
},
}: FlatEntityUpdateValidationArgs<
typeof ALL_METADATA_NAME.databaseEventTrigger
>): FailedFlatEntityValidation<'databaseEventTrigger', 'update'> {
const existingFlatDatabaseEventTrigger =
optimisticFlatDatabaseEventTriggerMaps.byId[flatEntityId];
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: flatEntityId,
universalIdentifier:
existingFlatDatabaseEventTrigger?.universalIdentifier,
},
metadataName: 'databaseEventTrigger',
type: 'update',
});
if (!isDefined(existingFlatDatabaseEventTrigger)) {
validationResult.errors.push({
code: DatabaseEventTriggerExceptionCode.DATABASE_EVENT_TRIGGER_NOT_FOUND,
message: t`Database event trigger not found`,
userFriendlyMessage: msg`Database event trigger not found`,
});
return validationResult;
}
const updatedFlatDatabaseEventTrigger = {
...existingFlatDatabaseEventTrigger,
...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({
updates: flatEntityUpdates,
}),
};
const serverlessFunction =
flatServerlessFunctionMaps.byId[
updatedFlatDatabaseEventTrigger.serverlessFunctionId
];
if (!isDefined(serverlessFunction)) {
validationResult.errors.push({
code: DatabaseEventTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND,
message: t`Serverless function not found`,
userFriendlyMessage: msg`Serverless function not found`,
});
}
return validationResult;
}
public validateFlatDatabaseEventTriggerDeletion({
flatEntityToValidate: {
id: databaseEventTriggerIdToDelete,
universalIdentifier,
},
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatDatabaseEventTriggerMaps: optimisticFlatDatabaseEventTriggerMaps,
},
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.databaseEventTrigger
>): FailedFlatEntityValidation<'databaseEventTrigger', 'delete'> {
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: databaseEventTriggerIdToDelete,
universalIdentifier,
},
metadataName: 'databaseEventTrigger',
type: 'delete',
});
const existingFlatDatabaseEventTrigger =
optimisticFlatDatabaseEventTriggerMaps.byId[
databaseEventTriggerIdToDelete
];
if (!isDefined(existingFlatDatabaseEventTrigger)) {
validationResult.errors.push({
code: DatabaseEventTriggerExceptionCode.DATABASE_EVENT_TRIGGER_NOT_FOUND,
message: t`Database event trigger not found`,
userFriendlyMessage: msg`Database event trigger not found`,
});
}
return validationResult;
}
public validateFlatDatabaseEventTriggerCreation({
flatEntityToValidate: flatDatabaseEventTriggerToValidate,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatDatabaseEventTriggerMaps: optimisticFlatDatabaseEventTriggerMaps,
flatServerlessFunctionMaps,
},
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.databaseEventTrigger
>): FailedFlatEntityValidation<'databaseEventTrigger', 'create'> {
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: flatDatabaseEventTriggerToValidate.id,
universalIdentifier:
flatDatabaseEventTriggerToValidate.universalIdentifier,
},
metadataName: 'databaseEventTrigger',
type: 'create',
});
if (
isDefined(
optimisticFlatDatabaseEventTriggerMaps.byId[
flatDatabaseEventTriggerToValidate.id
],
)
) {
validationResult.errors.push({
code: DatabaseEventTriggerExceptionCode.DATABASE_EVENT_TRIGGER_ALREADY_EXIST,
message: t`Database event trigger with same id already exists`,
userFriendlyMessage: msg`Database event trigger already exists`,
});
}
const serverlessFunction =
flatServerlessFunctionMaps?.byId?.[
flatDatabaseEventTriggerToValidate.serverlessFunctionId
];
if (!isDefined(serverlessFunction)) {
validationResult.errors.push({
code: DatabaseEventTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND,
message: t`Serverless function not found`,
userFriendlyMessage: msg`Serverless function not found`,
});
}
return validationResult;
}
}
@@ -1,166 +0,0 @@
import { Injectable } from '@nestjs/common';
import { msg, t } from '@lingui/core/macro';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { isDefined } from 'twenty-shared/utils';
import { RouteTriggerExceptionCode } from 'src/engine/metadata-modules/route-trigger/exceptions/route-trigger.exception';
import { 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';
import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-update-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/types/flat-entity-validation-args.type';
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
@Injectable()
export class FlatRouteTriggerValidatorService {
constructor() {}
public validateFlatRouteTriggerUpdate({
flatEntityId,
flatEntityUpdates,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatRouteTriggerMaps: optimisticFlatRouteTriggerMaps,
flatServerlessFunctionMaps,
},
}: FlatEntityUpdateValidationArgs<
typeof ALL_METADATA_NAME.routeTrigger
>): FailedFlatEntityValidation<'routeTrigger', 'update'> {
const existingFlatRouteTrigger =
optimisticFlatRouteTriggerMaps.byId[flatEntityId];
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: flatEntityId,
universalIdentifier: existingFlatRouteTrigger?.universalIdentifier,
},
metadataName: 'routeTrigger',
type: 'update',
});
if (!isDefined(existingFlatRouteTrigger)) {
validationResult.errors.push({
code: RouteTriggerExceptionCode.ROUTE_NOT_FOUND,
message: t`Route not found`,
userFriendlyMessage: msg`Route not found`,
});
return validationResult;
}
const updatedFlatRouteTrigger = {
...existingFlatRouteTrigger,
...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({
updates: flatEntityUpdates,
}),
};
const serverlessFunction =
flatServerlessFunctionMaps.byId[
updatedFlatRouteTrigger.serverlessFunctionId
];
if (!isDefined(serverlessFunction)) {
validationResult.errors.push({
code: RouteTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND,
message: t`Serverless function not found`,
userFriendlyMessage: msg`Serverless function not found`,
});
}
return validationResult;
}
public validateFlatRouteTriggerDeletion({
flatEntityToValidate: { id: routeTriggerIdToDelete, universalIdentifier },
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatRouteTriggerMaps: optimisticFlatRouteTriggerMaps,
},
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.routeTrigger
>): FailedFlatEntityValidation<'routeTrigger', 'delete'> {
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: routeTriggerIdToDelete,
universalIdentifier,
},
metadataName: 'routeTrigger',
type: 'delete',
});
const existingFlatRouteTrigger =
optimisticFlatRouteTriggerMaps.byId[routeTriggerIdToDelete];
if (!isDefined(existingFlatRouteTrigger)) {
validationResult.errors.push({
code: RouteTriggerExceptionCode.ROUTE_NOT_FOUND,
message: t`Route not found`,
userFriendlyMessage: msg`Route not found`,
});
}
return validationResult;
}
public validateFlatRouteTriggerCreation({
flatEntityToValidate: flatRouteTriggerToValidate,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatRouteTriggerMaps: optimisticFlatRouteTriggerMaps,
flatServerlessFunctionMaps,
},
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.routeTrigger
>): FailedFlatEntityValidation<'routeTrigger', 'create'> {
const validationResult = getEmptyFlatEntityValidationError({
flatEntityMinimalInformation: {
id: flatRouteTriggerToValidate.id,
universalIdentifier: flatRouteTriggerToValidate.universalIdentifier,
},
metadataName: 'routeTrigger',
type: 'create',
});
if (
isDefined(
optimisticFlatRouteTriggerMaps.byId[flatRouteTriggerToValidate.id],
)
) {
validationResult.errors.push({
code: RouteTriggerExceptionCode.ROUTE_ALREADY_EXIST,
message: t`Route with same id already exists`,
userFriendlyMessage: msg`Route already exists`,
});
}
const existingFlatRouteTriggers = Object.values(
optimisticFlatRouteTriggerMaps.byId,
).filter(isDefined);
if (
existingFlatRouteTriggers.find(
(flatRouteTrigger) =>
flatRouteTrigger.path === flatRouteTriggerToValidate.path,
)
) {
validationResult.errors.push({
code: RouteTriggerExceptionCode.ROUTE_PATH_ALREADY_EXIST,
message: t`Route with same path already exists`,
userFriendlyMessage: msg`Route path already exists`,
});
}
const serverlessFunction =
flatServerlessFunctionMaps.byId[
flatRouteTriggerToValidate.serverlessFunctionId
];
if (!isDefined(serverlessFunction)) {
validationResult.errors.push({
code: RouteTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND,
message: t`Serverless function not found`,
userFriendlyMessage: msg`Serverless function not found`,
});
}
return validationResult;
}
}
@@ -5,8 +5,6 @@ import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modul
import { FlatPageLayoutWidgetTypeValidatorService } from 'src/engine/metadata-modules/flat-page-layout-widget/services/flat-page-layout-widget-type-validator.service';
import { FlatAgentValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-agent-validator.service';
import { FlatCommandMenuItemValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-command-menu-item-validator.service';
import { FlatCronTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-cron-trigger-validator.service';
import { FlatDatabaseEventTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-database-event-trigger-validator.service';
import { FlatFieldMetadataValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-field-metadata-validator.service';
import { FlatFrontComponentValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-front-component-validator.service';
import { FlatIndexValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-index-metadata-validator.service';
@@ -17,7 +15,6 @@ import { FlatPageLayoutValidatorService } from 'src/engine/workspace-manager/wor
import { FlatPageLayoutWidgetValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-page-layout-widget-validator.service';
import { FlatRoleTargetValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-role-target-validator.service';
import { FlatRoleValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-role-validator.service';
import { FlatRouteTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-route-trigger-validator.service';
import { FlatRowLevelPermissionPredicateGroupValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-row-level-permission-predicate-group-validator.service';
import { FlatRowLevelPermissionPredicateValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-row-level-permission-predicate-validator.service';
import { FlatServerlessFunctionValidatorService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/validators/services/flat-serverless-function-validator.service';
@@ -41,11 +38,8 @@ import { FlatWebhookValidatorService } from 'src/engine/workspace-manager/worksp
FlatFieldMetadataValidatorService,
FlatObjectMetadataValidatorService,
FlatServerlessFunctionValidatorService,
FlatDatabaseEventTriggerValidatorService,
FlatCronTriggerValidatorService,
FlatFieldMetadataTypeValidatorService,
FlatPageLayoutWidgetTypeValidatorService,
FlatRouteTriggerValidatorService,
FlatRoleValidatorService,
FlatRoleTargetValidatorService,
FlatAgentValidatorService,
@@ -70,10 +64,7 @@ import { FlatWebhookValidatorService } from 'src/engine/workspace-manager/worksp
FlatFieldMetadataValidatorService,
FlatObjectMetadataValidatorService,
FlatServerlessFunctionValidatorService,
FlatDatabaseEventTriggerValidatorService,
FlatCronTriggerValidatorService,
FlatFieldMetadataTypeValidatorService,
FlatRouteTriggerValidatorService,
FlatRoleValidatorService,
FlatRoleTargetValidatorService,
FlatAgentValidatorService,
@@ -5,8 +5,6 @@ import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modul
import { WorkspaceMigrationAgentActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/agent/workspace-migration-agent-actions-builder.service';
import { WorkspaceMigrationCommandMenuItemActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/command-menu-item/workspace-migration-command-menu-item-actions-builder.service';
import { WorkspaceMigrationNavigationMenuItemActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/navigation-menu-item/workspace-migration-navigation-menu-item-actions-builder.service';
import { WorkspaceMigrationCronTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/cron-trigger/workspace-migration-cron-trigger-action-builder.service';
import { WorkspaceMigrationDatabaseEventTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/database-event-trigger/workspace-migration-database-event-trigger-actions-builder.service';
import { WorkspaceMigrationFieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/field/workspace-migration-field-actions-builder.service';
import { WorkspaceMigrationIndexActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/index/workspace-migration-index-actions-builder.service';
import { WorkspaceMigrationObjectActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/object/workspace-migration-object-actions-builder.service';
@@ -15,7 +13,6 @@ import { WorkspaceMigrationPageLayoutWidgetActionsBuilderService } from 'src/eng
import { WorkspaceMigrationPageLayoutActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/page-layout/workspace-migration-page-layout-actions-builder.service';
import { WorkspaceMigrationRoleTargetActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role-target/workspace-migration-role-target-actions-builder.service';
import { WorkspaceMigrationRoleActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/role/workspace-migration-role-actions-builder.service';
import { WorkspaceMigrationRouteTriggerActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/route-trigger/workspace-migration-route-trigger-actions-builder.service';
import { WorkspaceMigrationRowLevelPermissionPredicateGroupActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate-group/workspace-migration-row-level-permission-predicate-group-actions-builder.service';
import { WorkspaceMigrationRowLevelPermissionPredicateActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/row-level-permission-predicate/workspace-migration-row-level-permission-predicate-actions-builder.service';
import { WorkspaceMigrationServerlessFunctionActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/serverless-function/workspace-migration-serverless-function-actions-builder.service';
@@ -41,10 +38,7 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace-
WorkspaceMigrationViewGroupActionsBuilderService,
WorkspaceMigrationIndexActionsBuilderService,
WorkspaceMigrationServerlessFunctionActionsBuilderService,
WorkspaceMigrationDatabaseEventTriggerActionsBuilderService,
WorkspaceMigrationFieldActionsBuilderService,
WorkspaceMigrationCronTriggerActionsBuilderService,
WorkspaceMigrationRouteTriggerActionsBuilderService,
WorkspaceMigrationRoleActionsBuilderService,
WorkspaceMigrationRoleTargetActionsBuilderService,
WorkspaceMigrationAgentActionsBuilderService,
@@ -69,9 +63,6 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace-
WorkspaceMigrationViewGroupActionsBuilderService,
WorkspaceMigrationFieldActionsBuilderService,
WorkspaceMigrationServerlessFunctionActionsBuilderService,
WorkspaceMigrationDatabaseEventTriggerActionsBuilderService,
WorkspaceMigrationCronTriggerActionsBuilderService,
WorkspaceMigrationRouteTriggerActionsBuilderService,
WorkspaceMigrationRoleActionsBuilderService,
WorkspaceMigrationRoleTargetActionsBuilderService,
WorkspaceMigrationAgentActionsBuilderService,
@@ -1,32 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity';
import { CreateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/cron-trigger/types/workspace-migration-cron-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
@Injectable()
export class CreateCronTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'create',
'cronTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<CreateCronTriggerAction>,
): Promise<void> {
const { action, queryRunner, workspaceId } = context;
const { flatEntity: cronTrigger } = action;
const cronTriggerRepository =
queryRunner.manager.getRepository<CronTriggerEntity>(CronTriggerEntity);
await cronTriggerRepository.insert({
...cronTrigger,
workspaceId,
});
}
}
@@ -1,38 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { DeleteCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/cron-trigger/types/workspace-migration-cron-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
@Injectable()
export class DeleteCronTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'delete',
'cronTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<DeleteCronTriggerAction>,
): Promise<void> {
const { action, queryRunner, workspaceId, allFlatEntityMaps } = context;
const { universalIdentifier } = action;
const flatCronTrigger = findFlatEntityByUniversalIdentifierOrThrow({
flatEntityMaps: allFlatEntityMaps.flatCronTriggerMaps,
universalIdentifier,
});
const cronTriggerRepository =
queryRunner.manager.getRepository<CronTriggerEntity>(CronTriggerEntity);
await cronTriggerRepository.delete({
id: flatCronTrigger.id,
workspaceId,
});
}
}
@@ -1,33 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { CronTriggerEntity } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity';
import { UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/cron-trigger/types/workspace-migration-cron-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
@Injectable()
export class UpdateCronTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'update',
'cronTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<UpdateCronTriggerAction>,
): Promise<void> {
const { action, queryRunner } = context;
const { entityId } = action;
const cronTriggerRepository =
queryRunner.manager.getRepository<CronTriggerEntity>(CronTriggerEntity);
await cronTriggerRepository.update(
entityId,
fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action),
);
}
}
@@ -1,34 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity';
import { CreateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
@Injectable()
export class CreateDatabaseEventTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'create',
'databaseEventTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<CreateDatabaseEventTriggerAction>,
): Promise<void> {
const { action, queryRunner, workspaceId } = context;
const { flatEntity: databaseEventTrigger } = action;
const databaseEventTriggerRepository =
queryRunner.manager.getRepository<DatabaseEventTriggerEntity>(
DatabaseEventTriggerEntity,
);
await databaseEventTriggerRepository.insert({
...databaseEventTrigger,
workspaceId,
});
}
}
@@ -1,42 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { DeleteDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
@Injectable()
export class DeleteDatabaseEventTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'delete',
'databaseEventTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<DeleteDatabaseEventTriggerAction>,
): Promise<void> {
const { action, queryRunner, workspaceId, allFlatEntityMaps } = context;
const { universalIdentifier } = action;
const flatDatabaseEventTrigger = findFlatEntityByUniversalIdentifierOrThrow(
{
flatEntityMaps: allFlatEntityMaps.flatDatabaseEventTriggerMaps,
universalIdentifier,
},
);
const databaseEventTriggerRepository =
queryRunner.manager.getRepository<DatabaseEventTriggerEntity>(
DatabaseEventTriggerEntity,
);
await databaseEventTriggerRepository.delete({
id: flatDatabaseEventTrigger.id,
workspaceId,
});
}
}
@@ -1,35 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { DatabaseEventTriggerEntity } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity';
import { UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
@Injectable()
export class UpdateDatabaseEventTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'update',
'databaseEventTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<UpdateDatabaseEventTriggerAction>,
): Promise<void> {
const { action, queryRunner } = context;
const { entityId } = action;
const databaseEventTriggerRepository =
queryRunner.manager.getRepository<DatabaseEventTriggerEntity>(
DatabaseEventTriggerEntity,
);
await databaseEventTriggerRepository.update(
entityId,
fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action),
);
}
}
@@ -1,32 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity';
import { CreateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/route-trigger/types/workspace-migration-route-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
@Injectable()
export class CreateRouteTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'create',
'routeTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<CreateRouteTriggerAction>,
): Promise<void> {
const { action, queryRunner, workspaceId } = context;
const { flatEntity: routeTrigger } = action;
const routeTriggerRepository =
queryRunner.manager.getRepository<RouteTriggerEntity>(RouteTriggerEntity);
await routeTriggerRepository.insert({
...routeTrigger,
workspaceId,
});
}
}
@@ -1,38 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { findFlatEntityByUniversalIdentifierOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-universal-identifier-or-throw.util';
import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity';
import { DeleteRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/route-trigger/types/workspace-migration-route-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
@Injectable()
export class DeleteRouteTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'delete',
'routeTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<DeleteRouteTriggerAction>,
): Promise<void> {
const { action, queryRunner, workspaceId, allFlatEntityMaps } = context;
const { universalIdentifier } = action;
const flatRouteTrigger = findFlatEntityByUniversalIdentifierOrThrow({
flatEntityMaps: allFlatEntityMaps.flatRouteTriggerMaps,
universalIdentifier,
});
const routeTriggerRepository =
queryRunner.manager.getRepository<RouteTriggerEntity>(RouteTriggerEntity);
await routeTriggerRepository.delete({
id: flatRouteTrigger.id,
workspaceId,
});
}
}
@@ -1,33 +0,0 @@
import { Injectable } from '@nestjs/common';
import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/interfaces/workspace-migration-runner-action-handler-service.interface';
import { RouteTriggerEntity } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity';
import { UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-builder/builders/route-trigger/types/workspace-migration-route-trigger-action.type';
import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/types/workspace-migration-action-runner-args.type';
import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/utils/from-flat-entity-properties-updates-to-partial-flat-entity';
@Injectable()
export class UpdateRouteTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler(
'update',
'routeTrigger',
) {
constructor() {
super();
}
async executeForMetadata(
context: WorkspaceMigrationActionRunnerArgs<UpdateRouteTriggerAction>,
): Promise<void> {
const { action, queryRunner } = context;
const { entityId } = action;
const routeTriggerRepository =
queryRunner.manager.getRepository<RouteTriggerEntity>(RouteTriggerEntity);
await routeTriggerRepository.update(
entityId,
fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action),
);
}
}
@@ -10,12 +10,6 @@ import { UpdateCommandMenuItemActionHandlerService } from 'src/engine/workspace-
import { CreateNavigationMenuItemActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/navigation-menu-item/services/create-navigation-menu-item-action-handler.service';
import { DeleteNavigationMenuItemActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/navigation-menu-item/services/delete-navigation-menu-item-action-handler.service';
import { UpdateNavigationMenuItemActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/navigation-menu-item/services/update-navigation-menu-item-action-handler.service';
import { CreateCronTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service';
import { DeleteCronTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service';
import { UpdateCronTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service';
import { CreateDatabaseEventTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service';
import { DeleteDatabaseEventTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service';
import { UpdateDatabaseEventTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service';
import { CreateFieldActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/create-field-action-handler.service';
import { DeleteFieldActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/delete-field-action-handler.service';
import { UpdateFieldActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/field/services/update-field-action-handler.service';
@@ -40,9 +34,6 @@ import { UpdateRoleTargetActionHandlerService } from 'src/engine/workspace-manag
import { CreateRoleActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/create-role-action-handler.service';
import { DeleteRoleActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/delete-role-action-handler.service';
import { UpdateRoleActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/role/services/update-role-action-handler.service';
import { CreateRouteTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/route-trigger/services/create-route-trigger-action-handler.service';
import { DeleteRouteTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service';
import { UpdateRouteTriggerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/route-trigger/services/update-route-trigger-action-handler.service';
import { CreateRowLevelPermissionPredicateGroupActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/row-level-permission-predicate-group/services/create-row-level-permission-predicate-group-action-handler.service';
import { DeleteRowLevelPermissionPredicateGroupActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/row-level-permission-predicate-group/services/delete-row-level-permission-predicate-group-action-handler.service';
import { UpdateRowLevelPermissionPredicateGroupActionHandlerService } from 'src/engine/workspace-manager/workspace-migration/workspace-migration-runner/action-handlers/row-level-permission-predicate-group/services/update-row-level-permission-predicate-group-action-handler.service';
@@ -117,18 +108,6 @@ import { FunctionBuildModule } from 'src/engine/metadata-modules/function-build/
DeleteServerlessFunctionActionHandlerService,
UpdateServerlessFunctionActionHandlerService,
CreateDatabaseEventTriggerActionHandlerService,
DeleteDatabaseEventTriggerActionHandlerService,
UpdateDatabaseEventTriggerActionHandlerService,
CreateCronTriggerActionHandlerService,
DeleteCronTriggerActionHandlerService,
UpdateCronTriggerActionHandlerService,
CreateRouteTriggerActionHandlerService,
DeleteRouteTriggerActionHandlerService,
UpdateRouteTriggerActionHandlerService,
CreateRoleActionHandlerService,
UpdateRoleActionHandlerService,
DeleteRoleActionHandlerService,
@@ -59,9 +59,6 @@ export const optimisticallyApplyCreateActionOnAllFlatEntityMaps = <
case 'viewFilterGroup':
case 'index':
case 'serverlessFunction':
case 'cronTrigger':
case 'databaseEventTrigger':
case 'routeTrigger':
case 'viewFilter':
case 'role':
case 'roleTarget':
@@ -36,9 +36,6 @@ export const optimisticallyApplyDeleteActionOnAllFlatEntityMaps = <
case 'viewFilterGroup':
case 'index':
case 'serverlessFunction':
case 'cronTrigger':
case 'databaseEventTrigger':
case 'routeTrigger':
case 'viewFilter':
case 'role':
case 'roleTarget':
@@ -58,9 +58,6 @@ export const optimisticallyApplyUpdateActionOnAllFlatEntityMaps = <
case 'rowLevelPermissionPredicateGroup':
case 'viewFilterGroup':
case 'serverlessFunction':
case 'cronTrigger':
case 'databaseEventTrigger':
case 'routeTrigger':
case 'viewFilter':
case 'role':
case 'roleTarget':