diff --git a/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts b/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts index 3de1acb1f3..23f04cdf0e 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-sync.service.ts @@ -15,13 +15,13 @@ import { ServerlessFunctionManifest, ServerlessFunctionTriggerManifest, } from 'src/engine/core-modules/application/types/application.types'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { AgentService } from 'src/engine/metadata-modules/agent/agent.service'; import { CronTriggerV2Service } from 'src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service'; import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { DatabaseEventTriggerV2Service } from 'src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service'; import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { ObjectMetadataServiceV2 } from 'src/engine/metadata-modules/object-metadata/object-metadata-v2.service'; import { RouteTriggerV2Service } from 'src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service'; import { FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; diff --git a/packages/twenty-server/src/engine/core-modules/application/application.module.ts b/packages/twenty-server/src/engine/core-modules/application/application.module.ts index 7c008a70f8..88b36bba76 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application.module.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application.module.ts @@ -1,21 +1,21 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { ApplicationSyncService } from 'src/engine/core-modules/application/application-sync.service'; import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; import { ApplicationResolver } from 'src/engine/core-modules/application/application.resolver'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; -import { ApplicationSyncService } from 'src/engine/core-modules/application/application-sync.service'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentEntity } from 'src/engine/metadata-modules/agent/agent.entity'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; -import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; -import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { AgentModule } from 'src/engine/metadata-modules/agent/agent.module'; +import { CronTriggerModule } from 'src/engine/metadata-modules/cron-trigger/cron-trigger.module'; +import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; +import { DatabaseEventTriggerModule } from 'src/engine/metadata-modules/database-event-trigger/database-event-trigger.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; +import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; +import { RouteTriggerModule } from 'src/engine/metadata-modules/route-trigger/route-trigger.module'; import { ServerlessFunctionLayerModule } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.module'; import { ServerlessFunctionModule } from 'src/engine/metadata-modules/serverless-function/serverless-function.module'; -import { DatabaseEventTriggerModule } from 'src/engine/metadata-modules/database-event-trigger/database-event-trigger.module'; -import { CronTriggerModule } from 'src/engine/metadata-modules/cron-trigger/cron-trigger.module'; -import { RouteTriggerModule } from 'src/engine/metadata-modules/route-trigger/route-trigger.module'; @Module({ imports: [ diff --git a/packages/twenty-server/src/engine/core-modules/application/application.service.ts b/packages/twenty-server/src/engine/core-modules/application/application.service.ts index ca737d8889..67364a3bcc 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application.service.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application.service.ts @@ -6,7 +6,7 @@ import { Repository } from 'typeorm'; import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity'; import { PackageJson } from 'src/engine/core-modules/application/types/application.types'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; @Injectable() export class ApplicationService { diff --git a/packages/twenty-server/src/engine/core-modules/common/constant/empty-flat-entity-maps.constant.ts b/packages/twenty-server/src/engine/core-modules/common/constant/empty-flat-entity-maps.constant.ts deleted file mode 100644 index 2dd214bcc4..0000000000 --- a/packages/twenty-server/src/engine/core-modules/common/constant/empty-flat-entity-maps.constant.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; - -export const EMPTY_FLAT_ENTITY_MAPS = { - byId: {}, - idByUniversalIdentifier: {}, -} as const satisfies FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts deleted file mode 100644 index df06605d1b..0000000000 --- a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; -import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; -import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; -import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; -import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; -import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; -import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; -import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; - -export type AllFlatEntitiesByMetadataEngineName = { - fieldMetadata: FlatFieldMetadata; - objectMetadata: FlatObjectMetadata; - view: FlatView; - viewField: FlatViewField; - index: FlatIndexMetadata; - serverlessFunction: FlatServerlessFunction; - cronTrigger: FlatCronTrigger; - databaseEventTrigger: FlatDatabaseEventTrigger; - routeTrigger: FlatRouteTrigger; - viewFilter: FlatViewFilter; -}; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities.type.ts b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities.type.ts deleted file mode 100644 index 73385f9649..0000000000 --- a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; - -export type AllFlatEntities = - AllFlatEntitiesByMetadataEngineName[keyof AllFlatEntitiesByMetadataEngineName]; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts deleted file mode 100644 index 8df73fa191..0000000000 --- a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { type AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FromMetadataEngineNameToFlatEntityMapsKey } from 'src/engine/core-modules/common/types/from-metadata-engine-name-to-flat-entity-maps-key.type'; - -export type AllFlatEntityMaps = { - [P in keyof AllFlatEntitiesByMetadataEngineName as FromMetadataEngineNameToFlatEntityMapsKey

]: FlatEntityMaps< - AllFlatEntitiesByMetadataEngineName[P] - >; -}; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/from-metadata-engine-name-to-flat-entity-maps-key.type.ts b/packages/twenty-server/src/engine/core-modules/common/types/from-metadata-engine-name-to-flat-entity-maps-key.type.ts deleted file mode 100644 index 45700265f6..0000000000 --- a/packages/twenty-server/src/engine/core-modules/common/types/from-metadata-engine-name-to-flat-entity-maps-key.type.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { type AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; - -export type FromMetadataEngineNameToFlatEntityMapsKey< - P extends keyof AllFlatEntitiesByMetadataEngineName, -> = `flat${Capitalize

}Maps`; diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/compare-two-flat-entity.util.ts b/packages/twenty-server/src/engine/core-modules/common/utils/compare-two-flat-entity.util.ts deleted file mode 100644 index cbd32a323d..0000000000 --- a/packages/twenty-server/src/engine/core-modules/common/utils/compare-two-flat-entity.util.ts +++ /dev/null @@ -1,77 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; -import { parseJson } from 'twenty-shared/utils'; - -import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type'; -import { transformFlatEntityForComparison } from 'src/engine/core-modules/common/utils/transform-flat-entity-for-comparison.util'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; - -export const compareTwoFlatEntity = < - TFlatEntity extends AllFlatEntities, - PToCompare extends keyof TFlatEntity, - PJsonB extends keyof TFlatEntity, ->({ - fromFlatEntity, - toFlatEntity, - propertiesToCompare, - propertiesToStringify, -}: { - propertiesToCompare: PToCompare[]; - propertiesToStringify: PJsonB[]; -} & FromTo) => { - const [transformedFromFlatEntity, transformedToFlatEntity] = [ - fromFlatEntity, - toFlatEntity, - ].map((flatEntity) => - transformFlatEntityForComparison({ - flatEntity, - options: { - propertiesToCompare, - propertiesToStringify, - }, - }), - ); - - const flatEntityDifferences = diff( - transformedFromFlatEntity, - transformedToFlatEntity, - ); - - return flatEntityDifferences.flatMap< - Array< - { - [P in PToCompare]: PropertyUpdate; - }[PToCompare] - >[number] - >((difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as PToCompare; - const isJsonb = propertiesToStringify.includes( - property as unknown as PJsonB, - ); - - if (isJsonb) { - return { - from: parseJson(oldValue), - to: parseJson(value), - property, - }; - } - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }); -}; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/__tests__/workspace.service.spec.ts b/packages/twenty-server/src/engine/core-modules/workspace/__tests__/workspace.service.spec.ts index edda22f5fc..ce06e2d2d0 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/__tests__/workspace.service.spec.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/__tests__/workspace.service.spec.ts @@ -6,7 +6,6 @@ import { type Repository } from 'typeorm'; import { AuditService } from 'src/engine/core-modules/audit/services/audit.service'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; import { DomainManagerService } from 'src/engine/core-modules/domain-manager/services/domain-manager.service'; import { EmailService } from 'src/engine/core-modules/email/email.service'; @@ -25,6 +24,7 @@ import { User } from 'src/engine/core-modules/user/user.entity'; import { WorkspaceInvitationService } from 'src/engine/core-modules/workspace-invitation/services/workspace-invitation.service'; import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { PermissionsService } from 'src/engine/metadata-modules/permissions/permissions.service'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; import { WorkspaceManagerService } from 'src/engine/workspace-manager/workspace-manager.service'; diff --git a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts index 56593b7a6e..158f86d41d 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/services/workspace.service.ts @@ -15,7 +15,7 @@ import { CUSTOM_DOMAIN_DEACTIVATED_EVENT } from 'src/engine/core-modules/audit/u import { BillingEntitlementKey } from 'src/engine/core-modules/billing/enums/billing-entitlement-key.enum'; import { BillingSubscriptionService } from 'src/engine/core-modules/billing/services/billing-subscription.service'; import { BillingService } from 'src/engine/core-modules/billing/services/billing.service'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { DomainValidRecords } from 'src/engine/core-modules/dns-manager/dtos/domain-valid-records'; import { DnsManagerService } from 'src/engine/core-modules/dns-manager/services/dns-manager.service'; import { ExceptionHandlerService } from 'src/engine/core-modules/exception-handler/exception-handler.service'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; @@ -38,6 +38,7 @@ import { WorkspaceExceptionCode, WorkspaceNotFoundDefaultError, } from 'src/engine/core-modules/workspace/workspace.exception'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { PermissionsException, @@ -49,7 +50,6 @@ import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage import { WorkspaceManagerService } from 'src/engine/workspace-manager/workspace-manager.service'; import { DEFAULT_FEATURE_FLAGS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/default-feature-flags'; import { extractVersionMajorMinorPatch } from 'src/utils/version/extract-version-major-minor-patch'; -import { DomainValidRecords } from 'src/engine/core-modules/dns-manager/dtos/domain-valid-records'; @Injectable() // eslint-disable-next-line @nx/workspace-inject-workspace-repository diff --git a/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts b/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts index 60de64ef73..296b91bdef 100644 --- a/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts +++ b/packages/twenty-server/src/engine/core-modules/workspace/workspace.module.ts @@ -9,7 +9,6 @@ import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; import { TokenModule } from 'src/engine/core-modules/auth/token/token.module'; import { BillingModule } from 'src/engine/core-modules/billing/billing.module'; import { BillingSubscription } from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { DnsManagerModule } from 'src/engine/core-modules/dns-manager/dns-manager.module'; import { DomainManagerModule } from 'src/engine/core-modules/domain-manager/domain-manager.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; @@ -29,6 +28,7 @@ import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { WorkspaceResolver } from 'src/engine/core-modules/workspace/workspace.resolver'; import { AgentModule } from 'src/engine/metadata-modules/agent/agent.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { PermissionsModule } from 'src/engine/metadata-modules/permissions/permissions.module'; import { RoleModule } from 'src/engine/metadata-modules/role/role.module'; import { ViewModule } from 'src/engine/metadata-modules/view/view.module'; diff --git a/packages/twenty-server/src/engine/dataloaders/dataloader.module.ts b/packages/twenty-server/src/engine/dataloaders/dataloader.module.ts index 09ff7a18ef..a968b5640b 100644 --- a/packages/twenty-server/src/engine/dataloaders/dataloader.module.ts +++ b/packages/twenty-server/src/engine/dataloaders/dataloader.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { DataloaderService } from 'src/engine/dataloaders/dataloader.service'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { WorkspaceMetadataCacheModule } from 'src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module'; @Module({ diff --git a/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts b/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts index e205f43db4..1ce3177958 100644 --- a/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts +++ b/packages/twenty-server/src/engine/dataloaders/dataloader.service.ts @@ -7,9 +7,6 @@ import { isDefined } from 'twenty-shared/utils'; import { type IndexMetadataInterface } from 'src/engine/metadata-modules/index-metadata/interfaces/index-metadata.interface'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { I18nService } from 'src/engine/core-modules/i18n/i18n.service'; import { type IDataloaders } from 'src/engine/dataloaders/dataloader.interface'; import { filterMorphRelationDuplicateFields } from 'src/engine/dataloaders/utils/filter-morph-relation-duplicate-fields.util'; @@ -18,6 +15,9 @@ import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadat import { RelationDTO } from 'src/engine/metadata-modules/field-metadata/dtos/relation.dto'; import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { resolveFieldMetadataStandardOverride } from 'src/engine/metadata-modules/field-metadata/utils/resolve-field-metadata-standard-override.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { findAllOthersMorphRelationFlatFieldMetadatasOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-all-others-morph-relation-flat-field-metadatas-or-throw.util'; import { fromFlatFieldMetadataToFieldMetadataDto } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-flat-field-metadata-to-field-metadata-dto.util'; import { fromMorphOrRelationFlatFieldMetadataToRelationDto } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-morph-or-relation-flat-field-metadata-to-relation-dto.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-properties-to-compare.constant.ts deleted file mode 100644 index de954e34f4..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-properties-to-compare.constant.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FLAT_CRON_TRIGGER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-editable-properties.constant'; -import { type FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; - -export const FLAT_CRON_TRIGGER_PROPERTIES_TO_COMPARE = [ - ...FLAT_CRON_TRIGGER_EDITABLE_PROPERTIES, -] as const satisfies (keyof FlatCronTrigger)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts index a9a39de3ad..fae2c29b57 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/cron-trigger.module.ts @@ -1,7 +1,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { CronTriggerCronCommand } from 'src/engine/metadata-modules/cron-trigger/crons/commands/cron-trigger.cron.command'; import { CronTriggerCronJob } from 'src/engine/metadata-modules/cron-trigger/crons/jobs/cron-trigger.cron.job'; @@ -9,6 +8,7 @@ import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/c import { CronTriggerResolver } from 'src/engine/metadata-modules/cron-trigger/resolvers/cron-trigger.resolver'; import { CronTriggerV2Service } from 'src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service'; import { WorkspaceFlatCronTriggerMapCacheService } from 'src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module'; @Module({ diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service.ts index af3dbe7d63..c21be65e5a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/cron-trigger-v2.service.ts @@ -2,12 +2,6 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { CreateCronTriggerInput } from 'src/engine/metadata-modules/cron-trigger/dtos/create-cron-trigger.input'; import { CronTriggerIdInput } from 'src/engine/metadata-modules/cron-trigger/dtos/cron-trigger-id.input'; import { UpdateCronTriggerInput } from 'src/engine/metadata-modules/cron-trigger/dtos/update-cron-trigger.input'; @@ -18,6 +12,12 @@ import { import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; import { fromCreateCronTriggerInputToFlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/utils/from-create-cron-trigger-input-to-flat-cron-trigger.util'; import { fromUpdateCronTriggerInputToFlatCronTriggerToUpdateOrThrow } from 'src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts index b4785da3f9..456b190730 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/services/workspace-flat-cron-trigger-map-cache.service.ts @@ -7,13 +7,13 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { CRON_TRIGGER_ENTITY_RELATION_PROPERTIES, CronTrigger, } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { WorkspaceFlatMapCache } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; import { WorkspaceFlatMapCacheService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/compare-two-flat-cron-trigger.util.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/compare-two-flat-cron-trigger.util.ts deleted file mode 100644 index b85fccfd93..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/compare-two-flat-cron-trigger.util.ts +++ /dev/null @@ -1,69 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; -import { parseJson } from 'twenty-shared/utils'; - -import { FLAT_CRON_TRIGGER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-properties-to-compare.constant'; -import { type CronTriggerSettings } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { type FlatCronTriggerPropertiesToCompare } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger-properties-to-compare.type'; -import { type FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; -import { type UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -type GetWorkspaceMigrationUpdateCronTriggerActionArgs = FromTo< - FlatCronTrigger, - 'FlatCronTrigger' ->; - -export const compareTwoFlatCronTrigger = ({ - fromFlatCronTrigger, - toFlatCronTrigger, -}: GetWorkspaceMigrationUpdateCronTriggerActionArgs) => { - const transformMetadataForComparisonParameters = { - shouldIgnoreProperty: (property: string) => - !FLAT_CRON_TRIGGER_PROPERTIES_TO_COMPARE.includes( - property as FlatCronTriggerPropertiesToCompare, - ), - propertiesToStringify: ['settings'] as const, - }; - const fromCompare = transformMetadataForComparison( - fromFlatCronTrigger, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatCronTrigger, - transformMetadataForComparisonParameters, - ); - - const flatCronTriggerDifferences = diff(fromCompare, toCompare); - - return flatCronTriggerDifferences.flatMap< - UpdateCronTriggerAction['updates'][number] - >((difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatCronTriggerPropertiesToCompare; - - if (property === 'settings') { - return { - from: parseJson(oldValue) as CronTriggerSettings, - to: parseJson(value) as CronTriggerSettings, - property, - }; - } - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts index d9e92b0bc2..0914e06295 100644 --- a/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/from-update-cron-trigger-input-to-flat-cron-trigger-to-update-or-throw.util.ts @@ -1,10 +1,10 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type UpdateCronTriggerInput } from 'src/engine/metadata-modules/cron-trigger/dtos/update-cron-trigger.input'; import { CronTriggerException, CronTriggerExceptionCode, } from 'src/engine/metadata-modules/cron-trigger/exceptions/cron-trigger.exception'; import { type FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; export const fromUpdateCronTriggerInputToFlatCronTriggerToUpdateOrThrow = ({ flatCronTriggerMaps, diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-properties-to-compare.constant.ts deleted file mode 100644 index 12a3a57f8a..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-properties-to-compare.constant.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FLAT_DATABASE_EVENT_TRIGGER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-editable-properties.constant'; -import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; - -export const FLAT_DATABASE_EVENT_TRIGGER_PROPERTIES_TO_COMPARE = [ - ...FLAT_DATABASE_EVENT_TRIGGER_EDITABLE_PROPERTIES, -] as const satisfies (keyof FlatDatabaseEventTrigger)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts index 4bbd2e8500..8aff484b75 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/database-event-trigger.module.ts @@ -1,13 +1,13 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { CallDatabaseEventTriggerJobsJob } from 'src/engine/metadata-modules/database-event-trigger/jobs/call-database-event-trigger-jobs.job'; import { DatabaseEventTriggerResolver } from 'src/engine/metadata-modules/database-event-trigger/resolvers/database-event-trigger.resolver'; import { DatabaseEventTriggerV2Service } from 'src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service'; import { WorkspaceFlatDatabaseEventTriggerMapCacheService } from 'src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module'; @Module({ diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service.ts index 3e9827ad4c..6c9e6e8b3e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/database-event-trigger-v2.service.ts @@ -2,12 +2,6 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { CreateDatabaseEventTriggerInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/create-database-event-trigger.input'; import { DatabaseEventTriggerIdInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/database-event-trigger-id.input'; import { UpdateDatabaseEventTriggerInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/update-database-event-trigger.input'; @@ -18,6 +12,12 @@ import { import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; import { fromCreateDatabaseEventTriggerInputToFlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/utils/from-create-database-event-trigger-input-to-flat-database-event-trigger.util'; import { fromUpdateDatabaseEventTriggerInputToFlatDatabaseEventTriggerToUpdateOrThrow } from 'src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts index 6f4f1a001f..bf3e8f81b7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/services/workspace-flat-database-event-trigger-map-cache.service.ts @@ -7,13 +7,13 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { DATABASE_EVENT_TRIGGER_ENTITY_RELATION_PROPERTIES, DatabaseEventTrigger, } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { WorkspaceFlatMapCache } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; import { WorkspaceFlatMapCacheService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger-properties-to-compare.type.ts deleted file mode 100644 index 1fc47d3139..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_DATABASE_EVENT_TRIGGER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-properties-to-compare.constant'; - -export type FlatDatabaseEventTriggerPropertiesToCompare = - (typeof FLAT_DATABASE_EVENT_TRIGGER_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/compare-two-flat-database-event-trigger.util.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/compare-two-flat-database-event-trigger.util.ts deleted file mode 100644 index 9f16f5fd5f..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/compare-two-flat-database-event-trigger.util.ts +++ /dev/null @@ -1,69 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; -import { parseJson } from 'twenty-shared/utils'; - -import { FLAT_DATABASE_EVENT_TRIGGER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-properties-to-compare.constant'; -import { type DatabaseEventTriggerSettings } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; -import { type FlatDatabaseEventTriggerPropertiesToCompare } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger-properties-to-compare.type'; -import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; -import { type UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -type GetWorkspaceMigrationUpdateDatabaseEventTriggerActionArgs = FromTo< - FlatDatabaseEventTrigger, - 'FlatDatabaseEventTrigger' ->; - -export const compareTwoFlatDatabaseEventTrigger = ({ - fromFlatDatabaseEventTrigger, - toFlatDatabaseEventTrigger, -}: GetWorkspaceMigrationUpdateDatabaseEventTriggerActionArgs) => { - const transformMetadataForComparisonParameters = { - shouldIgnoreProperty: (property: string) => - !FLAT_DATABASE_EVENT_TRIGGER_PROPERTIES_TO_COMPARE.includes( - property as FlatDatabaseEventTriggerPropertiesToCompare, - ), - propertiesToStringify: ['settings'] as const, - }; - const fromCompare = transformMetadataForComparison( - fromFlatDatabaseEventTrigger, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatDatabaseEventTrigger, - transformMetadataForComparisonParameters, - ); - - const flatDatabaseEventTriggerDifferences = diff(fromCompare, toCompare); - - return flatDatabaseEventTriggerDifferences.flatMap< - UpdateDatabaseEventTriggerAction['updates'][number] - >((difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatDatabaseEventTriggerPropertiesToCompare; - - if (property === 'settings') { - return { - from: parseJson(oldValue) as DatabaseEventTriggerSettings, - to: parseJson(value) as DatabaseEventTriggerSettings, - property, - }; - } - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts index 8634390298..40c2a0a52c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/from-update-database-event-trigger-input-to-flat-database-event-trigger-to-update-or-throw.util.ts @@ -1,10 +1,10 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type UpdateDatabaseEventTriggerInput } from 'src/engine/metadata-modules/database-event-trigger/dtos/update-database-event-trigger.input'; import { DatabaseEventTriggerException, DatabaseEventTriggerExceptionCode, } from 'src/engine/metadata-modules/database-event-trigger/exceptions/database-event-trigger.exception'; import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; export const fromUpdateDatabaseEventTriggerInputToFlatDatabaseEventTriggerToUpdateOrThrow = ({ diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/constants/field-metadata-standard-overrides-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/constants/field-metadata-standard-overrides-properties.constant.ts index 14479c7575..1276227add 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/constants/field-metadata-standard-overrides-properties.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/constants/field-metadata-standard-overrides-properties.constant.ts @@ -1,7 +1,7 @@ -import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; +import { type FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; export const FIELD_METADATA_STANDARD_OVERRIDES_PROPERTIES = [ 'label', 'description', 'icon', -] as const satisfies FlatFieldMetadataPropertiesToCompare[]; +] as const satisfies FlatEntityPropertiesToCompare<'fieldMetadata'>[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts index d5139c212c..555fbab9ce 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.module.ts @@ -9,7 +9,6 @@ import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { ActorModule } from 'src/engine/core-modules/actor/actor.module'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; @@ -25,6 +24,7 @@ import { FieldMetadataValidationService } from 'src/engine/metadata-modules/fiel import { FieldMetadataServiceV2 } from 'src/engine/metadata-modules/field-metadata/services/field-metadata.service-v2'; import { IsFieldMetadataDefaultValue } from 'src/engine/metadata-modules/field-metadata/validators/is-field-metadata-default-value.validator'; import { IsFieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/validators/is-field-metadata-options.validator'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FlatFieldMetadataModule } from 'src/engine/metadata-modules/flat-field-metadata/flat-field-metadata.module'; import { IndexMetadataModule } from 'src/engine/metadata-modules/index-metadata/index-metadata.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service-v2.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service-v2.ts index d7bf6144b2..9bff2c8658 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service-v2.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service-v2.ts @@ -4,12 +4,6 @@ import { InjectRepository } from '@nestjs/typeorm'; import { isDefined } from 'twenty-shared/utils'; import { In, Repository } from 'typeorm'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { type DeleteOneFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/delete-field.input'; import { FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto'; @@ -19,6 +13,12 @@ import { FieldMetadataException, FieldMetadataExceptionCode, } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { fromCreateFieldInputToFlatFieldMetadatasToCreate } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-create-field-input-to-flat-field-metadatas-to-create.util'; import { fromDeleteFieldInputToFlatFieldMetadatasToDelete } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util'; import { fromFlatFieldMetadataToFieldMetadataDto } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-flat-field-metadata-to-field-metadata-dto.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts index 64cd566a5a..cb93c7398d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/services/field-metadata.service.ts @@ -15,7 +15,6 @@ import { import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; @@ -50,6 +49,7 @@ import { isSelectOrMultiSelectFieldMetadata } from 'src/engine/metadata-modules/ import { isValidUniqueFieldDefaultValueCombination } from 'src/engine/metadata-modules/field-metadata/utils/is-valid-unique-input.util'; import { prepareCustomFieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/utils/prepare-custom-field-metadata-for-options.util'; import { prepareCustomFieldMetadataForCreation } from 'src/engine/metadata-modules/field-metadata/utils/prepare-field-metadata-for-creation.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { IndexMetadataService } from 'src/engine/metadata-modules/index-metadata/index-metadata.service'; import { computeUniqueIndexWhereClause } from 'src/engine/metadata-modules/index-metadata/utils/compute-unique-index-where-clause.util'; import { validateCanCreateUniqueIndex } from 'src/engine/metadata-modules/index-metadata/utils/validate-can-create-unique-index.util'; diff --git a/packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-maps-properties.constant.ts similarity index 75% rename from packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-maps-properties.constant.ts index a50dda4329..47c7cf6627 100644 --- a/packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-maps-properties.constant.ts @@ -1,4 +1,4 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; export const ALL_FLAT_ENTITY_MAPS_PROPERTIES = [ 'flatObjectMetadataMaps', diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant.ts new file mode 100644 index 0000000000..2adf75ad79 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant.ts @@ -0,0 +1,91 @@ +import { FLAT_CRON_TRIGGER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-editable-properties.constant'; +import { FLAT_DATABASE_EVENT_TRIGGER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-editable-properties.constant'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { FLAT_FIELD_METADATA_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-editable-properties.constant'; +import { FLAT_VIEW_FIELD_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view-field/constants/flat-view-field-editable-properties.constant'; +import { FLAT_VIEW_FILTER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-editable-properties.constant'; +import { FLAT_VIEW_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view/constants/flat-view-editable-properties.constant'; +import { FLAT_ROUTE_TRIGGER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-editable-properties.constant'; +import { FLAT_SERVERLESS_FUNCTION_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-editable-properties.constant'; + +type OneFlatEntityConfiguration = { + propertiesToCompare: (keyof MetadataFlatEntity)[]; + propertiesToStringify: (keyof MetadataFlatEntity)[]; +}; +export const ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY = { + fieldMetadata: { + propertiesToCompare: [ + ...FLAT_FIELD_METADATA_EDITABLE_PROPERTIES, + 'standardOverrides', + ], + propertiesToStringify: [ + 'options', + 'settings', + 'standardOverrides', + 'defaultValue', + ], + }, + objectMetadata: { + propertiesToCompare: [ + 'description', + 'icon', + 'isActive', + 'isLabelSyncedWithName', + 'labelPlural', + 'labelSingular', + 'namePlural', + 'nameSingular', + 'standardOverrides', + 'labelIdentifierFieldMetadataId', + ], + propertiesToStringify: ['standardOverrides'], + }, + view: { + propertiesToCompare: ['key', 'deletedAt', ...FLAT_VIEW_EDITABLE_PROPERTIES], + propertiesToStringify: [], + }, + viewField: { + propertiesToCompare: [...FLAT_VIEW_FIELD_EDITABLE_PROPERTIES, 'deletedAt'], + propertiesToStringify: [], + }, + index: { + propertiesToCompare: [ + 'indexType', + 'indexWhereClause', + 'flatIndexFieldMetadatas', + 'isUnique', + 'name', + ], + propertiesToStringify: ['flatIndexFieldMetadatas'], + }, + serverlessFunction: { + propertiesToCompare: [ + ...FLAT_SERVERLESS_FUNCTION_EDITABLE_PROPERTIES, + 'deletedAt', + ], + propertiesToStringify: [], + }, + cronTrigger: { + propertiesToCompare: [...FLAT_CRON_TRIGGER_EDITABLE_PROPERTIES], + propertiesToStringify: ['settings'], + }, + databaseEventTrigger: { + propertiesToCompare: [...FLAT_DATABASE_EVENT_TRIGGER_EDITABLE_PROPERTIES], + propertiesToStringify: ['settings'], + }, + routeTrigger: { + propertiesToCompare: [...FLAT_ROUTE_TRIGGER_EDITABLE_PROPERTIES], + propertiesToStringify: [], + }, + viewFilter: { + propertiesToCompare: [ + 'viewId', + 'deletedAt', + ...FLAT_VIEW_FILTER_EDITABLE_PROPERTIES, + ], + propertiesToStringify: ['value'], + }, +} as const satisfies { + [P in AllMetadataName]: OneFlatEntityConfiguration

; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-many-to-one-relations.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-many-to-one-relations.constant.ts new file mode 100644 index 0000000000..85a12133f7 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-many-to-one-relations.constant.ts @@ -0,0 +1,62 @@ +import { type ExtractPropertiesThatEndsWithId } from 'twenty-shared/types'; + +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-entity.type'; + +type PropertyNameToRelationName = T extends `${infer Name}Id` + ? Name + : never; + +type ExtractEntityRelations> = { + [K in ExtractPropertiesThatEndsWithId< + TEntity, + 'id' | 'workspaceId' + > as PropertyNameToRelationName]: K; +}; + +type MetadataRelatedMetadataNames = Extract< + keyof ExtractEntityRelations>, + AllMetadataName +>; + +type MetadataNameAndRelations = { + [T in AllMetadataName]: MetadataRelatedMetadataNames extends never + ? Record + : Record, string> & { + [K in Exclude< + AllMetadataName, + MetadataRelatedMetadataNames + >]?: string; + }; +}; + +export const ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS = { + fieldMetadata: { + objectMetadata: 'objectMetadataId', + }, + objectMetadata: {}, + view: { + objectMetadata: 'objectMetadataId', + }, + viewField: { + view: 'viewId', + fieldMetadata: 'fieldMetadataId', + }, + index: { + objectMetadata: 'objectMetadataId', + }, + serverlessFunction: {}, + cronTrigger: { + serverlessFunction: 'serverlessFunctionId', + }, + databaseEventTrigger: { + serverlessFunction: 'serverlessFunctionId', + }, + routeTrigger: { + serverlessFunction: 'serverlessFunctionId', + }, + viewFilter: { + view: 'viewId', + fieldMetadata: 'fieldMetadataId', + }, +} as const satisfies MetadataNameAndRelations; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant.ts new file mode 100644 index 0000000000..6749c9a1a0 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant.ts @@ -0,0 +1,12 @@ +export const ALL_METADATA_NAME = { + fieldMetadata: 'fieldMetadata', + objectMetadata: 'objectMetadata', + view: 'view', + viewField: 'viewField', + index: 'index', + serverlessFunction: 'serverlessFunction', + cronTrigger: 'cronTrigger', + databaseEventTrigger: 'databaseEventTrigger', + routeTrigger: 'routeTrigger', + viewFilter: 'viewFilter', +} as const; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts new file mode 100644 index 0000000000..0870338566 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts @@ -0,0 +1,46 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataManyToOneRelatedMetadataNames } from 'src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-related-metadata-names.type'; + +type MetadataRequiredForValidation = { + [T in AllMetadataName]: Record< + MetadataManyToOneRelatedMetadataNames, + true + > & { + [K in Exclude]?: true; + }; +}; + +export const ALL_METADATA_REQUIRED_METADATA_FOR_VALIDATION = { + fieldMetadata: { + objectMetadata: true, + }, + objectMetadata: { + fieldMetadata: true, + }, + view: { + objectMetadata: true, + }, + viewField: { + view: true, + fieldMetadata: true, + objectMetadata: true, + }, + index: { + objectMetadata: true, + fieldMetadata: true, + }, + serverlessFunction: {}, + cronTrigger: { + serverlessFunction: true, + }, + databaseEventTrigger: { + serverlessFunction: true, + }, + routeTrigger: { + serverlessFunction: true, + }, + viewFilter: { + view: true, + fieldMetadata: true, + }, +} as const satisfies MetadataRequiredForValidation; diff --git a/packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-all-flat-entity-maps.constant.ts similarity index 70% rename from packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-all-flat-entity-maps.constant.ts index 5f83a16bf8..f915f23329 100644 --- a/packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-all-flat-entity-maps.constant.ts @@ -1,5 +1,5 @@ -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; export const EMPTY_ALL_FLAT_ENTITY_MAPS = { flatObjectMetadataMaps: EMPTY_FLAT_ENTITY_MAPS, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant.ts new file mode 100644 index 0000000000..b66a252070 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant.ts @@ -0,0 +1,7 @@ +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; + +export const EMPTY_FLAT_ENTITY_MAPS = { + byId: {}, + idByUniversalIdentifier: {}, +} as const satisfies FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/core-modules/common/exceptions/flat-entity-maps.exception.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception.ts similarity index 90% rename from packages/twenty-server/src/engine/core-modules/common/exceptions/flat-entity-maps.exception.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception.ts index 7b71726baa..9c76be4888 100644 --- a/packages/twenty-server/src/engine/core-modules/common/exceptions/flat-entity-maps.exception.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception.ts @@ -11,4 +11,5 @@ export class FlatEntityMapsException extends CustomException { export enum FlatEntityMapsExceptionCode { ENTITY_ALREADY_EXISTS = 'ENTITY_ALREADY_EXISTS', ENTITY_NOT_FOUND = 'ENTITY_NOT_FOUND', + ENTITY_MALFORMED = 'ENTITY_MALFORMED', } diff --git a/packages/twenty-server/src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts similarity index 81% rename from packages/twenty-server/src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts index 0032a192ae..bd5f9c63a2 100644 --- a/packages/twenty-server/src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { WorkspaceFlatMapCacheModule } from 'src/engine/workspace-flat-map-cache/workspace-flat-map-cache.module'; @Module({ diff --git a/packages/twenty-server/src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service.ts similarity index 92% rename from packages/twenty-server/src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service.ts index a3d66e6761..b4fecb3616 100644 --- a/packages/twenty-server/src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service.ts @@ -2,8 +2,8 @@ import { Injectable, Logger } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { ALL_FLAT_ENTITY_MAPS_PROPERTIES } from 'src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { ALL_FLAT_ENTITY_MAPS_PROPERTIES } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-maps-properties.constant'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { WorkspaceFlatMapCacheRegistryService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache-registry.service'; import { WorkspaceFlatMapCacheService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entities.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entities.type.ts new file mode 100644 index 0000000000..97d5d3e06c --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entities.type.ts @@ -0,0 +1,4 @@ +import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; + +export type AllFlatEntities = + AllFlatEntityTypesByMetadataName[keyof AllFlatEntityTypesByMetadataName]['flatEntity']; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts new file mode 100644 index 0000000000..71edfb3485 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts @@ -0,0 +1,27 @@ +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 FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; + +type ExpectedGenericFlatEntityInformation = { + actions: { + created: WorkspaceMigrationActionV2 | WorkspaceMigrationActionV2[]; + deleted: WorkspaceMigrationActionV2 | WorkspaceMigrationActionV2[]; + updated: WorkspaceMigrationActionV2 | WorkspaceMigrationActionV2[]; + }; + flatEntity: FlatEntity; +}; + +type ExpectedGenericAllFlatEntityInformationByMetadataEngine = { + [P in keyof AllFlatEntityTypesByMetadataName]: ExpectedGenericFlatEntityInformation; +}; + +// eslint-disable-next-line unused-imports/no-unused-vars +type Assertions = [ + Expect< + AllFlatEntityTypesByMetadataName extends ExpectedGenericAllFlatEntityInformationByMetadataEngine + ? true + : false + >, +]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type.ts new file mode 100644 index 0000000000..e13181413e --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type.ts @@ -0,0 +1,10 @@ +import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key'; + +export type AllFlatEntityMaps = { + [P in keyof AllFlatEntityTypesByMetadataName as MetadataToFlatEntityMapsKey

]: FlatEntityMaps< + MetadataFlatEntity

+ >; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts new file mode 100644 index 0000000000..941113c0a9 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts @@ -0,0 +1,162 @@ +import { type CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; +import { type FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; +import { type DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; +import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; +import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; +import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; +import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; +import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; +import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; +import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; +import { type IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; +import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { type RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; +import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; +import { type ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; +import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; +import { type ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; +import { type ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; +import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; +import { + type CreateCronTriggerAction, + type DeleteCronTriggerAction, + type UpdateCronTriggerAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; +import { + type CreateDatabaseEventTriggerAction, + type DeleteDatabaseEventTriggerAction, + type UpdateDatabaseEventTriggerAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; +import { + type CreateFieldAction, + type DeleteFieldAction, + type UpdateFieldAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { + type CreateIndexAction, + type DeleteIndexAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/types/workspace-migration-index-action-v2'; +import { + type CreateObjectAction, + type DeleteObjectAction, + type UpdateObjectAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; +import { + type CreateRouteTriggerAction, + type DeleteRouteTriggerAction, + type UpdateRouteTriggerAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; +import { + type CreateServerlessFunctionAction, + type DeleteServerlessFunctionAction, + type UpdateServerlessFunctionAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type'; +import { + type CreateViewFieldAction, + type DeleteViewFieldAction, + type UpdateViewFieldAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type'; +import { + type CreateViewFilterAction, + type DeleteViewFilterAction, + type UpdateViewFilterAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type'; +import { + type CreateViewAction, + type DeleteViewAction, + type UpdateViewAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type'; + +export type AllFlatEntityTypesByMetadataName = { + fieldMetadata: { + actions: { + created: CreateFieldAction; + updated: UpdateFieldAction; + deleted: DeleteFieldAction; + }; + flatEntity: FlatFieldMetadata; + entity: FieldMetadataEntity; + }; + objectMetadata: { + actions: { + created: CreateObjectAction; + updated: UpdateObjectAction; + deleted: DeleteObjectAction; + }; + flatEntity: FlatObjectMetadata; + entity: ObjectMetadataEntity; + }; + view: { + actions: { + created: CreateViewAction; + updated: UpdateViewAction; + deleted: DeleteViewAction; + }; + flatEntity: FlatView; + entity: ViewEntity; + }; + viewField: { + actions: { + created: CreateViewFieldAction; + updated: UpdateViewFieldAction; + deleted: DeleteViewFieldAction; + }; + flatEntity: FlatViewField; + entity: ViewFieldEntity; + }; + index: { + actions: { + created: CreateIndexAction; + updated: [DeleteIndexAction, CreateIndexAction]; + deleted: DeleteIndexAction; + }; + flatEntity: FlatIndexMetadata; + entity: IndexMetadataEntity; + }; + serverlessFunction: { + actions: { + created: CreateServerlessFunctionAction; + updated: UpdateServerlessFunctionAction; + deleted: DeleteServerlessFunctionAction; + }; + flatEntity: FlatServerlessFunction; + entity: ServerlessFunctionEntity; + }; + cronTrigger: { + actions: { + created: CreateCronTriggerAction; + updated: UpdateCronTriggerAction; + deleted: DeleteCronTriggerAction; + }; + flatEntity: FlatCronTrigger; + entity: CronTrigger; + }; + databaseEventTrigger: { + actions: { + created: CreateDatabaseEventTriggerAction; + updated: UpdateDatabaseEventTriggerAction; + deleted: DeleteDatabaseEventTriggerAction; + }; + flatEntity: FlatDatabaseEventTrigger; + entity: DatabaseEventTrigger; + }; + routeTrigger: { + actions: { + created: CreateRouteTriggerAction; + updated: UpdateRouteTriggerAction; + deleted: DeleteRouteTriggerAction; + }; + flatEntity: FlatRouteTrigger; + entity: RouteTrigger; + }; + viewFilter: { + actions: { + created: CreateViewFilterAction; + updated: UpdateViewFilterAction; + deleted: DeleteViewFilterAction; + }; + flatEntity: FlatViewFilter; + entity: ViewFilterEntity; + }; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-metadata-name.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-metadata-name.type.ts new file mode 100644 index 0000000000..9e42c67ec7 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-metadata-name.type.ts @@ -0,0 +1,3 @@ +import { type ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; + +export type AllMetadataName = keyof typeof ALL_METADATA_NAME; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/flat-entity-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts similarity index 60% rename from packages/twenty-server/src/engine/core-modules/common/types/flat-entity-maps.type.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts index 91c6907522..717cd73e5c 100644 --- a/packages/twenty-server/src/engine/core-modules/common/types/flat-entity-maps.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type.ts @@ -1,4 +1,4 @@ -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export type FlatEntityMaps = { byId: Partial>; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type.ts new file mode 100644 index 0000000000..1ed8d55e2c --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type.ts @@ -0,0 +1,5 @@ +import { type ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type FlatEntityPropertiesToCompare = + (typeof ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY)[T]['propertiesToCompare'][number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-stringify.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-stringify.type.ts new file mode 100644 index 0000000000..8d40f90e12 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-stringify.type.ts @@ -0,0 +1,5 @@ +import { type ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type FlatEntityPropertiesToStringify = + (typeof ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY)[T]['propertiesToStringify'][number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type.ts new file mode 100644 index 0000000000..2c02373bdf --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type.ts @@ -0,0 +1,11 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; + +export type FlatEntityPropertiesUpdates< + T extends AllMetadataName, + K extends FlatEntityPropertiesToCompare = FlatEntityPropertiesToCompare, +> = Array< + PropertyUpdate, Extract>> +>; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/flat-entity.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity.type.ts similarity index 100% rename from packages/twenty-server/src/engine/core-modules/common/types/flat-entity.type.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity.type.ts diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-entity.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-entity.type.ts new file mode 100644 index 0000000000..1c52dce70f --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-entity.type.ts @@ -0,0 +1,5 @@ +import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type MetadataEntity = + AllFlatEntityTypesByMetadataName[T]['entity']; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type.ts new file mode 100644 index 0000000000..3d860aad1a --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type.ts @@ -0,0 +1,7 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; + +export type MetadataFlatEntityMaps = FlatEntityMaps< + MetadataFlatEntity +>; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type.ts new file mode 100644 index 0000000000..983a7717e6 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type.ts @@ -0,0 +1,5 @@ +import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type MetadataFlatEntity = + AllFlatEntityTypesByMetadataName[T]['flatEntity']; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-related-metadata-names.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-related-metadata-names.type.ts new file mode 100644 index 0000000000..b642db503a --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-related-metadata-names.type.ts @@ -0,0 +1,8 @@ +import { type ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-many-to-one-relations.constant'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type MetadataManyToOneRelatedMetadataNames = + Extract< + keyof (typeof ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS)[T], + AllMetadataName + >; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-name-and-relations.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-name-and-relations.type.ts new file mode 100644 index 0000000000..e5be0dbb21 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-name-and-relations.type.ts @@ -0,0 +1,24 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-entity.type'; + +type ExtractRelationIdProperties = { + [K in keyof T]: K extends `${infer _}Id` + ? K extends 'id' | 'workspaceId' | 'standardId' + ? never + : T[K] extends string | null | undefined + ? K + : never + : never; +}[keyof T]; + +type PropertyNameToRelationName = T extends `${infer Name}Id` + ? Name + : never; + +type ExtractEntityRelations = { + [K in ExtractRelationIdProperties as PropertyNameToRelationName]: K; +}; + +export type MetadataNameAndRelations = { + [T in AllMetadataName]: Partial>>; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type.ts new file mode 100644 index 0000000000..fdc54fe9db --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type.ts @@ -0,0 +1,6 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataManyToOneRelatedMetadataNames } from 'src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-related-metadata-names.type'; +import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key'; + +export type MetadataRelatedFlatEntityMapsKeys = + MetadataToFlatEntityMapsKey>; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-types.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-types.type.ts new file mode 100644 index 0000000000..03278e5001 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-types.type.ts @@ -0,0 +1,22 @@ +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataRelatedFlatEntityMapsKeys } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type'; +import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key'; +import { type MetadataValidationRelatedMetadataNames } from 'src/engine/metadata-modules/flat-entity/types/metadata-validation-related-metadata-names.type'; + +export type MetadataFlatEntityAndRelatedFlatEntityMaps< + T extends AllMetadataName, +> = Pick< + AllFlatEntityMaps, + MetadataRelatedFlatEntityMapsKeys | MetadataToFlatEntityMapsKey +>; + +export type MetadataValidationRelatedFlatEntityMaps = + MetadataValidationRelatedMetadataNames extends undefined + ? undefined + : Pick< + AllFlatEntityMaps, + MetadataToFlatEntityMapsKey< + NonNullable> + > + >; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key.ts new file mode 100644 index 0000000000..b11d71601b --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key.ts @@ -0,0 +1,4 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type MetadataToFlatEntityMapsKey = + T extends AllMetadataName ? `flat${Capitalize}Maps` : never; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-validation-related-metadata-names.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-validation-related-metadata-names.type.ts new file mode 100644 index 0000000000..f2a1bc5de6 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-validation-related-metadata-names.type.ts @@ -0,0 +1,16 @@ +import { type IsEmptyRecord } from 'twenty-shared/types'; + +import { type ALL_METADATA_REQUIRED_METADATA_FOR_VALIDATION } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type MetadataValidationRelatedMetadataNames = + IsEmptyRecord< + (typeof ALL_METADATA_REQUIRED_METADATA_FOR_VALIDATION)[T] + > extends true + ? undefined + : NonNullable< + Extract< + keyof (typeof ALL_METADATA_REQUIRED_METADATA_FOR_VALIDATION)[T], + AllMetadataName + > + >; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type.ts new file mode 100644 index 0000000000..53c29f0889 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type.ts @@ -0,0 +1,31 @@ +import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; + +export type MetadataWorkspaceMigrationActionsRecord = + { + [K in 'created' | 'updated' | 'deleted']: MetadataWorkspaceMigrationAction< + T, + K + >[]; + }; + +export type MetadataWorkspaceMigrationAction< + T extends AllMetadataName, + TOperation extends 'created' | 'deleted' | 'updated' = + | 'created' + | 'deleted' + | 'updated', +> = AllFlatEntityTypesByMetadataName[T]['actions'][TOperation] extends infer Action + ? Action extends Array + ? Action[number] + : Action + : never; + +export type FromWorkspaceMigrationActionToMetadataName = { + [K in AllMetadataName]: TAction extends AllFlatEntityTypesByMetadataName[K]['actions'][ + | 'created' + | 'deleted' + | 'updated'] + ? K + : never; +}[AllMetadataName]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-or-throw.util.ts new file mode 100644 index 0000000000..0c3350354c --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-or-throw.util.ts @@ -0,0 +1,88 @@ +import { ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-many-to-one-relations.constant'; +import { + FlatEntityMapsException, + FlatEntityMapsExceptionCode, +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type MetadataFlatEntityAndRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getMetadataFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util'; + +type AddFlatEntityToFlatEntityAndRelatedEntityMapsOrThrowArgs< + T extends AllMetadataName, +> = { + metadataName: T; + flatEntity: MetadataFlatEntity; + flatEntityAndRelatedMaps: MetadataFlatEntityAndRelatedFlatEntityMaps; +}; +export const addFlatEntityToFlatEntityAndRelatedEntityMapsOrThrow = < + T extends AllMetadataName, +>({ + metadataName, + flatEntity, + flatEntityAndRelatedMaps: initialFlatEntityAndRelatedMaps, +}: AddFlatEntityToFlatEntityAndRelatedEntityMapsOrThrowArgs): MetadataFlatEntityAndRelatedFlatEntityMaps => { + const flatEntityMapsKey: keyof MetadataFlatEntityAndRelatedFlatEntityMaps = + getMetadataFlatEntityMapsKey(metadataName); + + const updatedFlatEntityMaps = addFlatEntityToFlatEntityMapsOrThrow({ + flatEntity, + flatEntityMaps: initialFlatEntityAndRelatedMaps[flatEntityMapsKey], + }); + + const manyToOneRelatedMetadataName = Object.entries( + ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS[metadataName], + ); + + return manyToOneRelatedMetadataName.reduce( + (flatEntityAndRelatedMaps, [relatedMetadataName, foreignKey]) => { + const relatedFlatEntityMapsKey = getMetadataFlatEntityMapsKey( + relatedMetadataName as AllMetadataName, + ); + const relatedFLatEntityMetadataMaps = + flatEntityAndRelatedMaps[relatedFlatEntityMapsKey]; + + const relatedFlatEntity = findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: flatEntity[ + foreignKey as keyof MetadataFlatEntity + ] as string, + flatEntityMaps: relatedFLatEntityMetadataMaps, + }); + + const foreignKeyAggregatorProperty = `${metadataName}Ids`; + + if ( + !Object.prototype.hasOwnProperty.call( + relatedFlatEntity, + foreignKeyAggregatorProperty, + ) + ) { + throw new FlatEntityMapsException( + 'Should never occur, invalid cached format', + FlatEntityMapsExceptionCode.ENTITY_MALFORMED, + ); + } + + const updatedRelatedFlatEntityMetadataMaps = { + ...relatedFlatEntity, + [foreignKeyAggregatorProperty]: [ + ...(relatedFlatEntity[ + foreignKeyAggregatorProperty as keyof MetadataFlatEntity + ] as string[]), + flatEntity.id, + ], + }; + + return { + ...flatEntityAndRelatedMaps, + [relatedFlatEntityMapsKey]: updatedRelatedFlatEntityMetadataMaps, + }; + }, + { + ...initialFlatEntityAndRelatedMaps, + [flatEntityMapsKey]: updatedFlatEntityMaps, + }, + ); +}; diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts similarity index 75% rename from packages/twenty-server/src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts index 8ef4deda39..265f000a1e 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts @@ -3,9 +3,9 @@ import { isDefined } from 'class-validator'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; type AddFlatEntityToFlatEntityMapsOrThrowArgs = { flatEntity: T; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/compare-two-flat-entity.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/compare-two-flat-entity.util.ts new file mode 100644 index 0000000000..2b5b701714 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/compare-two-flat-entity.util.ts @@ -0,0 +1,76 @@ +import diff from 'microdiff'; +import { type FromTo } from 'twenty-shared/types'; +import { parseJson } from 'twenty-shared/utils'; + +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { transformFlatEntityForComparison } from 'src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util'; + +export const compareTwoFlatEntity = < + T extends AllMetadataName, + PToCompare extends Extract< + FlatEntityPropertiesToCompare, + keyof MetadataFlatEntity + >, + PJsonB extends PToCompare = PToCompare, +>({ + fromFlatEntity, + toFlatEntity, + propertiesToCompare, + propertiesToStringify, +}: FromTo, 'flatEntity'> & { + propertiesToCompare: readonly PToCompare[]; + propertiesToStringify: readonly PJsonB[]; +}): FlatEntityPropertiesUpdates => { + const [transformedFromFlatEntity, transformedToFlatEntity] = [ + fromFlatEntity, + toFlatEntity, + ].map((flatEntity) => + transformFlatEntityForComparison({ + flatEntity, + propertiesToCompare, + propertiesToStringify, + }), + ); + + const flatEntityDifferences = diff( + transformedFromFlatEntity, + transformedToFlatEntity, + ); + + return flatEntityDifferences.flatMap[number]>( + (difference) => { + switch (difference.type) { + case 'CHANGE': { + const { oldValue, path, value } = difference; + const property = path[0] as PToCompare; + const isJsonb = propertiesToStringify.includes( + property as unknown as PJsonB, + ); + + if (isJsonb) { + return { + from: parseJson(oldValue), + to: parseJson(value), + property, + }; + } + + return { + from: oldValue, + to: value, + property, + }; + } + case 'CREATE': + case 'REMOVE': + default: { + // Should never occur, we should only provide null never undefined and so on + return []; + } + } + }, + ); +}; diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts similarity index 79% rename from packages/twenty-server/src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts index 8f9970106a..6b82f103ec 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts @@ -3,9 +3,9 @@ import { isDefined, removePropertiesFromRecord } from 'twenty-shared/utils'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export type DeleteFlatEntityFromFlatEntityMapsOrThrowArgs< T extends FlatEntity, diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts similarity index 72% rename from packages/twenty-server/src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts index c3d5a8b843..69c246f1d5 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts @@ -4,9 +4,9 @@ import { isDefined } from 'twenty-shared/utils'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; export type FindFlatEntityByIdInFlatEntityMapsOrThrowArgs< T extends FlatEntity, diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts similarity index 63% rename from packages/twenty-server/src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts index f82482f43f..0ba9191880 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts @@ -1,8 +1,8 @@ -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { findFlatEntityByIdInFlatEntityMapsOrThrow, type FindFlatEntityByIdInFlatEntityMapsOrThrowArgs, -} from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +} from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; export const findFlatEntityByIdInFlatEntityMaps = ( args: FindFlatEntityByIdInFlatEntityMapsOrThrowArgs, diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts similarity index 63% rename from packages/twenty-server/src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts index 5680447a7d..142ad70c57 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts @@ -1,8 +1,8 @@ import { isDefined } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; export type FindManyFlatEntityByIdInFlatEntityMapsOrThrowArgs< T extends FlatEntity, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util.ts new file mode 100644 index 0000000000..898796a10a --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util.ts @@ -0,0 +1,9 @@ +import { capitalize } from 'twenty-shared/utils'; + +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key'; + +export const getMetadataFlatEntityMapsKey = ( + metadataName: T, +): MetadataToFlatEntityMapsKey => + `flat${capitalize(metadataName)}Maps` as MetadataToFlatEntityMapsKey; diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts similarity index 55% rename from packages/twenty-server/src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts index 00d6a32aca..abd615a90d 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util.ts @@ -1,8 +1,8 @@ -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; export const getSubFlatEntityMapsOrThrow = ({ flatEntityIds, diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts similarity index 65% rename from packages/twenty-server/src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts index 8d3ccc379c..9ae9bd293c 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts @@ -1,7 +1,7 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; export type ReplaceFlatEntityInFlatEntityMapsOrThrowArgs = { diff --git a/packages/twenty-server/src/engine/core-modules/common/utils/transform-flat-entity-for-comparison.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts similarity index 64% rename from packages/twenty-server/src/engine/core-modules/common/utils/transform-flat-entity-for-comparison.util.ts rename to packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts index aa696ef797..75d3f93385 100644 --- a/packages/twenty-server/src/engine/core-modules/common/utils/transform-flat-entity-for-comparison.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/transform-flat-entity-for-comparison.util.ts @@ -1,27 +1,24 @@ -import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { orderObjectProperties } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/order-object-properties.util'; export function transformFlatEntityForComparison< - TFlatEntity extends AllFlatEntities, + TFlatEntity extends FlatEntity, PToCompare extends keyof TFlatEntity, - PJsonB extends keyof TFlatEntity, + PJsonB extends PToCompare, >({ flatEntity, - options: { propertiesToCompare, propertiesToStringify }, + propertiesToCompare, + propertiesToStringify, }: { flatEntity: TFlatEntity; - options: { - propertiesToCompare: PToCompare[]; - propertiesToStringify: PJsonB[]; - }; -}) { + propertiesToCompare: readonly PToCompare[]; + propertiesToStringify: readonly PJsonB[]; +}): Pick { return propertiesToCompare.reduce( (flatEntityAccumulator, propertyToCompare) => { const currentValue = flatEntity[propertyToCompare]; - if ( - propertiesToStringify.includes(propertyToCompare as unknown as PJsonB) - ) { + if (propertiesToStringify.includes(propertyToCompare as PJsonB)) { const orderedValue = orderObjectProperties(currentValue); return { diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts index 071e3bf166..6f4ed85220 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/__tests__/morph-relation-from-create-field-input-to-flat-field-metadatas-to-create.spec.ts @@ -1,12 +1,12 @@ +import { jestExpectToBeDefined } from 'test/utils/expect-to-be-defined.util.test'; import { extractRecordIdsAndDatesAsExpectAny } from 'test/utils/extract-record-ids-and-dates-as-expect-any'; import { type EachTestingContext } from 'twenty-shared/testing'; import { FieldMetadataType } from 'twenty-shared/types'; -import { jestExpectToBeDefined } from 'test/utils/expect-to-be-defined.util.test'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { fromCreateFieldInputToFlatFieldMetadatasToCreate, type FromCreateFieldInputToFlatObjectMetadataArgs, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant.ts deleted file mode 100644 index d28972f961..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; - -export const FLAT_FIELD_METADATA_JSONB_PROPERTIES = [ - 'options', - 'settings', - 'standardOverrides', - 'defaultValue', -] as const satisfies (keyof FlatFieldMetadata)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-properties-to-compare.constant.ts deleted file mode 100644 index ec0c5c08c6..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-properties-to-compare.constant.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { FLAT_FIELD_METADATA_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-editable-properties.constant'; -import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; - -export const FLAT_FIELD_METADATA_PROPERTIES_TO_COMPARE = [ - ...FLAT_FIELD_METADATA_EDITABLE_PROPERTIES, - 'standardOverrides', -] as const satisfies (keyof FlatFieldMetadata)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-relation-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-relation-properties-to-compare.constant.ts index 2e35eabb22..978224ba6d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-relation-properties-to-compare.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-relation-properties-to-compare.constant.ts @@ -1,8 +1,8 @@ -import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; +import { type ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant'; export const FLAT_FIELD_METADATA_RELATION_PROPERTIES_TO_COMPARE = [ 'label', 'description', 'isActive', 'standardOverrides', -] as const satisfies FlatFieldMetadataPropertiesToCompare[]; +] as const satisfies (typeof ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY.fieldMetadata.propertiesToCompare)[number][]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts index 98021fccc7..77b36b308f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service.ts @@ -2,7 +2,6 @@ import { Injectable } from '@nestjs/common'; import { msg } from '@lingui/core/macro'; import { isDefined } from 'class-validator'; -import { FieldMetadataType } from 'twenty-shared/types'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; @@ -11,54 +10,44 @@ import { type FlatFieldMetadataTypeValidator } from 'src/engine/metadata-modules import { FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; import { validateEnumSelectFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-enum-flat-field-metadata.util'; import { validateMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util'; -import { ValidateOneFieldMetadataArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; + +const DEFAULT_NO_VALIDATION = async (): Promise< + FlatFieldMetadataValidationError[] +> => []; + @Injectable() export class FlatFieldMetadataTypeValidatorService { constructor(private readonly featureFlagService: FeatureFlagService) {} private readonly FIELD_METADATA_TYPE_VALIDATOR_HASHMAP: FlatFieldMetadataTypeValidator = { - ACTOR: async (_args) => { - return []; - }, - ADDRESS: async (_args) => { - return []; - }, - ARRAY: async (_args) => { - return []; - }, - BOOLEAN: async (_args) => { - return []; - }, - CURRENCY: async (_args) => { - return []; - }, - DATE: async (_args) => { - return []; - }, - DATE_TIME: async (_args) => { - return []; - }, - EMAILS: async (_args) => { - return []; - }, - FULL_NAME: async (_args) => { - return []; - }, - LINKS: async (_args) => { - return []; - }, - MORPH_RELATION: async ({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }) => { + ACTOR: DEFAULT_NO_VALIDATION, + ADDRESS: DEFAULT_NO_VALIDATION, + ARRAY: DEFAULT_NO_VALIDATION, + BOOLEAN: DEFAULT_NO_VALIDATION, + CURRENCY: DEFAULT_NO_VALIDATION, + DATE: DEFAULT_NO_VALIDATION, + DATE_TIME: DEFAULT_NO_VALIDATION, + EMAILS: DEFAULT_NO_VALIDATION, + FULL_NAME: DEFAULT_NO_VALIDATION, + LINKS: DEFAULT_NO_VALIDATION, + NUMBER: DEFAULT_NO_VALIDATION, + NUMERIC: DEFAULT_NO_VALIDATION, + PHONES: DEFAULT_NO_VALIDATION, + POSITION: DEFAULT_NO_VALIDATION, + RAW_JSON: DEFAULT_NO_VALIDATION, + RICH_TEXT: DEFAULT_NO_VALIDATION, + RICH_TEXT_V2: DEFAULT_NO_VALIDATION, + TEXT: DEFAULT_NO_VALIDATION, + TS_VECTOR: DEFAULT_NO_VALIDATION, + UUID: DEFAULT_NO_VALIDATION, + + MORPH_RELATION: async (args) => { const isMorphRelationEnabled = await this.featureFlagService.isFeatureEnabled( FeatureFlagKey.IS_MORPH_RELATION_ENABLED, - workspaceId, + args.workspaceId, ); if (!isMorphRelationEnabled) { @@ -71,122 +60,23 @@ export class FlatFieldMetadataTypeValidatorService { ]; } - return validateMorphOrRelationFlatFieldMetadata({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }); - }, - MULTI_SELECT: ({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }) => - validateEnumSelectFlatFieldMetadata({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }), - - NUMBER: async (_args) => { - return []; - }, - NUMERIC: async (_args) => { - return []; - }, - PHONES: async (_args) => { - return []; - }, - POSITION: async (_args) => { - return []; - }, - RATING: ({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }) => - validateEnumSelectFlatFieldMetadata({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }), - RAW_JSON: async (_args) => { - return []; - }, - RELATION: ({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }) => - validateMorphOrRelationFlatFieldMetadata({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }), - RICH_TEXT: async (_args) => { - return []; - }, - RICH_TEXT_V2: async (_args) => { - return []; - }, - SELECT: ({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }) => - validateEnumSelectFlatFieldMetadata({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }), - TEXT: async (_args) => { - return []; - }, - TS_VECTOR: async (_args) => { - return []; - }, - UUID: async (_args) => { - return []; + return validateMorphOrRelationFlatFieldMetadata(args); }, + MULTI_SELECT: validateEnumSelectFlatFieldMetadata, + RATING: validateEnumSelectFlatFieldMetadata, + RELATION: validateMorphOrRelationFlatFieldMetadata, + SELECT: validateEnumSelectFlatFieldMetadata, }; - public async validateFlatFieldMetadataTypeSpecificities< - T extends FieldMetadataType = FieldMetadataType, - >({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }: ValidateOneFieldMetadataArgs & { workspaceId: string }): Promise< - FlatFieldMetadataValidationError[] - > { + public async validateFlatFieldMetadataTypeSpecificities( + args: FlatEntityValidationArgs<'fieldMetadata'>, + ): Promise { + const { flatEntityToValidate } = args; + const fieldType = flatEntityToValidate.type; const fieldMetadataTypeValidator = - this.FIELD_METADATA_TYPE_VALIDATOR_HASHMAP[ - flatFieldMetadataToValidate.type - ]; + this.FIELD_METADATA_TYPE_VALIDATOR_HASHMAP[fieldType]; if (!isDefined(fieldMetadataTypeValidator)) { - const fieldType = flatFieldMetadataToValidate.type; - return [ { code: FieldMetadataExceptionCode.UNCOVERED_FIELD_METADATA_TYPE_VALIDATION, @@ -197,12 +87,9 @@ export class FlatFieldMetadataTypeValidatorService { ]; } - return await fieldMetadataTypeValidator({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - remainingFlatEntityMapsToValidate, - workspaceId, - }); + return await fieldMetadataTypeValidator( + // @ts-expect-error TODO could be improved + args, + ); } } diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts index ee7102fbe5..027f93823b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/services/workspace-flat-field-metadata-map-cache.service.ts @@ -6,10 +6,10 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { fromFieldMetadataEntityToFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-field-metadata-entity-to-flat-field-metadata.util'; import { WorkspaceFlatMapCache } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-jsonb-properties.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-jsonb-properties.type.ts deleted file mode 100644 index 9cb5af339b..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-jsonb-properties.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_FIELD_METADATA_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant'; - -export type FlatFieldMetadataEntityJsonbProperties = - (typeof FLAT_FIELD_METADATA_JSONB_PROPERTIES)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type.ts deleted file mode 100644 index a0aa0835c8..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_FIELD_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-properties-to-compare.constant'; - -export type FlatFieldMetadataPropertiesToCompare = - (typeof FLAT_FIELD_METADATA_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type.ts index 306d730831..8cbb6d9ad4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type.ts @@ -1,11 +1,17 @@ import { type FieldMetadataType } from 'twenty-shared/types'; import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; -import { type ValidateOneFieldMetadataArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service'; +import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; +import { type FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; + +export type FlatFieldMetadataTypeValidationArgs = + Omit, 'flatEntityToValidate'> & { + flatEntityToValidate: FlatFieldMetadata; + }; export type FlatFieldMetadataTypeValidator = { - [P in FieldMetadataType]: ( - args: ValidateOneFieldMetadataArgs

& { workspaceId: string }, + [T in FieldMetadataType]: ( + args: FlatFieldMetadataTypeValidationArgs, ) => | FlatFieldMetadataValidationError[] | Promise; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts deleted file mode 100644 index 1e02d06c3b..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts +++ /dev/null @@ -1,94 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; -import { parseJson } from 'twenty-shared/utils'; - -import { FLAT_FIELD_METADATA_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant'; -import { FLAT_FIELD_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-properties-to-compare.constant'; -import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; -import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { isFlatFieldMetadataJsonbProperty } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-jsonb-property.util'; -import { isStandardMetadata } from 'src/engine/metadata-modules/utils/is-standard-metadata.util'; -import { type UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -type GetWorkspaceMigrationUpdateFieldActionArgs = FromTo< - FlatFieldMetadata, - 'FlatFieldMetadata' ->; -/** - * This comparator handles update on colliding universalIdentifier flatFieldMetadata - */ -export const compareTwoFlatFieldMetadata = ({ - fromFlatFieldMetadata, - toFlatFieldMetadata, -}: GetWorkspaceMigrationUpdateFieldActionArgs) => { - const transformMetadataForComparisonParameters = { - shouldIgnoreProperty: ( - property: string, - fieldMetadata: FlatFieldMetadata, - ) => { - if ( - !FLAT_FIELD_METADATA_PROPERTIES_TO_COMPARE.includes( - property as FlatFieldMetadataPropertiesToCompare, - ) - ) { - return true; - } - - if ( - isStandardMetadata(fieldMetadata) && - property !== 'standardOverrides' - ) { - return true; - } - - return false; - }, - propertiesToStringify: FLAT_FIELD_METADATA_JSONB_PROPERTIES, - }; - const fromCompare = transformMetadataForComparison( - fromFlatFieldMetadata, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatFieldMetadata, - transformMetadataForComparisonParameters, - ); - - const flatFieldMetadataDifferences = diff(fromCompare, toCompare); - - return flatFieldMetadataDifferences.flatMap< - UpdateFieldAction['updates'][number] - >((difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatFieldMetadataPropertiesToCompare; - const isJsonb = isFlatFieldMetadataJsonbProperty({ - flatFieldMetadata: toFlatFieldMetadata, - property, - }); - - if (isJsonb) { - return { - from: parseJson(oldValue), - to: parseJson(value), - property, - }; - } - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-flat-field-metadata-related-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-flat-field-metadata-related-flat-field-metadata.util.ts index 8c35d974a8..39924da191 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-flat-field-metadata-related-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compute-flat-field-metadata-related-flat-field-metadata.util.ts @@ -1,6 +1,6 @@ import { FieldMetadataType } from 'twenty-shared/types'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { findFlatFieldMetadatasRelatedToMorphRelationOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util'; import { findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-all-others-morph-relation-flat-field-metadatas-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-all-others-morph-relation-flat-field-metadatas-or-throw.util.ts index 7b946a07ff..803b38b676 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-all-others-morph-relation-flat-field-metadatas-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-all-others-morph-relation-flat-field-metadatas-or-throw.util.ts @@ -4,9 +4,9 @@ import { isDefined } from 'twenty-shared/utils'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts index d4501863c3..1b212dbcb1 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-flat-field-metadatas-related-to-morph-relation-or-throw.util.ts @@ -1,7 +1,7 @@ import { type FieldMetadataType } from 'twenty-shared/types'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { findAllOthersMorphRelationFlatFieldMetadatasOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-all-others-morph-relation-flat-field-metadatas-or-throw.util'; import { findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts index 16d14fe064..c6e67bd491 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util.ts @@ -1,11 +1,11 @@ import { isDefined } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { FieldMetadataException, FieldMetadataExceptionCode, } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-create-field-input-to-flat-field-metadatas-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-create-field-input-to-flat-field-metadatas-to-create.util.ts index a3b81ba080..873ca0f100 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-create-field-input-to-flat-field-metadatas-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-create-field-input-to-flat-field-metadatas-to-create.util.ts @@ -9,10 +9,10 @@ import { v4 } from 'uuid'; import { type FieldMetadataOptions } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-options.interface'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { generateRatingOptions } from 'src/engine/metadata-modules/field-metadata/utils/generate-rating-optionts.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { fromMorphRelationCreateFieldInputToFlatFieldMetadatas } from 'src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts index 3d125b2b90..ab78c7f09c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-delete-field-input-to-flat-field-metadatas-to-delete.util.ts @@ -3,15 +3,15 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties, } from 'twenty-shared/utils'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type DeleteOneFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/delete-field.input'; import { FieldMetadataException, FieldMetadataExceptionCode, } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { computeFlatFieldMetadataRelatedFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/compute-flat-field-metadata-related-flat-field-metadata.util'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts index a29da6509e..90aaeb7162 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-morph-relation-create-field-input-to-flat-field-metadatas.util.ts @@ -3,10 +3,10 @@ import { type FieldMetadataType } from 'twenty-shared/types'; import { computeMorphRelationFieldName, isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { computeMorphOrRelationFieldJoinColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-morph-or-relation-field-join-column-name.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { generateMorphOrRelationFlatFieldMetadataPair } from 'src/engine/metadata-modules/flat-field-metadata/utils/generate-morph-or-relation-flat-field-metadata-pair.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts index 3f359de94e..04ab543590 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-relation-create-field-input-to-flat-field-metadatas.util.ts @@ -2,10 +2,10 @@ import { msg } from '@lingui/core/macro'; import { type FieldMetadataType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type CreateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/create-field.input'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { computeMorphOrRelationFieldJoinColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-morph-or-relation-field-join-column-name.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { generateMorphOrRelationFlatFieldMetadataPair, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts index b2cf8a98f7..ffb660f7f3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/from-update-field-input-to-flat-field-metadata.util.ts @@ -5,9 +5,6 @@ import { } from 'twenty-shared/utils'; import { v4 } from 'uuid'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { FIELD_METADATA_STANDARD_OVERRIDES_PROPERTIES } from 'src/engine/metadata-modules/field-metadata/constants/field-metadata-standard-overrides-properties.constant'; import { type UpdateFieldInput } from 'src/engine/metadata-modules/field-metadata/dtos/update-field.input'; import { @@ -15,6 +12,9 @@ import { FieldMetadataExceptionCode, } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { type FieldMetadataStandardOverridesProperties } from 'src/engine/metadata-modules/field-metadata/types/field-metadata-standard-overrides-properties.type'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { FLAT_FIELD_METADATA_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-editable-properties.constant'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { type FlatFieldMetadataEditableProperties } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-editable-properties.constant'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-jsonb-property.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-jsonb-property.util.ts deleted file mode 100644 index 55bffa0763..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-jsonb-property.util.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { FieldMetadataType } from 'twenty-shared/types'; - -import { FLAT_FIELD_METADATA_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant'; -import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { isFlatFieldMetadataOfTypes } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-types.util'; - -export const isFlatFieldMetadataJsonbProperty = ({ - flatFieldMetadata, - property, -}: { - flatFieldMetadata: FlatFieldMetadata; - property: keyof FlatFieldMetadata; -}): boolean => { - if (property === 'defaultValue') { - return isFlatFieldMetadataOfTypes(flatFieldMetadata, [ - FieldMetadataType.LINKS, - FieldMetadataType.PHONES, - FieldMetadataType.EMAILS, - FieldMetadataType.CURRENCY, - FieldMetadataType.FULL_NAME, - FieldMetadataType.ADDRESS, - FieldMetadataType.MULTI_SELECT, - FieldMetadataType.RAW_JSON, - FieldMetadataType.ACTOR, - FieldMetadataType.ARRAY, - ]); - } - - const isJsonB = FLAT_FIELD_METADATA_JSONB_PROPERTIES.includes( - property as (typeof FLAT_FIELD_METADATA_JSONB_PROPERTIES)[number], - ); - - return isJsonB; -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-index-on-flat-field-metadata-name-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-index-on-flat-field-metadata-name-update.util.ts index 73a2346c7e..6835c59aa6 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-index-on-flat-field-metadata-name-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/recompute-index-on-flat-field-metadata-name-update.util.ts @@ -1,7 +1,7 @@ import { isDefined } from 'twenty-shared/utils'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-enum-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-enum-flat-field-metadata.util.ts index 660175759f..796f59e350 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-enum-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-enum-flat-field-metadata.util.ts @@ -16,6 +16,7 @@ import { type FieldMetadataDefaultOption, } from 'src/engine/metadata-modules/field-metadata/dtos/options.input'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; +import { type FlatFieldMetadataTypeValidationArgs } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type'; import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { runFlatFieldMetadataValidators } from 'src/engine/metadata-modules/flat-field-metadata/utils/run-flat-field-metadata-validators.util'; @@ -24,7 +25,6 @@ import { beneathDatabaseIdentifierMinimumLength, exceedsDatabaseIdentifierMaximumLength, } from 'src/engine/metadata-modules/utils/validate-database-identifier-length.utils'; -import { type ValidateOneFieldMetadataArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service'; import { isSnakeCaseString } from 'src/utils/is-snake-case-string'; const validateMetadataOptionId = (sanitizedId?: string) => { @@ -305,8 +305,8 @@ const validateFieldMetadataDefaultValue = ({ }; export const validateEnumSelectFlatFieldMetadata = ({ - flatFieldMetadataToValidate, -}: ValidateOneFieldMetadataArgs): FlatFieldMetadataValidationError[] => { + flatEntityToValidate: flatFieldMetadataToValidate, +}: FlatFieldMetadataTypeValidationArgs): FlatFieldMetadataValidationError[] => { const optionsValidationErrors = validateFieldMetadataInputOptions( flatFieldMetadataToValidate, ); diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts index 284d1aa37d..2c6ba146f5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util.ts @@ -2,13 +2,13 @@ import { msg } from '@lingui/core/macro'; import { FieldMetadataType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { compositeTypeDefinitions } from 'src/engine/metadata-modules/field-metadata/composite-types'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts index f571be8c98..07842276d4 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-or-relation-flat-field-metadata.util.ts @@ -3,15 +3,15 @@ import { isDefined, isValidUuid } from 'twenty-shared/utils'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; +import { type FlatFieldMetadataTypeValidationArgs } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-type-validator.type'; import { type FlatFieldMetadataValidationError } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-validation-error.type'; -import { type ValidateOneFieldMetadataArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service'; export const validateMorphOrRelationFlatFieldMetadata = async ({ dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, + flatEntityToValidate: flatFieldMetadataToValidate, + optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, remainingFlatEntityMapsToValidate, -}: ValidateOneFieldMetadataArgs): Promise< +}: FlatFieldMetadataTypeValidationArgs): Promise< FlatFieldMetadataValidationError[] > => { const { relationTargetFieldMetadataId, relationTargetObjectMetadataId } = diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-relation-creation-payload.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-relation-creation-payload.util.ts index 02da013088..9f9b806825 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-relation-creation-payload.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-morph-relation-creation-payload.util.ts @@ -2,8 +2,8 @@ import { msg } from '@lingui/core/macro'; import { isDefined } from 'class-validator'; import { type RelationCreationPayload } from 'twenty-shared/types'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FailedFieldInputTranspilation, type FieldInputTranspilationResult, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-creation-payload.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-creation-payload.util.ts index 4790c4d79f..f041ef6860 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-creation-payload.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-relation-creation-payload.util.ts @@ -5,12 +5,12 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties, } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { FieldMetadataException, FieldMetadataExceptionCode, } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; import { validateRelationCreationPayloadOrThrow } from 'src/engine/metadata-modules/field-metadata/utils/validate-relation-creation-payload-or-throw.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FieldInputTranspilationResult } from 'src/engine/metadata-modules/flat-field-metadata/types/field-input-transpilation-result.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts deleted file mode 100644 index 15ba523f96..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; - -export const FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE = [ - 'indexType', - 'indexWhereClause', - 'flatIndexFieldMetadatas', - 'isUnique', - 'name', -] as const satisfies (keyof FlatIndexMetadata)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts index 49f04c208a..cbb35b170e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts @@ -6,9 +6,9 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; import { fromIndexMetadataEntityToFlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts deleted file mode 100644 index ee3dcd5e4a..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant'; - -export type FlatIndexMetadataPropertiesToCompare = - (typeof FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts deleted file mode 100644 index 0837335133..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts +++ /dev/null @@ -1,61 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; -import { parseJson } from 'twenty-shared/utils'; - -import { FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant'; -import { type FlatIndexMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type'; -import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -export const compareTwoFlatIndexMetadata = ({ - fromFlatIndexMetadata, - toFlatIndexMetadata, -}: FromTo) => { - const transformOptions = { - propertiesToStringify: ['flatIndexFieldMetadatas'] as const, - shouldIgnoreProperty: (property: string) => - !FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE.includes( - property as FlatIndexMetadataPropertiesToCompare, - ), - }; - - const fromCompare = transformMetadataForComparison( - fromFlatIndexMetadata, - transformOptions, - ); - const toCompare = transformMetadataForComparison( - toFlatIndexMetadata, - transformOptions, - ); - - const flatIndexeDifferences = diff(fromCompare, toCompare); - - return flatIndexeDifferences.flatMap<{ property: string } & FromTo>( - (difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatIndexMetadataPropertiesToCompare; - - if (property === 'flatIndexFieldMetadatas') { - return { - from: parseJson(oldValue), - to: parseJson(value), - property, - }; - } - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: - return []; - } - }, - ); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/flat-object-metadata-maps.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/flat-object-metadata-maps.mock.ts index 29c9f547cb..22620f2cff 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/flat-object-metadata-maps.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/__mocks__/flat-object-metadata-maps.mock.ts @@ -1,5 +1,5 @@ -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { ALL_FLAT_OBJECT_METADATA_MOCKS } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/all-flat-object-metadatas.mock'; export const FLAT_OBJECT_METADATA_MAPS_MOCKS = [ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-jsonb-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-jsonb-properties.constant.ts deleted file mode 100644 index 7ff562d6c3..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-jsonb-properties.constant.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; - -export const FLAT_OBJECT_METADATA_JSONB_PROPERTIES = [ - 'standardOverrides', -] as const satisfies (keyof FlatObjectMetadata)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant.ts deleted file mode 100644 index dc921b8020..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; - -export const FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE = [ - 'description', - 'icon', - 'isActive', - 'isLabelSyncedWithName', - 'labelPlural', - 'labelSingular', - 'namePlural', - 'nameSingular', - 'standardOverrides', // Only if standard - 'labelIdentifierFieldMetadataId', -] as const satisfies (keyof FlatObjectMetadata)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/workspace-flat-object-metadata-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/workspace-flat-object-metadata-map-cache.service.ts index 32db807992..965cccb2c0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/workspace-flat-object-metadata-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/services/workspace-flat-object-metadata-map-cache.service.ts @@ -6,8 +6,8 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { fromObjectMetadataEntityToFlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-object-metadata-entity-to-flat-object-metadata.util'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-jsonb-properties.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-jsonb-properties.type.ts deleted file mode 100644 index ca8d6358fe..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-jsonb-properties.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_OBJECT_METADATA_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-jsonb-properties.constant'; - -export type FlatObjectMetadataEntityJsonbProperties = - (typeof FLAT_OBJECT_METADATA_JSONB_PROPERTIES)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type.ts deleted file mode 100644 index b8a4e9e90a..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant'; - -export type FlatObjectMetadataPropertiesToCompare = - (typeof FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compare-two-flat-object-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compare-two-flat-object-metadata.util.ts deleted file mode 100644 index 5fa2b23dcf..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compare-two-flat-object-metadata.util.ts +++ /dev/null @@ -1,91 +0,0 @@ -import omit from 'lodash.omit'; -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; -import { assertUnreachable, parseJson } from 'twenty-shared/utils'; - -import { FLAT_OBJECT_METADATA_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-jsonb-properties.constant'; -import { FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant'; -import { type FlatObjectMetadataEntityJsonbProperties } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-jsonb-properties.type'; -import { type FlatObjectMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type'; -import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { isStandardMetadata } from 'src/engine/metadata-modules/utils/is-standard-metadata.util'; -import { type FlatObjectPropertiesUpdates } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -export const compareTwoFlatObjectMetadata = ({ - fromFlatObjectMetadata, - toFlatObjectMetadata, -}: FromTo) => { - const transformMetadataForComparisonParameters = { - propertiesToStringify: FLAT_OBJECT_METADATA_JSONB_PROPERTIES, - shouldIgnoreProperty: ( - property: string, - flatObjectMetadata: FlatObjectMetadata, - ) => { - if ( - !FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE.includes( - property as FlatObjectMetadataPropertiesToCompare, - ) - ) { - return true; - } - - if ( - isStandardMetadata(flatObjectMetadata) && - property !== 'standardOverrides' - ) { - return true; - } - - return false; - }, - }; - const fromCompare = transformMetadataForComparison( - fromFlatObjectMetadata, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatObjectMetadata, - transformMetadataForComparisonParameters, - ); - const objectMetadataDifference = diff(fromCompare, omit(toCompare, 'fields')); - - return objectMetadataDifference.flatMap( - (difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatObjectMetadataPropertiesToCompare; - const isJsonb = FLAT_OBJECT_METADATA_JSONB_PROPERTIES.includes( - property as FlatObjectMetadataEntityJsonbProperties, - ); - - if (isJsonb) { - return { - from: parseJson(oldValue), - to: parseJson(value), - property, - }; - } - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': { - // Should never occurs ? should throw ? - return []; - } - default: { - assertUnreachable( - difference, - `Unexpected difference type: ${difference['type']}`, - ); - } - } - }, - ); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts index 98451c6998..455b94cd0b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util.ts @@ -4,7 +4,7 @@ import { } from 'twenty-shared/utils'; import { v4 } from 'uuid'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-delete-object-input-to-flat-field-metadatas-to-delete.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-delete-object-input-to-flat-field-metadatas-to-delete.util.ts index d5bb3a1e68..8eebc4eb38 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-delete-object-input-to-flat-field-metadatas-to-delete.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-delete-object-input-to-flat-field-metadatas-to-delete.util.ts @@ -3,9 +3,9 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties, } from 'twenty-shared/utils'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util'; import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts index ac475e295e..33a67e022b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/from-update-object-input-to-flat-object-metadata-and-related-flat-entities.util.ts @@ -4,12 +4,12 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties, } from 'twenty-shared/utils'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { type FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; -import { FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant'; -import { type FlatObjectMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { recomputeIndexAfterFlatObjectMetadataSingularNameUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-index-after-flat-object-metadata-singular-name-update.util'; import { recomputeViewFieldIdentifierAfterFlatObjectIdentifierUpdate } from 'src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util'; @@ -36,11 +36,11 @@ type FromUpdateObjectInputToFlatObjectMetadataArgs = { >; const objectMetadataEditableProperties = - FLAT_OBJECT_METADATA_PROPERTIES_TO_COMPARE.filter( + ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY.objectMetadata.propertiesToCompare.filter( ( property, ): property is Exclude< - FlatObjectMetadataPropertiesToCompare, + FlatEntityPropertiesToCompare<'objectMetadata'>, 'standardOverrides' > => property !== 'standardOverrides', ); diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/get-flat-object-metadata-many-to-one-target-morph-relation-flat-field-metadatas-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/get-flat-object-metadata-many-to-one-target-morph-relation-flat-field-metadatas-or-throw.util.ts index a6491c6926..c876b1d6ba 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/get-flat-object-metadata-many-to-one-target-morph-relation-flat-field-metadatas-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/get-flat-object-metadata-many-to-one-target-morph-relation-flat-field-metadatas-or-throw.util.ts @@ -1,7 +1,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts index 2a18ba3825..34caeb4af6 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/is-failed-flat-object-metadata-validation.util.ts @@ -1,10 +1,10 @@ -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; import { WORKSPACE_MIGRATION_OBJECT_ACTION_TYPES, type WorkspaceMigrationObjectActionTypeV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; +import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; export const isFailedFlatObjectMetadataValidation = ( failedValidation: FailedFlatEntityValidation, diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-index-after-flat-object-metadata-singular-name-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-index-after-flat-object-metadata-singular-name-update.util.ts index a28a381519..8342e58c34 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-index-after-flat-object-metadata-singular-name-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-index-after-flat-object-metadata-singular-name-update.util.ts @@ -1,7 +1,7 @@ import { isDefined } from 'twenty-shared/utils'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { generateFlatIndexMetadataWithNameOrThrow } from 'src/engine/metadata-modules/index-metadata/utils/generate-flat-index.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts index 4712f1c016..4826123cf3 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/recompute-view-field-identifier-after-flat-object-identifier-update.util.ts @@ -1,8 +1,8 @@ import { isDefined } from 'twenty-shared/utils'; import { v4 } from 'uuid'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { DEFAULT_VIEW_FIELD_SIZE } from 'src/engine/workspace-manager/standard-objects-prefill-data/views/constants/DEFAULT_VIEW_FIELD_SIZE'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/rename-related-morph-field-on-object-names-update.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/rename-related-morph-field-on-object-names-update.util.ts index f4db23211b..4e5821d806 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/rename-related-morph-field-on-object-names-update.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/rename-related-morph-field-on-object-names-update.util.ts @@ -5,9 +5,9 @@ import { } from 'twenty-shared/types'; import { computeMorphRelationFieldName } from 'twenty-shared/utils'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { computeMorphOrRelationFieldJoinColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-morph-or-relation-field-join-column-name.util'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { getFlatObjectMetadataTargetMorphRelationFlatFieldMetadatasOrThrow } from 'src/engine/metadata-modules/flat-object-metadata/utils/get-flat-object-metadata-many-to-one-target-morph-relation-flat-field-metadatas-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-identifiers.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-identifiers.util.ts index 879a6a6ccd..ab0e2c3515 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-identifiers.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-identifiers.util.ts @@ -4,8 +4,8 @@ import { isLabelIdentifierFieldMetadataTypes, } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatObjectMetadataValidationError } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-validation-error.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-name-and-labels.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-name-and-labels.util.ts index 8d22f27d85..37939b4886 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-name-and-labels.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-name-and-labels.util.ts @@ -1,6 +1,6 @@ import { t, msg } from '@lingui/core/macro'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatObjectMetadataValidationError } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-validation-error.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { areFlatObjectMetadataNamesSyncedWithLabels } from 'src/engine/metadata-modules/flat-object-metadata/utils/are-flat-object-metadata-names-synced-with-labels.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant.ts deleted file mode 100644 index 49aaf038b7..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { FLAT_VIEW_FIELD_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view-field/constants/flat-view-field-editable-properties.constant'; -import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; - -export const FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE = [ - ...FLAT_VIEW_FIELD_EDITABLE_PROPERTIES, - 'deletedAt', -] as const satisfies (keyof FlatViewField)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/services/workspace-flat-view-field-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/services/workspace-flat-view-field-map-cache.service.ts index b2ab69a71f..35b40e6187 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/services/workspace-flat-view-field-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/services/workspace-flat-view-field-map-cache.service.ts @@ -6,8 +6,8 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { FlatViewFieldMaps } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type'; import { fromViewFieldEntityToFlatViewField } from 'src/engine/metadata-modules/flat-view-field/utils/from-view-field-entity-to-flat-view-field.util'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type.ts index db76a38da5..36cdfbcb6c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type.ts @@ -1,4 +1,4 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; export type FlatViewFieldMaps = FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type.ts deleted file mode 100644 index cfec4e9203..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant'; - -export type FlatViewFieldPropertiesToCompare = - (typeof FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compare-two-flat-view-field.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compare-two-flat-view-field.util.ts deleted file mode 100644 index 89cc12b45a..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compare-two-flat-view-field.util.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { type FromTo } from 'twenty-shared/types'; - -import { compareTwoFlatEntity } from 'src/engine/core-modules/common/utils/compare-two-flat-entity.util'; -import { FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant'; -import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; - -type GetWorkspaceMigrationUpdateViewFieldActionArgs = FromTo< - FlatViewField, - 'FlatViewField' ->; - -export const compareTwoFlatViewField = ({ - fromFlatViewField, - toFlatViewField, -}: GetWorkspaceMigrationUpdateViewFieldActionArgs) => { - return compareTwoFlatEntity({ - fromFlatEntity: fromFlatViewField, - toFlatEntity: toFlatViewField, - propertiesToStringify: [], - propertiesToCompare: FLAT_VIEW_FIELD_PROPERTIES_TO_COMPARE, - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-jsonb-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-jsonb-properties.constant.ts deleted file mode 100644 index fa04eb772e..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-jsonb-properties.constant.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; - -export const FLAT_VIEW_FILTER_JSONB_PROPERTIES = [ - 'value', -] as const satisfies (keyof FlatViewFilter)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant.ts deleted file mode 100644 index 0642208a62..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FLAT_VIEW_FILTER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-editable-properties.constant'; -import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; - -export const FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE = [ - 'viewId', - 'deletedAt', - ...FLAT_VIEW_FILTER_EDITABLE_PROPERTIES, -] as const satisfies (keyof FlatViewFilter)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/services/workspace-flat-view-filter-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/services/workspace-flat-view-filter-map-cache.service.ts index cee58eaf93..2069d0ff12 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/services/workspace-flat-view-filter-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/services/workspace-flat-view-filter-map-cache.service.ts @@ -6,8 +6,8 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type'; import { fromViewFilterEntityToFlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/utils/from-view-filter-entity-to-flat-view-filter.util'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type.ts index 0fe50cb6f7..5047adfac6 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type.ts @@ -1,4 +1,4 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; export type FlatViewFilterMaps = FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-properties-to-compare.type.ts deleted file mode 100644 index a006868b6c..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant'; - -export type FlatViewFilterPropertiesToCompare = - (typeof FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/compare-two-flat-view-filter.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/compare-two-flat-view-filter.util.ts deleted file mode 100644 index f0decdf5b1..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/compare-two-flat-view-filter.util.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { type FromTo } from 'twenty-shared/types'; - -import { compareTwoFlatEntity } from 'src/engine/core-modules/common/utils/compare-two-flat-entity.util'; -import { FLAT_VIEW_FILTER_JSONB_PROPERTIES } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-jsonb-properties.constant'; -import { FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant'; -import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; - -type GetWorkspaceMigrationUpdateViewFilterActionArgs = FromTo< - FlatViewFilter, - 'FlatViewFilter' ->; - -export const compareTwoFlatViewFilter = ({ - fromFlatViewFilter, - toFlatViewFilter, -}: GetWorkspaceMigrationUpdateViewFilterActionArgs) => { - return compareTwoFlatEntity({ - fromFlatEntity: fromFlatViewFilter, - toFlatEntity: toFlatViewFilter, - propertiesToStringify: FLAT_VIEW_FILTER_JSONB_PROPERTIES, - propertiesToCompare: FLAT_VIEW_FILTER_PROPERTIES_TO_COMPARE, - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/constants/flat-view-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/constants/flat-view-properties-to-compare.constant.ts deleted file mode 100644 index 54155bffb4..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/constants/flat-view-properties-to-compare.constant.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FLAT_VIEW_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/flat-view/constants/flat-view-editable-properties.constant'; -import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; - -export const FLAT_VIEW_PROPERTIES_TO_COMPARE = [ - 'key', - 'deletedAt', - ...FLAT_VIEW_EDITABLE_PROPERTIES, -] as const satisfies (keyof FlatView)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/services/workspace-flat-view-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/services/workspace-flat-view-map-cache.service.ts index 8797123e99..1c16d69223 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/services/workspace-flat-view-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/services/workspace-flat-view-map-cache.service.ts @@ -6,8 +6,8 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { type FlatViewMaps } from 'src/engine/metadata-modules/flat-view/types/flat-view-maps.type'; import { fromViewEntityToFlatView } from 'src/engine/metadata-modules/flat-view/utils/from-view-entity-to-flat-view.util'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-maps.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-maps.type.ts index e063f52d12..0ef3ce1390 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-maps.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-maps.type.ts @@ -1,4 +1,4 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; export type FlatViewMaps = FlatEntityMaps; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-properties-to-compare.type.ts deleted file mode 100644 index b467e097ea..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_VIEW_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view/constants/flat-view-properties-to-compare.constant'; - -export type FlatViewPropertiesToCompare = - (typeof FLAT_VIEW_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/compare-two-flat-view.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/compare-two-flat-view.util.ts deleted file mode 100644 index 8e020653bb..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-view/utils/compare-two-flat-view.util.ts +++ /dev/null @@ -1,56 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; - -import { FLAT_VIEW_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-view/constants/flat-view-properties-to-compare.constant'; -import { type FlatViewPropertiesToCompare } from 'src/engine/metadata-modules/flat-view/types/flat-view-properties-to-compare.type'; -import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; -import { type UpdateViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -type GetWorkspaceMigrationUpdateViewActionArgs = FromTo; - -export const compareTwoFlatView = ({ - fromFlatView, - toFlatView, -}: GetWorkspaceMigrationUpdateViewActionArgs) => { - const transformMetadataForComparisonParameters = { - shouldIgnoreProperty: (property: string) => - !FLAT_VIEW_PROPERTIES_TO_COMPARE.includes( - property as FlatViewPropertiesToCompare, - ), - propertiesToStringify: [], - }; - const fromCompare = transformMetadataForComparison( - fromFlatView, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatView, - transformMetadataForComparisonParameters, - ); - - const flatViewDifferences = diff(fromCompare, toCompare); - - return flatViewDifferences.flatMap( - (difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatViewPropertiesToCompare; - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }, - ); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/generate-flat-index.util.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/generate-flat-index.util.ts index 730568389e..f74653e457 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/generate-flat-index.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/utils/generate-flat-index.util.ts @@ -3,7 +3,7 @@ import { isDefined } from 'twenty-shared/utils'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/object-metadata-standard-overrides-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/object-metadata-standard-overrides-properties.constant.ts index 4df5fb0943..55b56039da 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/object-metadata-standard-overrides-properties.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/constants/object-metadata-standard-overrides-properties.constant.ts @@ -1,8 +1,8 @@ -import { type FlatObjectMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type'; +import { type FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; export const OBJECT_METADATA_STANDARD_OVERRIDES_PROPERTIES = [ 'labelSingular', 'labelPlural', 'description', 'icon', -] as const satisfies FlatObjectMetadataPropertiesToCompare[]; +] as const satisfies FlatEntityPropertiesToCompare<'objectMetadata'>[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata-v2.service.ts index cd3bcda4d4..5d3429c180 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata-v2.service.ts @@ -2,14 +2,14 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { fromCreateObjectInputToFlatObjectMetadataAndFlatFieldMetadatasToCreate } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-create-object-input-to-flat-object-metadata-and-flat-field-metadatas-to-create.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts index 3200e633ed..436faa9dad 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.module.ts @@ -9,13 +9,13 @@ import { import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard'; import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service'; import { IndexMetadataModule } from 'src/engine/metadata-modules/index-metadata/index-metadata.module'; import { CreateObjectInput } from 'src/engine/metadata-modules/object-metadata/dtos/create-object.input'; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts index b27901aded..8741680db7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/object-metadata.service.ts @@ -14,11 +14,11 @@ import { type QueryRunner, } from 'typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { IndexMetadataService } from 'src/engine/metadata-modules/index-metadata/index-metadata.service'; import { type DeleteOneObjectInput } from 'src/engine/metadata-modules/object-metadata/dtos/delete-object.input'; import { diff --git a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts index 1e29ddbb1d..fdc130cbf5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-metadata/utils/build-default-relation-flat-field-metadatas-for-custom-object.util.ts @@ -4,9 +4,9 @@ import { v4 } from 'uuid'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { type MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-properties-to-compare.constant.ts deleted file mode 100644 index cf6efc641b..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-properties-to-compare.constant.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { FLAT_ROUTE_TRIGGER_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-editable-properties.constant'; -import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; - -export const FLAT_ROUTE_TRIGGER_PROPERTIES_TO_COMPARE = [ - ...FLAT_ROUTE_TRIGGER_EDITABLE_PROPERTIES, -] as const satisfies (keyof FlatRouteTrigger)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts index b35721aa86..d4ddb63de7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/route-trigger.module.ts @@ -2,8 +2,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AuthModule } from 'src/engine/core-modules/auth/auth.module'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { DomainManagerModule } from 'src/engine/core-modules/domain-manager/domain-manager.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { RouteTriggerResolver } from 'src/engine/metadata-modules/route-trigger/resolvers/route-trigger.resolver'; import { RouteTriggerController } from 'src/engine/metadata-modules/route-trigger/route-trigger.controller'; import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service.ts index 6c5530587a..6dda77c75c 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/route-trigger-v2.service.ts @@ -2,12 +2,12 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { CreateRouteTriggerInput } from 'src/engine/metadata-modules/route-trigger/dtos/create-route-trigger.input'; import { RouteTriggerIdInput } from 'src/engine/metadata-modules/route-trigger/dtos/route-trigger-id.input'; import { UpdateRouteTriggerInput } from 'src/engine/metadata-modules/route-trigger/dtos/update-route-trigger.input'; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts index 3e1019b100..997b98be3f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/services/workspace-flat-route-trigger-map-cache.service.ts @@ -7,8 +7,8 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { ROUTE_TRIGGER_ENTITY_RELATION_PROPERTIES, RouteTrigger, diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger-properties-to-compare.type.ts deleted file mode 100644 index 29ea3a478e..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_ROUTE_TRIGGER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-properties-to-compare.constant'; - -export type FlatRouteTriggerPropertiesToCompare = - (typeof FLAT_ROUTE_TRIGGER_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/compare-two-flat-route-trigger.util.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/compare-two-flat-route-trigger.util.ts deleted file mode 100644 index 8cb639bec5..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/compare-two-flat-route-trigger.util.ts +++ /dev/null @@ -1,59 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; - -import { FLAT_ROUTE_TRIGGER_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-properties-to-compare.constant'; -import { type FlatRouteTriggerPropertiesToCompare } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger-properties-to-compare.type'; -import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; -import { type UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -type GetWorkspaceMigrationUpdateRouteTriggerActionArgs = FromTo< - FlatRouteTrigger, - 'FlatRouteTrigger' ->; - -export const compareTwoFlatRouteTrigger = ({ - fromFlatRouteTrigger, - toFlatRouteTrigger, -}: GetWorkspaceMigrationUpdateRouteTriggerActionArgs) => { - const transformMetadataForComparisonParameters = { - shouldIgnoreProperty: (property: string) => - !FLAT_ROUTE_TRIGGER_PROPERTIES_TO_COMPARE.includes( - property as FlatRouteTriggerPropertiesToCompare, - ), - propertiesToStringify: [] as const, - }; - const fromCompare = transformMetadataForComparison( - fromFlatRouteTrigger, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatRouteTrigger, - transformMetadataForComparisonParameters, - ); - - const flatRouteTriggerDifferences = diff(fromCompare, toCompare); - - return flatRouteTriggerDifferences.flatMap< - UpdateRouteTriggerAction['updates'][number] - >((difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatRouteTriggerPropertiesToCompare; - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts index 76c73ea17a..51292f9595 100644 --- a/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/from-update-route-trigger-input-to-flat-route-trigger-to-update-or-throw.util.ts @@ -1,4 +1,4 @@ -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type UpdateRouteTriggerInput } from 'src/engine/metadata-modules/route-trigger/dtos/update-route-trigger.input'; import { RouteTriggerException, diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-properties-to-compare.constant.ts deleted file mode 100644 index 6a6c8c2634..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-properties-to-compare.constant.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { FLAT_SERVERLESS_FUNCTION_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-editable-properties.constant'; -import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; - -export const FLAT_SERVERLESS_FUNCTION_PROPERTIES_TO_COMPARE = [ - ...FLAT_SERVERLESS_FUNCTION_EDITABLE_PROPERTIES, - 'deletedAt', -] as const satisfies (keyof FlatServerlessFunction)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts index d977a40351..f834d444e0 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/serverless-function.module.ts @@ -4,12 +4,13 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm'; import { AuditModule } from 'src/engine/core-modules/audit/audit.module'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { FileUploadModule } from 'src/engine/core-modules/file/file-upload/file-upload.module'; import { FileModule } from 'src/engine/core-modules/file/file.module'; import { ThrottlerModule } from 'src/engine/core-modules/throttler/throttler.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; +import { ServerlessFunctionLayerModule } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.module'; import { ServerlessFunctionTriggerJob } from 'src/engine/metadata-modules/serverless-function/jobs/serverless-function-trigger.job'; import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { ServerlessFunctionResolver } from 'src/engine/metadata-modules/serverless-function/serverless-function.resolver'; @@ -17,7 +18,6 @@ import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverles import { ServerlessFunctionV2Service } from 'src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service'; import { WorkspaceFlatServerlessFunctionMapCacheService } from 'src/engine/metadata-modules/serverless-function/services/workspace-flat-serverless-function-map-cache.service'; import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-v2.module'; -import { ServerlessFunctionLayerModule } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.module'; @Module({ imports: [ diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts index 60c7de2f5e..a88f79493d 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/serverless-function-v2.service.ts @@ -2,12 +2,13 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import type { CreateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function.input'; import { ServerlessFunctionIdInput } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-id.input'; import { UpdateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/update-serverless-function.input'; import { @@ -19,7 +20,6 @@ import { fromCreateServerlessFunctionInputToFlatServerlessFunction } from 'src/e import { fromUpdateServerlessFunctionInputToFlatServerlessFunctionToUpdateOrThrow } from 'src/engine/metadata-modules/serverless-function/utils/from-update-serverless-function-input-to-flat-serverless-function-to-update-or-throw.util'; import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2'; import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service'; -import type { CreateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function.input'; @Injectable() export class ServerlessFunctionV2Service { diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/workspace-flat-serverless-function-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/workspace-flat-serverless-function-map-cache.service.ts index b6dc5fbd0b..4ccf324728 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/workspace-flat-serverless-function-map-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/services/workspace-flat-serverless-function-map-cache.service.ts @@ -7,8 +7,8 @@ import { Repository } from 'typeorm'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { SERVERLESS_FUNCTION_ENTITY_RELATION_PROPERTIES, ServerlessFunctionEntity, diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function-properties-to-compare.type.ts deleted file mode 100644 index b13e090692..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function-properties-to-compare.type.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { type FLAT_SERVERLESS_FUNCTION_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-properties-to-compare.constant'; - -export type FlatServerlessFunctionPropertiesToCompare = - (typeof FLAT_SERVERLESS_FUNCTION_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/compare-two-flat-serverless-function.util.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/compare-two-flat-serverless-function.util.ts deleted file mode 100644 index 08a63db136..0000000000 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/compare-two-flat-serverless-function.util.ts +++ /dev/null @@ -1,59 +0,0 @@ -import diff from 'microdiff'; -import { type FromTo } from 'twenty-shared/types'; - -import { FLAT_SERVERLESS_FUNCTION_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-properties-to-compare.constant'; -import { type FlatServerlessFunctionPropertiesToCompare } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function-properties-to-compare.type'; -import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; -import { type UpdateServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type'; -import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; - -type GetWorkspaceMigrationUpdateServerlessFunctionActionArgs = FromTo< - FlatServerlessFunction, - 'FlatServerlessFunction' ->; - -export const compareTwoFlatServerlessFunction = ({ - fromFlatServerlessFunction, - toFlatServerlessFunction, -}: GetWorkspaceMigrationUpdateServerlessFunctionActionArgs) => { - const transformMetadataForComparisonParameters = { - shouldIgnoreProperty: (property: string) => - !FLAT_SERVERLESS_FUNCTION_PROPERTIES_TO_COMPARE.includes( - property as FlatServerlessFunctionPropertiesToCompare, - ), - propertiesToStringify: [], - }; - const fromCompare = transformMetadataForComparison( - fromFlatServerlessFunction, - transformMetadataForComparisonParameters, - ); - const toCompare = transformMetadataForComparison( - toFlatServerlessFunction, - transformMetadataForComparisonParameters, - ); - - const flatServerlessFunctionDifferences = diff(fromCompare, toCompare); - - return flatServerlessFunctionDifferences.flatMap< - UpdateServerlessFunctionAction['updates'][number] - >((difference) => { - switch (difference.type) { - case 'CHANGE': { - const { oldValue, path, value } = difference; - const property = path[0] as FlatServerlessFunctionPropertiesToCompare; - - return { - from: oldValue, - to: value, - property, - }; - } - case 'CREATE': - case 'REMOVE': - default: { - // Should never occurs, we should only provide null never undefined and so on - return []; - } - } - }); -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-update-serverless-function-input-to-flat-serverless-function-to-update-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-update-serverless-function-input-to-flat-serverless-function-to-update-or-throw.util.ts index eae43c8a24..511372aa18 100644 --- a/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-update-serverless-function-input-to-flat-serverless-function-to-update-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/from-update-serverless-function-input-to-flat-serverless-function-to-update-or-throw.util.ts @@ -5,7 +5,7 @@ import { trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties, } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { FLAT_SERVERLESS_FUNCTION_EDITABLE_PROPERTIES } from 'src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-editable-properties.constant'; import { type UpdateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/update-serverless-function.input'; import { diff --git a/packages/twenty-server/src/engine/metadata-modules/utils/validate-no-other-object-with-same-name-exists-or-throw.util.ts b/packages/twenty-server/src/engine/metadata-modules/utils/validate-no-other-object-with-same-name-exists-or-throw.util.ts index edbd3a52ce..3182cd6160 100644 --- a/packages/twenty-server/src/engine/metadata-modules/utils/validate-no-other-object-with-same-name-exists-or-throw.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/utils/validate-no-other-object-with-same-name-exists-or-throw.util.ts @@ -1,7 +1,7 @@ import { msg } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { ObjectMetadataException, diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts index aaff7bce6d..f12c0e21e5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/services/view-field-v2.service.ts @@ -2,13 +2,13 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { fromCreateViewFieldInputToFlatViewFieldToCreate } from 'src/engine/metadata-modules/flat-view-field/utils/from-create-view-field-input-to-flat-view-field-to-create.util'; import { fromDeleteViewFieldInputToFlatViewFieldOrThrow } from 'src/engine/metadata-modules/flat-view-field/utils/from-delete-view-field-input-to-flat-view-field-or-throw.util'; import { fromDestroyViewFieldInputToFlatViewFieldOrThrow } from 'src/engine/metadata-modules/flat-view-field/utils/from-destroy-view-field-input-to-flat-view-field-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-field/view-field.module.ts b/packages/twenty-server/src/engine/metadata-modules/view-field/view-field.module.ts index 7f414864b4..799e2ea1eb 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-field/view-field.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-field/view-field.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ViewFieldController } from 'src/engine/metadata-modules/view-field/controllers/view-field.controller'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; import { ViewFieldResolver } from 'src/engine/metadata-modules/view-field/resolvers/view-field.resolver'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter-v2.service.ts index 5c528a68b3..7e6baa0d58 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/services/view-filter-v2.service.ts @@ -2,13 +2,13 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { fromCreateViewFilterInputToFlatViewFilterToCreate } from 'src/engine/metadata-modules/flat-view-filter/utils/from-create-view-filter-input-to-flat-view-filter-to-create.util'; import { fromDeleteViewFilterInputToFlatViewFilterOrThrow } from 'src/engine/metadata-modules/flat-view-filter/utils/from-delete-view-filter-input-to-flat-view-filter-or-throw.util'; import { fromDestroyViewFilterInputToFlatViewFilterOrThrow } from 'src/engine/metadata-modules/flat-view-filter/utils/from-destroy-view-filter-input-to-flat-view-filter-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view-filter/view-filter.module.ts b/packages/twenty-server/src/engine/metadata-modules/view-filter/view-filter.module.ts index 04b6e89ca9..9ded5b79bc 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view-filter/view-filter.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view-filter/view-filter.module.ts @@ -1,8 +1,8 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ViewFilterController } from 'src/engine/metadata-modules/view-filter/controllers/view-filter.controller'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; import { ViewFilterResolver } from 'src/engine/metadata-modules/view-filter/resolvers/view-filter.resolver'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/services/view-v2.service.ts b/packages/twenty-server/src/engine/metadata-modules/view/services/view-v2.service.ts index 53068d75b2..0ed9e80d4e 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/services/view-v2.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/services/view-v2.service.ts @@ -2,12 +2,12 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { getSubFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/get-sub-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { getSubFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/get-sub-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { fromCreateViewInputToFlatViewToCreate } from 'src/engine/metadata-modules/flat-view/utils/from-create-view-input-to-flat-view-to-create.util'; import { fromDeleteViewInputToFlatViewOrThrow } from 'src/engine/metadata-modules/flat-view/utils/from-delete-view-input-to-flat-view-or-throw.util'; import { fromDestroyViewInputToFlatViewOrThrow } from 'src/engine/metadata-modules/flat-view/utils/from-destroy-view-input-to-flat-view-or-throw.util'; diff --git a/packages/twenty-server/src/engine/metadata-modules/view/view.module.ts b/packages/twenty-server/src/engine/metadata-modules/view/view.module.ts index cbc8e0d192..e40ad9162f 100644 --- a/packages/twenty-server/src/engine/metadata-modules/view/view.module.ts +++ b/packages/twenty-server/src/engine/metadata-modules/view/view.module.ts @@ -1,9 +1,9 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { I18nModule } from 'src/engine/core-modules/i18n/i18n.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FlatViewModule } from 'src/engine/metadata-modules/flat-view/flat-view.module'; import { ViewFieldModule } from 'src/engine/metadata-modules/view-field/view-field.module'; import { ViewFilterGroupModule } from 'src/engine/metadata-modules/view-filter-group/view-filter-group.module'; diff --git a/packages/twenty-server/src/engine/utils/compute-object-target-table.util.ts b/packages/twenty-server/src/engine/utils/compute-object-target-table.util.ts index 78560e2c1d..ec3f3ffa46 100644 --- a/packages/twenty-server/src/engine/utils/compute-object-target-table.util.ts +++ b/packages/twenty-server/src/engine/utils/compute-object-target-table.util.ts @@ -1,9 +1,9 @@ -import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { computeTableName } from './compute-table-name.util'; export const computeObjectTargetTable = ( - objectMetadata: Pick, + objectMetadata: Pick, ) => { return computeTableName(objectMetadata.nameSingular, objectMetadata.isCustom); }; diff --git a/packages/twenty-server/src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator.ts b/packages/twenty-server/src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator.ts index 1df1ab13ba..7e7c64466a 100644 --- a/packages/twenty-server/src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator.ts +++ b/packages/twenty-server/src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator.ts @@ -1,6 +1,6 @@ import { SetMetadata } from '@nestjs/common'; -import { type ALL_FLAT_ENTITY_MAPS_PROPERTIES } from 'src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant'; +import { type ALL_FLAT_ENTITY_MAPS_PROPERTIES } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-maps-properties.constant'; export const WORKSPACE_FLAT_MAP_CACHE_KEY = 'workspaceFlatMapCacheKey'; diff --git a/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache-registry.service.ts b/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache-registry.service.ts index 6ad7fe139e..cbd57fa806 100644 --- a/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache-registry.service.ts +++ b/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache-registry.service.ts @@ -3,7 +3,7 @@ import { DiscoveryService } from '@nestjs/core'; import { isDefined } from 'twenty-shared/utils'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { WORKSPACE_FLAT_MAP_CACHE_KEY } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; import { WorkspaceFlatMapCacheException, diff --git a/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service.ts b/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service.ts index 6383f3e7b8..806205b074 100644 --- a/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service.ts +++ b/packages/twenty-server/src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service.ts @@ -8,8 +8,8 @@ import { isDefined } from 'twenty-shared/utils'; import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { WORKSPACE_FLAT_MAP_CACHE_KEY } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; import { WorkspaceFlatMapCacheException, diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts index b336d54587..8fbca9772f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/dev-seeder.module.ts @@ -3,11 +3,11 @@ import { TypeOrmModule } from '@nestjs/typeorm'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; import { ApiKeyModule } from 'src/engine/core-modules/api-key/api-key.module'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataModule } from 'src/engine/metadata-modules/field-metadata/field-metadata.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { ObjectMetadataModule } from 'src/engine/metadata-modules/object-metadata/object-metadata.module'; import { ObjectPermissionModule } from 'src/engine/metadata-modules/object-permission/object-permission.module'; diff --git a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts index 4e74301204..91c291f455 100644 --- a/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/dev-seeder/services/dev-seeder.service.ts @@ -3,10 +3,10 @@ import { InjectDataSource } from '@nestjs/typeorm'; import { DataSource } from 'typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service'; import { TwentyConfigService } from 'src/engine/core-modules/twenty-config/twenty-config.service'; import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceCacheStorageService } from 'src/engine/workspace-cache-storage/workspace-cache-storage.service'; import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant.ts index 9b73fb3da4..e1be967c4d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant.ts @@ -1,23 +1,14 @@ +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; -import { type CreatedDeletedUpdatedActions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; +import { getMetadataEmptyWorkspaceMigrationActionRecord } from 'src/engine/workspace-manager/workspace-migration-v2/utils/get-metadata-empty-workspace-migration-action-record.util'; -const emptyCreatedDeletedUpdated: CreatedDeletedUpdatedActions = - { - created: [], - deleted: [], - updated: [], - }; - -export const EMPTY_ORCHESTRATOR_ACTIONS_REPORT = { - index: emptyCreatedDeletedUpdated, - objectMetadata: emptyCreatedDeletedUpdated, - view: emptyCreatedDeletedUpdated, - viewField: emptyCreatedDeletedUpdated, - fieldMetadata: emptyCreatedDeletedUpdated, - serverlessFunction: emptyCreatedDeletedUpdated, - databaseEventTrigger: emptyCreatedDeletedUpdated, - cronTrigger: emptyCreatedDeletedUpdated, - routeTrigger: emptyCreatedDeletedUpdated, - viewFilter: emptyCreatedDeletedUpdated, -} as const satisfies OrchestratorActionsReport; +export const EMPTY_ORCHESTRATOR_ACTIONS_REPORT = ( + Object.keys(ALL_METADATA_NAME) as (keyof typeof ALL_METADATA_NAME)[] +).reduce( + (orchestratorReport, metadataName) => ({ + ...orchestratorReport, + [metadataName]: + getMetadataEmptyWorkspaceMigrationActionRecord(metadataName), + }), + {} as OrchestratorActionsReport, +); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts index 36f4986221..1df46cba19 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts @@ -1,10 +1,10 @@ -import { type AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; +import { type AllFlatEntityTypesByMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name'; import { type FieldMetadataMinimalInformation } from 'src/engine/metadata-modules/flat-field-metadata/types/field-metadata-minimal-information.type'; import { type ObjectMetadataMinimalInformation } from 'src/engine/metadata-modules/flat-object-metadata/types/object-metadata-minimal-information.type'; -import { type OrchestratorFailureReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; import { type TranslatedFlatEntityValidationError } from 'src/engine/workspace-manager/workspace-migration-v2/interceptors/utils/translate-validation-errors.util'; -import { type WorkspaceMigrationFieldActionTypeV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { type WorkspaceMigrationObjectActionTypeV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type OrchestratorFailureReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; +import { type WorkspaceMigrationFieldActionTypeV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { type WorkspaceMigrationObjectActionTypeV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; export type ValidationErrorFieldResponse = Partial & { @@ -22,7 +22,7 @@ export type ValidationErrorResponse = { summary: { totalErrors: number; } & { - [P in keyof AllFlatEntitiesByMetadataEngineName as `invalid${Capitalize

}`]: number; + [P in keyof AllFlatEntityTypesByMetadataName as `invalid${Capitalize

}`]: number; }; errors: OrchestratorFailureReport; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts index 1b42f45430..60e904f9cc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts @@ -2,8 +2,8 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { EMPTY_ALL_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { EMPTY_ALL_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-all-flat-entity-maps.constant'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { EMPTY_ORCHESTRATOR_ACTIONS_REPORT } from 'src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant'; import { OrchestratorFailureReport, @@ -458,7 +458,7 @@ export class WorkspaceMigrationBuildOrchestratorService { ...aggregatedOrchestratorActionsReport.fieldMetadata.created, ...aggregatedOrchestratorActionsReport.fieldMetadata.updated, ...aggregatedOrchestratorActionsReport.index.created, - ...aggregatedOrchestratorActionsReport.index.updated, + ...aggregatedOrchestratorActionsReport.index.updated.flat(), /// // Views diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/is-property-update.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/is-property-update.type.ts new file mode 100644 index 0000000000..662e7a2aaa --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/is-property-update.type.ts @@ -0,0 +1,8 @@ +import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; + +export const isPropertyUpdate = ( + update: PropertyUpdate, + property: P, +): update is PropertyUpdate => { + return update.property === property; +}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type.ts index b3089c124a..ab792a8ee9 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type.ts @@ -1,10 +1,10 @@ import { type FromTo } from 'twenty-shared/types'; -import { type AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type MetadataWorkspaceMigrationActionsRecord } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type'; import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; -import { type CreatedDeletedUpdatedActions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type'; import { type WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2'; @@ -18,16 +18,11 @@ export type WorkspaceMigrationOrchestratorBuildArgs = { }; export type OrchestratorFailureReport = { - [P in keyof AllFlatEntitiesByMetadataEngineName]: FailedFlatEntityValidation< - AllFlatEntitiesByMetadataEngineName[P] - >[]; + [P in AllMetadataName]: FailedFlatEntityValidation>[]; }; export type OrchestratorActionsReport = { - // TODO could improve this typing but making generic actions and using extract - [P in keyof AllFlatEntitiesByMetadataEngineName]: CreatedDeletedUpdatedActions; -} & { - fieldMetadata: CreatedDeletedUpdatedActions; + [P in AllMetadataName]: MetadataWorkspaceMigrationActionsRecord

; }; export type WorkspaceMigrationOrchestratorFailedResult = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.spec.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.spec.ts index ca7bc6c913..8bc07a6da8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.spec.ts @@ -9,8 +9,8 @@ import { getFlatObjectMetadataMock } from 'src/engine/metadata-modules/flat-obje import { EMPTY_ORCHESTRATOR_ACTIONS_REPORT } from 'src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant'; import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; import { aggregateOrchestratorActionsReportCreateObjectAndCreateFieldActions } from 'src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util'; -import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { type CreateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { type CreateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; type CreateAggregationTestCase = EachTestingContext<{ input: OrchestratorActionsReport; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-delete-object-and-delete-field-actions.util.spec.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-delete-object-and-delete-field-actions.util.spec.ts index 9686f5ded6..d5ad48964a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-delete-object-and-delete-field-actions.util.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/__tests__/aggregate-orchestrator-actions-report-delete-object-and-delete-field-actions.util.spec.ts @@ -6,8 +6,8 @@ import { import { EMPTY_ORCHESTRATOR_ACTIONS_REPORT } from 'src/engine/workspace-manager/workspace-migration-v2/constant/empty-orchestrator-actions-report.constant'; import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; import { aggregateOrchestratorActionsReportDeleteObjectAndDeleteFieldActions } from 'src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-delete-object-and-delete-field.util'; -import { type DeleteFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { type DeleteObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type DeleteFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { type DeleteObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; type DeleteAggregationTestCase = EachTestingContext<{ input: OrchestratorActionsReport; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.ts index b94fa4525b..9b6f11d3f8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-create-object-and-create-field-actions.util.ts @@ -1,8 +1,8 @@ import { isDefined } from 'twenty-shared/utils'; import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; -import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { type CreateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { type CreateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; type AggregateOrchestratorActionsReportCreateObjectAndCreateFieldActionsArgs = { orchestratorActionsReport: OrchestratorActionsReport; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-delete-object-and-delete-field.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-delete-object-and-delete-field.util.ts index cdca23964d..20a759e482 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-delete-object-and-delete-field.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/aggregate-orchestrator-actions-report-delete-object-and-delete-field.util.ts @@ -1,8 +1,8 @@ import { isDefined } from 'twenty-shared/utils'; import { type OrchestratorActionsReport } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; -import { type DeleteFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { type DeleteObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type DeleteFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { type DeleteObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; type AggregateOrchestratorActionsReportDeleteObjectAndDeleteFieldActionsArgs = { orchestratorActionsReport: OrchestratorActionsReport; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/flat-entity-deleted-created-updated-matrix-dispatcher.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/flat-entity-deleted-created-updated-matrix-dispatcher.util.ts index 5d770c2cfd..e761274951 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/flat-entity-deleted-created-updated-matrix-dispatcher.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/flat-entity-deleted-created-updated-matrix-dispatcher.util.ts @@ -1,37 +1,57 @@ import { type FromTo } from 'twenty-shared/types'; +import { isDefined } from 'twenty-shared/utils'; -import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; -import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { type ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; +import { type FlatEntityPropertiesToStringify } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-stringify.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; +import { type MetadataFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { compareTwoFlatEntity } from 'src/engine/metadata-modules/flat-entity/utils/compare-two-flat-entity.util'; import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type'; -export type DeletedCreatedUpdatedMatrix = { - createdFlatEntityMaps: FlatEntityMaps; - deletedFlatEntityMaps: FlatEntityMaps; - updatedFlatEntityMaps: FromTo>; +export type DeletedCreatedUpdatedMatrix = { + createdFlatEntityMaps: MetadataFlatEntityMaps; + deletedFlatEntityMaps: MetadataFlatEntityMaps; + updatedFlatEntityMaps: { + byId: Record< + string, + { + updates: FlatEntityPropertiesUpdates; + } + >; + }; }; export type UniversalIdentifierItem = { universalIdentifier: string; }; +type FlatEntityDeletedCreatedUpdatedMatrixDispatcherArgs< + T extends AllMetadataName, +> = FromTo[]> & { + buildOptions: WorkspaceMigrationBuilderOptions; + comparisonOptions: Pick< + (typeof ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY)[T], + 'propertiesToCompare' | 'propertiesToStringify' + >; +}; + export const flatEntityDeletedCreatedUpdatedMatrixDispatcher = < - T extends AllFlatEntities, + T extends AllMetadataName, >({ from, to, buildOptions, -}: FromTo & { - buildOptions: WorkspaceMigrationBuilderOptions; -}): DeletedCreatedUpdatedMatrix => { + comparisonOptions: { propertiesToCompare, propertiesToStringify }, +}: FlatEntityDeletedCreatedUpdatedMatrixDispatcherArgs): DeletedCreatedUpdatedMatrix => { const initialDispatcher: DeletedCreatedUpdatedMatrix = { createdFlatEntityMaps: EMPTY_FLAT_ENTITY_MAPS, deletedFlatEntityMaps: EMPTY_FLAT_ENTITY_MAPS, - updatedFlatEntityMaps: { - from: EMPTY_FLAT_ENTITY_MAPS, - to: EMPTY_FLAT_ENTITY_MAPS, - }, + updatedFlatEntityMaps: { byId: {} }, }; const fromMap = new Map(from.map((obj) => [obj.universalIdentifier, obj])); @@ -39,44 +59,54 @@ export const flatEntityDeletedCreatedUpdatedMatrixDispatcher = < if (buildOptions.inferDeletionFromMissingEntities) { for (const [universalIdentifier, fromEntity] of fromMap) { - if (!toMap.has(universalIdentifier)) { - initialDispatcher.deletedFlatEntityMaps = - addFlatEntityToFlatEntityMapsOrThrow({ - flatEntity: fromEntity, - flatEntityMaps: initialDispatcher.deletedFlatEntityMaps, - }); + if (toMap.has(universalIdentifier)) { + continue; } + initialDispatcher.deletedFlatEntityMaps = + addFlatEntityToFlatEntityMapsOrThrow({ + flatEntity: fromEntity, + flatEntityMaps: initialDispatcher.deletedFlatEntityMaps, + }); } } for (const [universalIdentifier, toFlatEntity] of toMap) { - if (!fromMap.has(universalIdentifier)) { - initialDispatcher.createdFlatEntityMaps = - addFlatEntityToFlatEntityMapsOrThrow({ - flatEntity: toFlatEntity, - flatEntityMaps: initialDispatcher.createdFlatEntityMaps, - }); + if (fromMap.has(universalIdentifier)) { + continue; } + initialDispatcher.createdFlatEntityMaps = + addFlatEntityToFlatEntityMapsOrThrow({ + flatEntity: toFlatEntity, + flatEntityMaps: initialDispatcher.createdFlatEntityMaps, + }); } for (const [universalIdentifier, fromFlatEntity] of fromMap) { const toFlatEntity = toMap.get(universalIdentifier); - // TODO Perf improvement compare directly here to avoid mapping the whole workspaces + avoid compare duplication - // Would not have FromTo anymore but an PropertyUpdates[] - if (toFlatEntity) { - initialDispatcher.updatedFlatEntityMaps.from = - addFlatEntityToFlatEntityMapsOrThrow({ - flatEntity: fromFlatEntity, - flatEntityMaps: initialDispatcher.updatedFlatEntityMaps.from, - }); - - initialDispatcher.updatedFlatEntityMaps.to = - addFlatEntityToFlatEntityMapsOrThrow({ - flatEntity: toFlatEntity, - flatEntityMaps: initialDispatcher.updatedFlatEntityMaps.to, - }); + if (!isDefined(toFlatEntity)) { + continue; } + const updates = compareTwoFlatEntity({ + fromFlatEntity, + toFlatEntity, + propertiesToCompare: propertiesToCompare as unknown as Extract< + FlatEntityPropertiesToCompare, + keyof MetadataFlatEntity + >[], + propertiesToStringify: propertiesToStringify as unknown as Extract< + FlatEntityPropertiesToStringify, + keyof MetadataFlatEntity + >[], + }); + + if (updates.length === 0) { + continue; + } + + initialDispatcher.updatedFlatEntityMaps.byId[toFlatEntity.id] = { + updates, + }; } return initialDispatcher; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/get-metadata-empty-workspace-migration-action-record.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/get-metadata-empty-workspace-migration-action-record.util.ts new file mode 100644 index 0000000000..8dd7de36e5 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/get-metadata-empty-workspace-migration-action-record.util.ts @@ -0,0 +1,13 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataWorkspaceMigrationActionsRecord } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type'; + +export const getMetadataEmptyWorkspaceMigrationActionRecord = < + T extends AllMetadataName, +>( + _metadataName: T, +) => + ({ + created: [], + deleted: [], + updated: [], + }) as MetadataWorkspaceMigrationActionsRecord; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/cron-trigger-related-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/cron-trigger-related-flat-entity-maps.type.ts deleted file mode 100644 index 7ebf35d170..0000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/cron-trigger-related-flat-entity-maps.type.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; - -export type CronTriggerRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatServerlessFunctionMaps' ->; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type.ts similarity index 100% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type.ts diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/workspace-migration-v2-cron-trigger-action-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/workspace-migration-v2-cron-trigger-action-builder.service.ts index 70cdc20014..4eed6d8c45 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/workspace-migration-v2-cron-trigger-action-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/workspace-migration-v2-cron-trigger-action-builder.service.ts @@ -1,54 +1,34 @@ import { Injectable } from '@nestjs/common'; -import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; -import { compareTwoFlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/utils/compare-two-flat-cron-trigger.util'; -import { CronTriggerRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/cron-trigger-related-flat-entity-maps.type'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateCronTriggerAction, - WorkspaceMigrationCronTriggerActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatCronTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-cron-trigger-validator.service'; @Injectable() export class WorkspaceMigrationV2CronTriggerActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'cronTrigger', - FlatCronTrigger, - WorkspaceMigrationCronTriggerActionV2, - CronTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.cronTrigger > { constructor( private readonly flatCronTriggerValidatorService: FlatCronTriggerValidatorService, ) { - super('cronTrigger'); + super(ALL_METADATA_NAME.cronTrigger); } - protected async validateFlatEntityCreation({ - flatEntityToValidate: flatCronTriggerToValidate, - optimisticFlatEntityMaps: optimisticFlatCronTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatCronTrigger, - CronTriggerRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationCronTriggerActionV2, - FlatCronTrigger, - CronTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.cronTrigger, + 'created' > > { const validationResult = await this.flatCronTriggerValidatorService.validateFlatCronTriggerCreation( - { - flatCronTriggerToValidate, - optimisticFlatCronTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -58,6 +38,11 @@ export class WorkspaceMigrationV2CronTriggerActionsBuilderService extends Worksp }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityToValidate: flatCronTriggerToValidate, + } = args; + return { status: 'success', action: { @@ -68,26 +53,18 @@ export class WorkspaceMigrationV2CronTriggerActionsBuilderService extends Worksp }; } - protected async validateFlatEntityDeletion({ - flatEntityToValidate: flatCronTriggerToValidate, - optimisticFlatEntityMaps: optimisticFlatCronTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatCronTrigger, - CronTriggerRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationCronTriggerActionV2, - FlatCronTrigger, - CronTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.cronTrigger, + 'deleted' > > { const validationResult = - this.flatCronTriggerValidatorService.validateFlatCronTriggerDeletion({ - flatCronTriggerToValidate, - optimisticFlatCronTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }); + this.flatCronTriggerValidatorService.validateFlatCronTriggerDeletion( + args, + ); if (validationResult.errors.length > 0) { return { @@ -96,6 +73,11 @@ export class WorkspaceMigrationV2CronTriggerActionsBuilderService extends Worksp }; } + const { + flatEntityToValidate: flatCronTriggerToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -106,36 +88,16 @@ export class WorkspaceMigrationV2CronTriggerActionsBuilderService extends Worksp }; } - protected async validateFlatEntityUpdate({ - flatEntityUpdate: { from: fromFlatCronTrigger, to: toFlatCronTrigger }, - optimisticFlatEntityMaps: optimisticFlatCronTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityUpdateValidationArgs< - FlatCronTrigger, - CronTriggerRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationCronTriggerActionV2, - FlatCronTrigger, - CronTriggerRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.cronTrigger, + 'updated' + > > { - const cronTriggerUpdatedProperties = compareTwoFlatCronTrigger({ - fromFlatCronTrigger, - toFlatCronTrigger, - }); - - if (cronTriggerUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = - this.flatCronTriggerValidatorService.validateFlatCronTriggerUpdate({ - flatCronTriggerToValidate: toFlatCronTrigger, - optimisticFlatCronTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }); + this.flatCronTriggerValidatorService.validateFlatCronTriggerUpdate(args); if (validationResult.errors.length > 0) { return { @@ -143,11 +105,16 @@ export class WorkspaceMigrationV2CronTriggerActionsBuilderService extends Worksp ...validationResult, }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; const updateCronTriggerAction: UpdateCronTriggerAction = { type: 'update_cron_trigger', - cronTriggerId: toFlatCronTrigger.id, - updates: cronTriggerUpdatedProperties, + cronTriggerId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/database-event-trigger-related-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/database-event-trigger-related-flat-entity-maps.type.ts deleted file mode 100644 index c29c2306db..0000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/database-event-trigger-related-flat-entity-maps.type.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; - -export type DatabaseEventTriggerRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatServerlessFunctionMaps' ->; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type.ts similarity index 58% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type.ts index 3cfdd0dcc3..d8657b7927 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type.ts @@ -1,6 +1,5 @@ -import { type FlatDatabaseEventTriggerPropertiesToCompare } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger-properties-to-compare.type'; import { type FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; export type CreateDatabaseEventTriggerAction = { type: 'create_database_event_trigger'; @@ -10,14 +9,7 @@ export type CreateDatabaseEventTriggerAction = { export type UpdateDatabaseEventTriggerAction = { type: 'update_database_event_trigger'; databaseEventTriggerId: string; - updates: Array< - { - [P in FlatDatabaseEventTriggerPropertiesToCompare]: PropertyUpdate< - FlatDatabaseEventTrigger, - P - >; - }[FlatDatabaseEventTriggerPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'databaseEventTrigger'>; }; export type DeleteDatabaseEventTriggerAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/workspace-migration-v2-database-event-trigger-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/workspace-migration-v2-database-event-trigger-actions-builder.service.ts index cd1eccd069..ba2fd75975 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/workspace-migration-v2-database-event-trigger-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/workspace-migration-v2-database-event-trigger-actions-builder.service.ts @@ -1,54 +1,36 @@ import { Injectable } from '@nestjs/common'; -import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; -import { compareTwoFlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/utils/compare-two-flat-database-event-trigger.util'; -import { DatabaseEventTriggerRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/database-event-trigger-related-flat-entity-maps.type'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateDatabaseEventTriggerAction, - WorkspaceMigrationDatabaseEventTriggerActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatDatabaseEventTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-database-event-trigger-validator.service'; @Injectable() export class WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'databaseEventTrigger', - FlatDatabaseEventTrigger, - WorkspaceMigrationDatabaseEventTriggerActionV2, - DatabaseEventTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.databaseEventTrigger > { constructor( private readonly flatDatabaseEventTriggerValidatorService: FlatDatabaseEventTriggerValidatorService, ) { - super('databaseEventTrigger'); + super(ALL_METADATA_NAME.databaseEventTrigger); } - protected async validateFlatEntityCreation({ - flatEntityToValidate: flatDatabaseEventTriggerToValidate, - optimisticFlatEntityMaps: optimisticFlatDatabaseEventTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatDatabaseEventTrigger, - DatabaseEventTriggerRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.databaseEventTrigger + >, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationDatabaseEventTriggerActionV2, - FlatDatabaseEventTrigger, - DatabaseEventTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.databaseEventTrigger, + 'created' > > { const validationResult = await this.flatDatabaseEventTriggerValidatorService.validateFlatDatabaseEventTriggerCreation( - { - flatDatabaseEventTriggerToValidate, - optimisticFlatDatabaseEventTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -58,6 +40,11 @@ export class WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService exten }; } + const { + flatEntityToValidate: flatDatabaseEventTriggerToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -68,27 +55,19 @@ export class WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService exten }; } - protected async validateFlatEntityDeletion({ - flatEntityToValidate: flatDatabaseEventTriggerToValidate, - optimisticFlatEntityMaps: optimisticFlatDatabaseEventTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatDatabaseEventTrigger, - DatabaseEventTriggerRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.databaseEventTrigger + >, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationDatabaseEventTriggerActionV2, - FlatDatabaseEventTrigger, - DatabaseEventTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.databaseEventTrigger, + 'deleted' > > { const validationResult = this.flatDatabaseEventTriggerValidatorService.validateFlatDatabaseEventTriggerDeletion( - { - flatDatabaseEventTriggerToValidate, - optimisticFlatDatabaseEventTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -98,6 +77,11 @@ export class WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService exten }; } + const { + flatEntityToValidate: flatDatabaseEventTriggerToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -108,41 +92,19 @@ export class WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService exten }; } - protected async validateFlatEntityUpdate({ - flatEntityUpdate: { - from: fromFlatDatabaseEventTrigger, - to: toFlatDatabaseEventTrigger, - }, - optimisticFlatEntityMaps: optimisticFlatDatabaseEventTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityUpdateValidationArgs< - FlatDatabaseEventTrigger, - DatabaseEventTriggerRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationDatabaseEventTriggerActionV2, - FlatDatabaseEventTrigger, - DatabaseEventTriggerRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.databaseEventTrigger + >, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.databaseEventTrigger, + 'updated' + > > { - const databaseEventTriggerUpdatedProperties = - compareTwoFlatDatabaseEventTrigger({ - fromFlatDatabaseEventTrigger, - toFlatDatabaseEventTrigger, - }); - - if (databaseEventTriggerUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = this.flatDatabaseEventTriggerValidatorService.validateFlatDatabaseEventTriggerUpdate( - { - flatDatabaseEventTriggerToValidate: toFlatDatabaseEventTrigger, - optimisticFlatDatabaseEventTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -152,10 +114,16 @@ export class WorkspaceMigrationV2DatabaseEventTriggerActionsBuilderService exten }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; + const updateDatabaseEventTriggerAction: UpdateDatabaseEventTriggerAction = { type: 'update_database_event_trigger', - databaseEventTriggerId: toFlatDatabaseEventTrigger.id, - updates: databaseEventTriggerUpdatedProperties, + databaseEventTriggerId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2.ts similarity index 59% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2.ts index f60a55f9ed..8f7439eecd 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2.ts @@ -1,6 +1,5 @@ -import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; export type CreateFieldAction = { type: 'create_field'; @@ -12,14 +11,7 @@ export type UpdateFieldAction = { type: 'update_field'; fieldMetadataId: string; objectMetadataId: string; - updates: Array< - { - [P in FlatFieldMetadataPropertiesToCompare]: PropertyUpdate< - FlatFieldMetadata, - P - >; - }[FlatFieldMetadataPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'fieldMetadata'>; }; export type DeleteFieldAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/workspace-migration-v2-field-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/workspace-migration-v2-field-actions-builder.service.ts index 06a27d006f..c47474ec24 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/workspace-migration-v2-field-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/workspace-migration-v2-field-actions-builder.service.ts @@ -2,65 +2,39 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; -import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { compareTwoFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateFieldAction, - WorkspaceMigrationFieldActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatFieldMetadataValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service'; -export type FieldMetadataRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatObjectMetadataMaps' ->; @Injectable() export class WorkspaceMigrationV2FieldActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'fieldMetadata', - FlatFieldMetadata, - WorkspaceMigrationFieldActionV2, - FieldMetadataRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.fieldMetadata > { constructor( private readonly flatFieldValidatorService: FlatFieldMetadataValidatorService, ) { - super('fieldMetadata'); + super(ALL_METADATA_NAME.fieldMetadata); } - protected async validateFlatEntityCreation({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatFieldMetadataToValidate, - optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, - workspaceId, - remainingFlatEntityMapsToValidate, - }: FlatEntityValidationArgs< - FlatFieldMetadata, - FieldMetadataRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationFieldActionV2, - FlatFieldMetadata, - FieldMetadataRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.fieldMetadata, + 'created' > > { const validationResult = - await this.flatFieldValidatorService.validateFlatFieldMetadataCreation({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - workspaceId, - remainingFlatEntityMapsToValidate, - }); + await this.flatFieldValidatorService.validateFlatFieldMetadataCreation( + args, + ); if (validationResult.errors.length > 0) { return { @@ -69,6 +43,11 @@ export class WorkspaceMigrationV2FieldActionsBuilderService extends WorkspaceEnt }; } + const { + flatEntityToValidate: flatFieldMetadataToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatObjectMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityId: flatFieldMetadataToValidate.objectMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, @@ -100,28 +79,16 @@ export class WorkspaceMigrationV2FieldActionsBuilderService extends WorkspaceEnt }; } - protected async validateFlatEntityDeletion({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatFieldMetadataToValidate, - optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, - workspaceId, - }: FlatEntityValidationArgs< - FlatFieldMetadata, - FieldMetadataRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationFieldActionV2, - FlatFieldMetadata, - FieldMetadataRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.fieldMetadata, + 'deleted' > > { const validationResult = - this.flatFieldValidatorService.validateFlatFieldMetadataDeletion({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, - workspaceId, - }); + this.flatFieldValidatorService.validateFlatFieldMetadataDeletion(args); if (validationResult.errors.length > 0) { return { @@ -130,6 +97,11 @@ export class WorkspaceMigrationV2FieldActionsBuilderService extends WorkspaceEnt }; } + const { + flatEntityToValidate: flatFieldMetadataToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatFieldMetadataToValidate.objectMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, @@ -161,38 +133,20 @@ export class WorkspaceMigrationV2FieldActionsBuilderService extends WorkspaceEnt }; } - protected async validateFlatEntityUpdate({ - dependencyOptimisticFlatEntityMaps, - flatEntityUpdate: { from: fromFlatFieldMetadata, to: toFlatFieldMetadata }, - optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, - workspaceId, - }: FlatEntityUpdateValidationArgs< - FlatFieldMetadata, - FieldMetadataRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationFieldActionV2, - FlatFieldMetadata, - FieldMetadataRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.fieldMetadata + >, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.fieldMetadata, + 'updated' + > > { - const flatFieldMetadataUpdatedProperties = compareTwoFlatFieldMetadata({ - fromFlatFieldMetadata, - toFlatFieldMetadata, - }); - - if (flatFieldMetadataUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = - await this.flatFieldValidatorService.validateFlatFieldMetadataUpdate({ - dependencyOptimisticFlatEntityMaps, - flatFieldMetadataToValidate: toFlatFieldMetadata, - optimisticFlatFieldMetadataMaps, - workspaceId, - }); + await this.flatFieldValidatorService.validateFlatFieldMetadataUpdate( + args, + ); if (validationResult.errors.length > 0) { return { @@ -201,11 +155,23 @@ export class WorkspaceMigrationV2FieldActionsBuilderService extends WorkspaceEnt }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps, + } = args; + + const flatFieldMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId: flatEntityId, + flatEntityMaps: optimisticFlatEntityMaps, + }); + const updateFieldAction: UpdateFieldAction = { type: 'update_field', - fieldMetadataId: toFlatFieldMetadata.id, - objectMetadataId: toFlatFieldMetadata.objectMetadataId, - updates: flatFieldMetadataUpdatedProperties, + fieldMetadataId: flatEntityId, + objectMetadataId: flatFieldMetadata.objectMetadataId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/types/workspace-migration-index-action-v2.ts similarity index 100% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/types/workspace-migration-index-action-v2.ts diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts index 6dc9f4f8b0..6e82178836 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts @@ -1,60 +1,39 @@ import { Injectable } from '@nestjs/common'; +import { t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; -import { FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; -import { compareTwoFlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { WorkspaceMigrationIndexActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMapsExceptionCode } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatIndexValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; -export type IndexRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatFieldMetadataMaps' | 'flatObjectMetadataMaps' ->; @Injectable() export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'index', - FlatIndexMetadata, - WorkspaceMigrationIndexActionV2, - IndexRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.index > { constructor( private readonly flatIndexValidatorService: FlatIndexValidatorService, ) { - super('index'); + super(ALL_METADATA_NAME.index); } - protected async validateFlatEntityCreation({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatIndexToValidate, - optimisticFlatEntityMaps: optimisticFlatIndexMaps, - }: FlatEntityValidationArgs< - FlatIndexMetadata, - IndexRelatedFlatEntityMaps - >): Promise< - FlatEntityValidationReturnType< - WorkspaceMigrationIndexActionV2, - FlatIndexMetadata, - IndexRelatedFlatEntityMaps - > + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< + FlatEntityValidationReturnType > { const validationResult = - this.flatIndexValidatorService.validateFlatIndexCreation({ - dependencyOptimisticFlatEntityMaps, - flatIndexToValidate, - optimisticFlatIndexMaps, - }); + this.flatIndexValidatorService.validateFlatIndexCreation(args); if (validationResult.errors.length > 0) { return { @@ -63,6 +42,11 @@ export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEnt }; } + const { + flatEntityToValidate: flatIndexToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatObjectMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityId: flatIndexToValidate.objectMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, @@ -94,26 +78,13 @@ export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEnt }; } - protected async validateFlatEntityDeletion({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatIndexToValidate, - optimisticFlatEntityMaps: optimisticFlatIndexMaps, - }: FlatEntityValidationArgs< - FlatIndexMetadata, - IndexRelatedFlatEntityMaps - >): Promise< - FlatEntityValidationReturnType< - WorkspaceMigrationIndexActionV2, - FlatIndexMetadata, - IndexRelatedFlatEntityMaps - > + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< + FlatEntityValidationReturnType > { const validationResult = - this.flatIndexValidatorService.validateFlatIndexDeletion({ - dependencyOptimisticFlatEntityMaps, - flatIndexToValidate, - optimisticFlatIndexMaps, - }); + this.flatIndexValidatorService.validateFlatIndexDeletion(args); if (validationResult.errors.length > 0) { return { @@ -122,6 +93,11 @@ export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEnt }; } + const { + flatEntityToValidate: flatIndexToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatIndexToValidate.objectMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, @@ -154,34 +130,41 @@ export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEnt } protected async validateFlatEntityUpdate({ - dependencyOptimisticFlatEntityMaps, - flatEntityUpdate: { from: fromFlatIndex, to: toFlatIndex }, + flatEntityId, + flatEntityUpdates, optimisticFlatEntityMaps: optimisticFlatIndexMaps, - }: FlatEntityUpdateValidationArgs< - FlatIndexMetadata, - IndexRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationIndexActionV2, - FlatIndexMetadata, - IndexRelatedFlatEntityMaps - > - | undefined + dependencyOptimisticFlatEntityMaps, + buildOptions, + workspaceId, + }: FlatEntityUpdateValidationArgs): Promise< + FlatEntityValidationReturnType > { - const indexUpdatedProperties = compareTwoFlatIndexMetadata({ - fromFlatIndexMetadata: fromFlatIndex, - toFlatIndexMetadata: toFlatIndex, + const flatEntity = findFlatEntityByIdInFlatEntityMaps({ + flatEntityId, + flatEntityMaps: optimisticFlatIndexMaps, }); - if (indexUpdatedProperties.length === 0) { - return undefined; + if (!isDefined(flatEntity)) { + return { + status: 'fail', + type: 'delete_index', + flatEntityMinimalInformation: {}, + errors: [ + { + code: FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND, + message: t`Index to delete not found`, + }, + ], + }; } - const deletionValidationResult = this.flatIndexValidatorService.validateFlatIndexDeletion({ + buildOptions, dependencyOptimisticFlatEntityMaps, - flatIndexToValidate: fromFlatIndex, - optimisticFlatIndexMaps, + optimisticFlatEntityMaps: optimisticFlatIndexMaps, + workspaceId, + flatEntityToValidate: flatEntity, + remainingFlatEntityMapsToValidate: EMPTY_FLAT_ENTITY_MAPS, }); if (deletionValidationResult.errors.length > 0) { @@ -191,14 +174,24 @@ export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEnt }; } + const updatedFlatIndex = { + ...flatEntity, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ + updates: flatEntityUpdates, + }), + }; + const creationValidationResult = this.flatIndexValidatorService.validateFlatIndexCreation({ + buildOptions, dependencyOptimisticFlatEntityMaps, - flatIndexToValidate: toFlatIndex, - optimisticFlatIndexMaps: deleteFlatEntityFromFlatEntityMapsOrThrow({ - entityToDeleteId: fromFlatIndex.id, + workspaceId, + flatEntityToValidate: updatedFlatIndex, + optimisticFlatEntityMaps: deleteFlatEntityFromFlatEntityMapsOrThrow({ + entityToDeleteId: flatEntity.id, flatEntityMaps: optimisticFlatIndexMaps, }), + remainingFlatEntityMapsToValidate: EMPTY_FLAT_ENTITY_MAPS, }); if (creationValidationResult.errors.length > 0) { @@ -213,11 +206,11 @@ export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEnt action: [ { type: 'delete_index', - flatIndexMetadataId: fromFlatIndex.id, + flatIndexMetadataId: flatEntity.id, }, { type: 'create_index', - flatIndexMetadata: toFlatIndex, + flatIndexMetadata: updatedFlatIndex, }, ], dependencyOptimisticFlatEntityMaps, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2.ts similarity index 64% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2.ts index 7b6cfee58a..53d1be8fb9 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2.ts @@ -1,7 +1,6 @@ +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { type FlatObjectMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; export type CreateObjectAction = { type: 'create_object'; @@ -9,19 +8,10 @@ export type CreateObjectAction = { flatFieldMetadatas: FlatFieldMetadata[]; }; -export type FlatObjectPropertiesUpdates = Array< - { - [P in FlatObjectMetadataPropertiesToCompare]: PropertyUpdate< - FlatObjectMetadata, - P - >; - }[FlatObjectMetadataPropertiesToCompare] ->; - export type UpdateObjectAction = { type: 'update_object'; objectMetadataId: string; - updates: FlatObjectPropertiesUpdates; + updates: FlatEntityPropertiesUpdates<'objectMetadata'>; }; export type DeleteObjectAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/workspace-migration-v2-object-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/workspace-migration-v2-object-actions-builder.service.ts index 1816d7f12f..03f6b42fd7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/workspace-migration-v2-object-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/workspace-migration-v2-object-actions-builder.service.ts @@ -1,59 +1,35 @@ import { Injectable } from '@nestjs/common'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { compareTwoFlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/utils/compare-two-flat-object-metadata.util'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateObjectAction, - WorkspaceMigrationObjectActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { UpdateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatObjectMetadataValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-object-metadata-validator.service'; -export type ObjectMetadataRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatFieldMetadataMaps' ->; @Injectable() export class WorkspaceMigrationV2ObjectActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'objectMetadata', - FlatObjectMetadata, - WorkspaceMigrationObjectActionV2, - ObjectMetadataRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.objectMetadata > { constructor( private readonly flatObjectValidatorService: FlatObjectMetadataValidatorService, ) { - super('objectMetadata'); + super(ALL_METADATA_NAME.objectMetadata); } - protected async validateFlatEntityCreation({ - flatEntityToValidate: flatObjectMetadataToValidate, - optimisticFlatEntityMaps: optimisticFlatObjectMetadataMaps, - buildOptions, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatObjectMetadata, - ObjectMetadataRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationObjectActionV2, - FlatObjectMetadata, - ObjectMetadataRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.objectMetadata, + 'created' > > { const validationResult = - await this.flatObjectValidatorService.validateFlatObjectMetadataCreation({ - buildOptions, - flatObjectMetadataToValidate, - optimisticFlatObjectMetadataMaps, - dependencyOptimisticFlatEntityMaps, - }); + await this.flatObjectValidatorService.validateFlatObjectMetadataCreation( + args, + ); if (validationResult.errors.length > 0) { return { @@ -62,6 +38,11 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService extends WorkspaceEn }; } + const { + flatEntityToValidate: flatObjectMetadataToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -73,28 +54,16 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService extends WorkspaceEn }; } - protected async validateFlatEntityDeletion({ - buildOptions, - flatEntityToValidate: flatObjectMetadataToValidate, - optimisticFlatEntityMaps: optimisticFlatObjectMetadataMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatObjectMetadata, - ObjectMetadataRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationObjectActionV2, - FlatObjectMetadata, - ObjectMetadataRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.objectMetadata, + 'deleted' > > { const validationResult = - this.flatObjectValidatorService.validateFlatObjectMetadataDeletion({ - buildOptions, - flatObjectMetadataToValidate, - optimisticFlatObjectMetadataMaps, - dependencyOptimisticFlatEntityMaps, - }); + this.flatObjectValidatorService.validateFlatObjectMetadataDeletion(args); if (validationResult.errors.length > 0) { return { @@ -103,6 +72,11 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService extends WorkspaceEn }; } + const { + flatEntityToValidate: flatObjectMetadataToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -113,42 +87,18 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService extends WorkspaceEn }; } - protected async validateFlatEntityUpdate({ - buildOptions, - flatEntityUpdate: { - from: fromFlatObjectMetadata, - to: toFlatObjectMetadata, - }, - optimisticFlatEntityMaps: optimisticFlatObjectMetadataMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityUpdateValidationArgs< - FlatObjectMetadata, - ObjectMetadataRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationObjectActionV2, - FlatObjectMetadata, - ObjectMetadataRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.objectMetadata + >, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.objectMetadata, + 'updated' + > > { - const flatObjectPropertiesUpdates = compareTwoFlatObjectMetadata({ - fromFlatObjectMetadata, - toFlatObjectMetadata, - }); - - if (flatObjectPropertiesUpdates.length === 0) { - return undefined; - } - const validationResult = - this.flatObjectValidatorService.validateFlatObjectMetadataUpdate({ - buildOptions, - flatObjectMetadataToValidate: toFlatObjectMetadata, - optimisticFlatObjectMetadataMaps, - dependencyOptimisticFlatEntityMaps, - flatObjectPropertiesUpdates: flatObjectPropertiesUpdates, - }); + this.flatObjectValidatorService.validateFlatObjectMetadataUpdate(args); if (validationResult.errors.length > 0) { return { @@ -157,10 +107,16 @@ export class WorkspaceMigrationV2ObjectActionsBuilderService extends WorkspaceEn }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; + const updateObjectAction: UpdateObjectAction = { type: 'update_object', - objectMetadataId: toFlatObjectMetadata.id, - updates: flatObjectPropertiesUpdates, + objectMetadataId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/route-trigger-related-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/route-trigger-related-flat-entity-maps.type.ts deleted file mode 100644 index 7da54c29f6..0000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/route-trigger-related-flat-entity-maps.type.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; - -export type RouteTriggerRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatServerlessFunctionMaps' ->; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type.ts similarity index 55% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type.ts index 5c6f47ff9b..0b95159610 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type.ts @@ -1,6 +1,5 @@ -import { type FlatRouteTriggerPropertiesToCompare } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; export type CreateRouteTriggerAction = { type: 'create_route_trigger'; @@ -10,14 +9,7 @@ export type CreateRouteTriggerAction = { export type UpdateRouteTriggerAction = { type: 'update_route_trigger'; routeTriggerId: string; - updates: Array< - { - [P in FlatRouteTriggerPropertiesToCompare]: PropertyUpdate< - FlatRouteTrigger, - P - >; - }[FlatRouteTriggerPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'routeTrigger'>; }; export type DeleteRouteTriggerAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/workspace-migration-v2-route-trigger-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/workspace-migration-v2-route-trigger-actions-builder.service.ts index 641a3e2920..3c73676eb7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/workspace-migration-v2-route-trigger-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/workspace-migration-v2-route-trigger-actions-builder.service.ts @@ -1,54 +1,34 @@ import { Injectable } from '@nestjs/common'; -import { FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; -import { compareTwoFlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/utils/compare-two-flat-route-trigger.util'; -import { RouteTriggerRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/route-trigger-related-flat-entity-maps.type'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateRouteTriggerAction, - WorkspaceMigrationRouteTriggerActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatRouteTriggerValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-route-trigger-validator.service'; @Injectable() export class WorkspaceMigrationV2RouteTriggerActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'routeTrigger', - FlatRouteTrigger, - WorkspaceMigrationRouteTriggerActionV2, - RouteTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.routeTrigger > { constructor( private readonly flatRouteTriggerValidatorService: FlatRouteTriggerValidatorService, ) { - super('routeTrigger'); + super(ALL_METADATA_NAME.routeTrigger); } - protected async validateFlatEntityCreation({ - flatEntityToValidate: flatRouteTriggerToValidate, - optimisticFlatEntityMaps: optimisticFlatRouteTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatRouteTrigger, - RouteTriggerRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationRouteTriggerActionV2, - FlatRouteTrigger, - RouteTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.routeTrigger, + 'created' > > { const validationResult = await this.flatRouteTriggerValidatorService.validateFlatRouteTriggerCreation( - { - flatRouteTriggerToValidate, - optimisticFlatRouteTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -58,6 +38,11 @@ export class WorkspaceMigrationV2RouteTriggerActionsBuilderService extends Works }; } + const { + flatEntityToValidate: flatRouteTriggerToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -68,26 +53,18 @@ export class WorkspaceMigrationV2RouteTriggerActionsBuilderService extends Works }; } - protected async validateFlatEntityDeletion({ - flatEntityToValidate: flatRouteTriggerToValidate, - optimisticFlatEntityMaps: optimisticFlatRouteTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs< - FlatRouteTrigger, - RouteTriggerRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationRouteTriggerActionV2, - FlatRouteTrigger, - RouteTriggerRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.routeTrigger, + 'deleted' > > { const validationResult = - this.flatRouteTriggerValidatorService.validateFlatRouteTriggerDeletion({ - flatRouteTriggerToValidate, - optimisticFlatRouteTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }); + this.flatRouteTriggerValidatorService.validateFlatRouteTriggerDeletion( + args, + ); if (validationResult.errors.length > 0) { return { @@ -96,6 +73,11 @@ export class WorkspaceMigrationV2RouteTriggerActionsBuilderService extends Works }; } + const { + flatEntityToValidate: flatRouteTriggerToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -106,36 +88,18 @@ export class WorkspaceMigrationV2RouteTriggerActionsBuilderService extends Works }; } - protected async validateFlatEntityUpdate({ - flatEntityUpdate: { from: fromFlatRouteTrigger, to: toFlatRouteTrigger }, - optimisticFlatEntityMaps: optimisticFlatRouteTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityUpdateValidationArgs< - FlatRouteTrigger, - RouteTriggerRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationRouteTriggerActionV2, - FlatRouteTrigger, - RouteTriggerRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.routeTrigger, + 'updated' + > > { - const routeTriggerUpdatedProperties = compareTwoFlatRouteTrigger({ - fromFlatRouteTrigger, - toFlatRouteTrigger, - }); - - if (routeTriggerUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = - this.flatRouteTriggerValidatorService.validateFlatRouteTriggerUpdate({ - flatRouteTriggerToValidate: toFlatRouteTrigger, - optimisticFlatRouteTriggerMaps, - dependencyOptimisticFlatEntityMaps, - }); + this.flatRouteTriggerValidatorService.validateFlatRouteTriggerUpdate( + args, + ); if (validationResult.errors.length > 0) { return { @@ -144,10 +108,16 @@ export class WorkspaceMigrationV2RouteTriggerActionsBuilderService extends Works }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; + const updateRouteTriggerAction: UpdateRouteTriggerAction = { type: 'update_route_trigger', - routeTriggerId: toFlatRouteTrigger.id, - updates: routeTriggerUpdatedProperties, + routeTriggerId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type.ts similarity index 66% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type.ts index 92f4cd00dc..152166cf75 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type.ts @@ -1,6 +1,5 @@ -import { type FlatServerlessFunctionPropertiesToCompare } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; import { type ServerlessFunctionCode } from 'src/engine/metadata-modules/serverless-function/types/serverless-function-code.type'; export type CreateServerlessFunctionAction = { @@ -12,14 +11,7 @@ export type UpdateServerlessFunctionAction = { type: 'update_serverless_function'; serverlessFunctionId: string; code?: ServerlessFunctionCode; - updates: Array< - { - [P in FlatServerlessFunctionPropertiesToCompare]: PropertyUpdate< - FlatServerlessFunction, - P - >; - }[FlatServerlessFunctionPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'serverlessFunction'>; }; export type DeleteServerlessFunctionAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/workspace-migration-v2-serverless-function-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/workspace-migration-v2-serverless-function-actions-builder.service.ts index a2f338d627..ffe4d966fb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/workspace-migration-v2-serverless-function-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/workspace-migration-v2-serverless-function-actions-builder.service.ts @@ -1,48 +1,36 @@ import { Injectable } from '@nestjs/common'; -import { FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; -import { compareTwoFlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/utils/compare-two-flat-serverless-function.util'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateServerlessFunctionAction, - WorkspaceMigrationServerlessFunctionActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { UpdateServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatServerlessFunctionValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-serverless-function-validator.service'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class WorkspaceMigrationV2ServerlessFunctionActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'serverlessFunction', - FlatServerlessFunction, - WorkspaceMigrationServerlessFunctionActionV2, - undefined + typeof ALL_METADATA_NAME.serverlessFunction > { constructor( private readonly flatServerlessFunctionValidatorService: FlatServerlessFunctionValidatorService, ) { - super('serverlessFunction'); + super(ALL_METADATA_NAME.serverlessFunction); } - protected async validateFlatEntityCreation({ - flatEntityToValidate: flatServerlessFunctionToValidate, - optimisticFlatEntityMaps: optimisticFlatServerlessFunctionMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationServerlessFunctionActionV2, - FlatServerlessFunction + typeof ALL_METADATA_NAME.serverlessFunction, + 'created' > > { const validationResult = await this.flatServerlessFunctionValidatorService.validateFlatServerlessFunctionCreation( - { - flatServerlessFunctionToValidate, - optimisticFlatServerlessFunctionMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -52,6 +40,11 @@ export class WorkspaceMigrationV2ServerlessFunctionActionsBuilderService extends }; } + const { + flatEntityToValidate: flatServerlessFunctionToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -62,22 +55,17 @@ export class WorkspaceMigrationV2ServerlessFunctionActionsBuilderService extends }; } - protected async validateFlatEntityDeletion({ - flatEntityToValidate: flatServerlessFunctionToValidate, - optimisticFlatEntityMaps: optimisticFlatServerlessFunctionMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityValidationArgs): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationServerlessFunctionActionV2, - FlatServerlessFunction + typeof ALL_METADATA_NAME.serverlessFunction, + 'deleted' > > { const validationResult = this.flatServerlessFunctionValidatorService.validateFlatServerlessFunctionDeletion( - { - flatServerlessFunctionToValidate, - optimisticFlatServerlessFunctionMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -87,6 +75,11 @@ export class WorkspaceMigrationV2ServerlessFunctionActionsBuilderService extends }; } + const { + flatEntityToValidate: flatServerlessFunctionToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + return { status: 'success', action: { @@ -97,36 +90,19 @@ export class WorkspaceMigrationV2ServerlessFunctionActionsBuilderService extends }; } - protected async validateFlatEntityUpdate({ - flatEntityUpdate: { - from: fromFlatServerlessFunction, - to: toFlatServerlessFunction, - }, - optimisticFlatEntityMaps: optimisticFlatServerlessFunctionMaps, - dependencyOptimisticFlatEntityMaps, - }: FlatEntityUpdateValidationArgs): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationServerlessFunctionActionV2, - FlatServerlessFunction - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.serverlessFunction + >, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.serverlessFunction, + 'updated' + > > { - const serverlessFunctionUpdatedProperties = - compareTwoFlatServerlessFunction({ - fromFlatServerlessFunction, - toFlatServerlessFunction, - }); - - if (serverlessFunctionUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = this.flatServerlessFunctionValidatorService.validateFlatServerlessFunctionUpdate( - { - flatServerlessFunctionToValidate: toFlatServerlessFunction, - optimisticFlatServerlessFunctionMaps, - }, + args, ); if (validationResult.errors.length > 0) { @@ -136,11 +112,29 @@ export class WorkspaceMigrationV2ServerlessFunctionActionsBuilderService extends }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps, + } = args; + + const existingEntity = findFlatEntityByIdInFlatEntityMapsOrThrow({ + flatEntityId, + flatEntityMaps: optimisticFlatEntityMaps, + }); + const updatedEntity = { + ...existingEntity, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ + updates: flatEntityUpdates, + }), + }; + const updateServerlessFunctionAction: UpdateServerlessFunctionAction = { type: 'update_serverless_function', - serverlessFunctionId: toFlatServerlessFunction.id, - updates: serverlessFunctionUpdatedProperties, - code: toFlatServerlessFunction.code, + serverlessFunctionId: flatEntityId, + updates: flatEntityUpdates, + code: updatedEntity.code, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts index f31a72731f..9464a1d777 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts @@ -1,6 +1,6 @@ import { type MessageDescriptor } from '@lingui/core'; -import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; +import { type FlatEntity } from 'src/engine/metadata-modules/flat-entity/types/flat-entity.type'; import { type WorkspaceMigrationActionTypeV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; export type FlatEntityValidationError = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/view-field-related-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/view-field-related-flat-entity-maps.type.ts deleted file mode 100644 index e595a226b7..0000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/view-field-related-flat-entity-maps.type.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; - -export type ViewFieldRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatViewMaps' | 'flatFieldMetadataMaps' | 'flatObjectMetadataMaps' ->; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type.ts similarity index 60% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type.ts index 064b290c75..2dc0bb1adc 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type.ts @@ -1,6 +1,5 @@ -import { type FlatViewFieldPropertiesToCompare } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; export type CreateViewFieldAction = { type: 'create_view_field'; @@ -10,11 +9,7 @@ export type CreateViewFieldAction = { export type UpdateViewFieldAction = { type: 'update_view_field'; viewFieldId: string; - updates: Array< - { - [P in FlatViewFieldPropertiesToCompare]: PropertyUpdate; - }[FlatViewFieldPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'viewField'>; }; export type DeleteViewFieldAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service.ts index 33ffcf13a2..82688e89d2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service.ts @@ -2,57 +2,37 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; -import { FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; -import { compareTwoFlatViewField } from 'src/engine/metadata-modules/flat-view-field/utils/compare-two-flat-view-field.util'; -import { ViewFieldRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/view-field-related-flat-entity-maps.type'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateViewFieldAction, - WorkspaceMigrationViewFieldActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { UpdateViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatViewFieldValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service'; @Injectable() export class WorkspaceMigrationV2ViewFieldActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'viewField', - FlatViewField, - WorkspaceMigrationViewFieldActionV2, - ViewFieldRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.viewField > { constructor( private readonly flatViewFieldValidatorService: FlatViewFieldValidatorService, ) { - super('viewField'); + super(ALL_METADATA_NAME.viewField); } - protected async validateFlatEntityCreation({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatViewFieldToValidate, - optimisticFlatEntityMaps: optimisticFlatViewFieldMaps, - }: FlatEntityValidationArgs< - FlatViewField, - ViewFieldRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationViewFieldActionV2, - FlatViewField, - ViewFieldRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.viewField, + 'created' > > { const validationResult = - this.flatViewFieldValidatorService.validateFlatViewFieldCreation({ - dependencyOptimisticFlatEntityMaps, - flatViewFieldToValidate, - optimisticFlatViewFieldMaps, - }); + this.flatViewFieldValidatorService.validateFlatViewFieldCreation(args); if (validationResult.errors.length > 0) { return { @@ -61,6 +41,11 @@ export class WorkspaceMigrationV2ViewFieldActionsBuilderService extends Workspac }; } + const { + flatEntityToValidate: flatViewFieldToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatFieldMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityId: flatViewFieldToValidate.fieldMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, @@ -106,26 +91,16 @@ export class WorkspaceMigrationV2ViewFieldActionsBuilderService extends Workspac }; } - protected async validateFlatEntityDeletion({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatViewFieldToValidate, - optimisticFlatEntityMaps: optimisticFlatViewFieldMaps, - }: FlatEntityValidationArgs< - FlatViewField, - ViewFieldRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationViewFieldActionV2, - FlatViewField, - ViewFieldRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.viewField, + 'deleted' > > { const validationResult = - this.flatViewFieldValidatorService.validateFlatViewFieldDeletion({ - dependencyOptimisticFlatEntityMaps, - flatViewFieldToValidate, - optimisticFlatViewFieldMaps, - }); + this.flatViewFieldValidatorService.validateFlatViewFieldDeletion(args); if (validationResult.errors.length > 0) { return { @@ -134,6 +109,11 @@ export class WorkspaceMigrationV2ViewFieldActionsBuilderService extends Workspac }; } + const { + flatEntityToValidate: flatViewFieldToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatFieldMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatViewFieldToValidate.fieldMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, @@ -183,36 +163,16 @@ export class WorkspaceMigrationV2ViewFieldActionsBuilderService extends Workspac }; } - protected async validateFlatEntityUpdate({ - dependencyOptimisticFlatEntityMaps, - flatEntityUpdate: { from: fromFlatViewField, to: toFlatViewField }, - optimisticFlatEntityMaps: optimisticFlatViewFieldMaps, - }: FlatEntityUpdateValidationArgs< - FlatViewField, - ViewFieldRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationViewFieldActionV2, - FlatViewField, - ViewFieldRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.viewField, + 'updated' + > > { - const viewFieldUpdatedProperties = compareTwoFlatViewField({ - fromFlatViewField, - toFlatViewField, - }); - - if (viewFieldUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = - this.flatViewFieldValidatorService.validateFlatViewFieldUpdate({ - dependencyOptimisticFlatEntityMaps, - flatViewFieldToValidate: toFlatViewField, - optimisticFlatViewFieldMaps, - }); + this.flatViewFieldValidatorService.validateFlatViewFieldUpdate(args); if (validationResult.errors.length > 0) { return { @@ -221,10 +181,16 @@ export class WorkspaceMigrationV2ViewFieldActionsBuilderService extends Workspac }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; + const updateViewFieldAction: UpdateViewFieldAction = { type: 'update_view_field', - viewFieldId: toFlatViewField.id, - updates: viewFieldUpdatedProperties, + viewFieldId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type.ts deleted file mode 100644 index 463e27c238..0000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; - -export type ViewFilterRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatViewMaps' | 'flatFieldMetadataMaps' ->; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type.ts similarity index 59% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type.ts index 36905b544e..954895aafa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type.ts @@ -1,6 +1,5 @@ -import { type FlatViewFilterPropertiesToCompare } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; -import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; export type CreateViewFilterAction = { type: 'create_view_filter'; @@ -10,14 +9,7 @@ export type CreateViewFilterAction = { export type UpdateViewFilterAction = { type: 'update_view_filter'; viewFilterId: string; - updates: Array< - { - [P in FlatViewFilterPropertiesToCompare]: PropertyUpdate< - FlatViewFilter, - P - >; - }[FlatViewFilterPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'viewFilter'>; }; export type DeleteViewFilterAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/workspace-migration-v2-view-filter-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/workspace-migration-v2-view-filter-actions-builder.service.ts index 55f5385fad..81915da399 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/workspace-migration-v2-view-filter-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/workspace-migration-v2-view-filter-actions-builder.service.ts @@ -2,57 +2,37 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; -import { FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; -import { compareTwoFlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/utils/compare-two-flat-view-filter.util'; -import { ViewFilterRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateViewFilterAction, - WorkspaceMigrationViewFilterActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { UpdateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatViewFilterValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service'; @Injectable() export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'viewFilter', - FlatViewFilter, - WorkspaceMigrationViewFilterActionV2, - ViewFilterRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.viewFilter > { constructor( private readonly flatViewFilterValidatorService: FlatViewFilterValidatorService, ) { - super('viewFilter'); + super(ALL_METADATA_NAME.viewFilter); } - protected async validateFlatEntityCreation({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatViewFilterToValidate, - optimisticFlatEntityMaps: optimisticFlatViewFilterMaps, - }: FlatEntityValidationArgs< - FlatViewFilter, - ViewFilterRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationViewFilterActionV2, - FlatViewFilter, - ViewFilterRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.viewFilter, + 'created' > > { const validationResult = - this.flatViewFilterValidatorService.validateFlatViewFilterCreation({ - dependencyOptimisticFlatEntityMaps, - flatViewFilterToValidate, - optimisticFlatViewFilterMaps, - }); + this.flatViewFilterValidatorService.validateFlatViewFilterCreation(args); if (validationResult.errors.length > 0) { return { @@ -61,6 +41,11 @@ export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends Workspa }; } + const { + flatEntityToValidate: flatViewFilterToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatView = findFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityId: flatViewFilterToValidate.viewId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps, @@ -87,25 +72,16 @@ export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends Workspa }; } - protected async validateFlatEntityDeletion({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatViewFilterToValidate, - optimisticFlatEntityMaps: optimisticFlatViewFilterMaps, - }: FlatEntityValidationArgs< - FlatViewFilter, - ViewFilterRelatedFlatEntityMaps - >): Promise< + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< FlatEntityValidationReturnType< - WorkspaceMigrationViewFilterActionV2, - FlatViewFilter, - ViewFilterRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.viewFilter, + 'deleted' > > { const validationResult = - this.flatViewFilterValidatorService.validateFlatViewFilterDeletion({ - flatViewFilterToValidate, - optimisticFlatViewFilterMaps, - }); + this.flatViewFilterValidatorService.validateFlatViewFilterDeletion(args); if (validationResult.errors.length > 0) { return { @@ -114,6 +90,11 @@ export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends Workspa }; } + const { + flatEntityToValidate: flatViewFilterToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatView = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatViewFilterToValidate.viewId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps, @@ -144,36 +125,16 @@ export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends Workspa }; } - protected async validateFlatEntityUpdate({ - dependencyOptimisticFlatEntityMaps, - flatEntityUpdate: { from: fromFlatViewFilter, to: toFlatViewFilter }, - optimisticFlatEntityMaps: optimisticFlatViewFilterMaps, - }: FlatEntityUpdateValidationArgs< - FlatViewFilter, - ViewFilterRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationViewFilterActionV2, - FlatViewFilter, - ViewFilterRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs, + ): Promise< + FlatEntityValidationReturnType< + typeof ALL_METADATA_NAME.viewFilter, + 'updated' + > > { - const viewFilterUpdatedProperties = compareTwoFlatViewFilter({ - fromFlatViewFilter, - toFlatViewFilter, - }); - - if (viewFilterUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = - this.flatViewFilterValidatorService.validateFlatViewFilterUpdate({ - dependencyOptimisticFlatEntityMaps, - flatViewFilterToValidate: toFlatViewFilter, - optimisticFlatViewFilterMaps, - }); + this.flatViewFilterValidatorService.validateFlatViewFilterUpdate(args); if (validationResult.errors.length > 0) { return { @@ -182,10 +143,16 @@ export class WorkspaceMigrationV2ViewFilterActionsBuilderService extends Workspa }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; + const updateViewFilterAction: UpdateViewFilterAction = { type: 'update_view_filter', - viewFilterId: toFlatViewFilter.id, - updates: viewFilterUpdatedProperties, + viewFilterId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type.ts similarity index 50% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type.ts index 006915c7a9..866ac6d853 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type.ts @@ -1,12 +1,5 @@ -import { type FromTo } from 'twenty-shared/types'; - -import { type FlatViewPropertiesToCompare } from 'src/engine/metadata-modules/flat-view/types/flat-view-properties-to-compare.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; import { type FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; -import { type ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; - -export type FlatViewPropertyUpdate

= { - property: P; -} & FromTo; export type CreateViewAction = { type: 'create_view'; @@ -16,11 +9,7 @@ export type CreateViewAction = { export type UpdateViewAction = { type: 'update_view'; viewId: string; - updates: Array< - { - [P in FlatViewPropertiesToCompare]: FlatViewPropertyUpdate

; - }[FlatViewPropertiesToCompare] - >; + updates: FlatEntityPropertiesUpdates<'view'>; }; export type DeleteViewAction = { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service.ts index f0404ca642..ab5c0f2205 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service.ts @@ -2,58 +2,34 @@ import { Injectable } from '@nestjs/common'; import { isDefined } from 'twenty-shared/utils'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; -import { FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; -import { compareTwoFlatView } from 'src/engine/metadata-modules/flat-view/utils/compare-two-flat-view.util'; -import { - FlatEntityUpdateValidationArgs, - FlatEntityValidationArgs, - FlatEntityValidationReturnType, - WorkspaceEntityMigrationBuilderV2Service, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; -import { - UpdateViewAction, - WorkspaceMigrationViewActionV2, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { UpdateViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type'; +import { WorkspaceEntityMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; import { FlatViewValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service'; -export type ViewRelatedFlatEntityMaps = Pick< - AllFlatEntityMaps, - 'flatObjectMetadataMaps' ->; @Injectable() export class WorkspaceMigrationV2ViewActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< - 'view', - FlatView, - WorkspaceMigrationViewActionV2, - ViewRelatedFlatEntityMaps + typeof ALL_METADATA_NAME.view > { constructor( private readonly flatViewValidatorService: FlatViewValidatorService, ) { - super('view'); + super(ALL_METADATA_NAME.view); } - protected async validateFlatEntityCreation({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatViewToValidate, - optimisticFlatEntityMaps: optimisticFlatViewMaps, - }: FlatEntityValidationArgs): Promise< - FlatEntityValidationReturnType< - WorkspaceMigrationViewActionV2, - FlatView, - ViewRelatedFlatEntityMaps - > + protected async validateFlatEntityCreation( + args: FlatEntityValidationArgs, + ): Promise< + FlatEntityValidationReturnType > { const validationResult = - await this.flatViewValidatorService.validateFlatViewCreation({ - dependencyOptimisticFlatEntityMaps, - flatViewToValidate, - optimisticFlatViewMaps, - }); + await this.flatViewValidatorService.validateFlatViewCreation(args); if (validationResult.errors.length > 0) { return { @@ -61,6 +37,12 @@ export class WorkspaceMigrationV2ViewActionsBuilderService extends WorkspaceEnti ...validationResult, }; } + + const { + flatEntityToValidate: flatViewToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatObjectMetadata = findFlatEntityByIdInFlatEntityMapsOrThrow({ flatEntityId: flatViewToValidate.objectMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, @@ -87,23 +69,13 @@ export class WorkspaceMigrationV2ViewActionsBuilderService extends WorkspaceEnti }; } - protected async validateFlatEntityDeletion({ - dependencyOptimisticFlatEntityMaps, - flatEntityToValidate: flatViewToValidate, - optimisticFlatEntityMaps: optimisticFlatViewMaps, - }: FlatEntityValidationArgs): Promise< - FlatEntityValidationReturnType< - WorkspaceMigrationViewActionV2, - FlatView, - ViewRelatedFlatEntityMaps - > + protected async validateFlatEntityDeletion( + args: FlatEntityValidationArgs, + ): Promise< + FlatEntityValidationReturnType > { const validationResult = - this.flatViewValidatorService.validateFlatViewDeletion({ - dependencyOptimisticFlatEntityMaps, - flatViewToValidate, - optimisticFlatViewMaps, - }); + this.flatViewValidatorService.validateFlatViewDeletion(args); if (validationResult.errors.length > 0) { return { @@ -112,6 +84,11 @@ export class WorkspaceMigrationV2ViewActionsBuilderService extends WorkspaceEnti }; } + const { + flatEntityToValidate: flatViewToValidate, + dependencyOptimisticFlatEntityMaps, + } = args; + const flatObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatViewToValidate.objectMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, @@ -142,36 +119,13 @@ export class WorkspaceMigrationV2ViewActionsBuilderService extends WorkspaceEnti }; } - protected async validateFlatEntityUpdate({ - dependencyOptimisticFlatEntityMaps, - flatEntityUpdate: { from: fromFlatView, to: toFlatView }, - optimisticFlatEntityMaps: optimisticFlatViewMaps, - }: FlatEntityUpdateValidationArgs< - FlatView, - ViewRelatedFlatEntityMaps - >): Promise< - | FlatEntityValidationReturnType< - WorkspaceMigrationViewActionV2, - FlatView, - ViewRelatedFlatEntityMaps - > - | undefined + protected async validateFlatEntityUpdate( + args: FlatEntityUpdateValidationArgs, + ): Promise< + FlatEntityValidationReturnType > { - const viewUpdatedProperties = compareTwoFlatView({ - fromFlatView, - toFlatView, - }); - - if (viewUpdatedProperties.length === 0) { - return undefined; - } - const validationResult = - this.flatViewValidatorService.validateFlatViewUpdate({ - dependencyOptimisticFlatEntityMaps, - flatViewToValidate: toFlatView, - optimisticFlatViewMaps, - }); + this.flatViewValidatorService.validateFlatViewUpdate(args); if (validationResult.errors.length > 0) { return { @@ -180,10 +134,16 @@ export class WorkspaceMigrationV2ViewActionsBuilderService extends WorkspaceEnti }; } + const { + dependencyOptimisticFlatEntityMaps, + flatEntityId, + flatEntityUpdates, + } = args; + const updateViewAction: UpdateViewAction = { type: 'update_view', - viewId: toFlatView.id, - updates: viewUpdatedProperties, + viewId: flatEntityId, + updates: flatEntityUpdates, }; return { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts index 05a802ed45..ae0bf8f8ea 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts @@ -3,147 +3,41 @@ import { Inject } from '@nestjs/common'; import { type FromTo } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; +import { LoggerService } from 'src/engine/core-modules/logger/logger.service'; +import { ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY } from 'src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant'; import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; -import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; -import { LoggerService } from 'src/engine/core-modules/logger/logger.service'; -import { - type DeletedCreatedUpdatedMatrix, - flatEntityDeletedCreatedUpdatedMatrixDispatcher, -} from 'src/engine/workspace-manager/workspace-migration-v2/utils/flat-entity-deleted-created-updated-matrix-dispatcher.util'; -import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; -import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { MetadataFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type'; +import { MetadataValidationRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { flatEntityDeletedCreatedUpdatedMatrixDispatcher } from 'src/engine/workspace-manager/workspace-migration-v2/utils/flat-entity-deleted-created-updated-matrix-dispatcher.util'; +import { getMetadataEmptyWorkspaceMigrationActionRecord } from 'src/engine/workspace-manager/workspace-migration-v2/utils/get-metadata-empty-workspace-migration-action-record.util'; +import { FailedFlatEntityValidateAndBuild } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/failed-flat-entity-validate-and-build.type'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { FlatEntityValidationReturnType } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type'; +import { SuccessfulFlatEntityValidateAndBuild } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/successful-flat-entity-validate-and-build.type'; import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; -// TODO extract types in dedicated files -export type CreatedDeletedUpdatedActions< - TActions extends WorkspaceMigrationActionV2, -> = { - created: TActions[]; - deleted: TActions[]; - updated: TActions[]; -}; - -export type SuccessfulEntityMigrationBuildResult< - TActions extends WorkspaceMigrationActionV2, - TFlatEntity extends AllFlatEntities, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, -> = { - status: 'success'; - actions: CreatedDeletedUpdatedActions; - optimisticFlatEntityMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: TRelatedFlatEntityMaps; -}; - -export type FailedEntityMigrationBuildResult< - TFlatEntity extends AllFlatEntities, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, -> = { - status: 'fail'; - errors: FailedFlatEntityValidation[]; - optimisticFlatEntityMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: TRelatedFlatEntityMaps; -}; - -export type ValidateAndBuildArgs< - T extends AllFlatEntities, - TRelatedFlatEntityMaps extends Partial | undefined, -> = { +export type ValidateAndBuildArgs = { buildOptions: WorkspaceMigrationBuilderOptions; - dependencyOptimisticFlatEntityMaps: TRelatedFlatEntityMaps; + dependencyOptimisticFlatEntityMaps: MetadataValidationRelatedFlatEntityMaps; workspaceId: string; -} & FromTo>; +} & FromTo>; -export type ValidateAndBuildReturnType< - TActions extends WorkspaceMigrationActionV2, - TFlatEntity extends AllFlatEntities, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, -> = - | SuccessfulEntityMigrationBuildResult< - TActions, - TFlatEntity, - TRelatedFlatEntityMaps - > - | FailedEntityMigrationBuildResult; +export type ValidateAndBuildReturnType = + | SuccessfulFlatEntityValidateAndBuild + | FailedFlatEntityValidateAndBuild; -export type ValidateAndBuildActionsArgs< - T extends AllFlatEntities, - TRelatedFlatEntityMaps extends Partial, -> = ValidateAndBuildArgs & - DeletedCreatedUpdatedMatrix; - -export type ValidateAndBuilActionsReturnType< - TFlatEntity extends AllFlatEntities, - TActions extends WorkspaceMigrationActionV2, -> = { - failed: FailedFlatEntityValidation[]; -} & CreatedDeletedUpdatedActions; - -export type FlatEntityValidationArgs< - TFlatEntity extends AllFlatEntities, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, -> = { - flatEntityToValidate: TFlatEntity; - optimisticFlatEntityMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: TRelatedFlatEntityMaps; - workspaceId: string; - remainingFlatEntityMapsToValidate: FlatEntityMaps; - buildOptions: WorkspaceMigrationBuilderOptions; -}; - -export type FlatEntityUpdateValidationArgs< - TFlatEntity extends AllFlatEntities, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, -> = Omit< - FlatEntityValidationArgs, - 'flatEntityToValidate' | 'remainingFlatEntityMapsToValidate' -> & { - flatEntityUpdate: FromTo; - remainingFlatEntityMapsToValidate: FromTo>; -}; - -export type FlatEntityValidationReturnType< - TActions extends WorkspaceMigrationActionV2, - TFlatEntity extends AllFlatEntities, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, -> = - | { - status: 'success'; - action: TActions | TActions[]; - dependencyOptimisticFlatEntityMaps: TRelatedFlatEntityMaps; - } - | ({ - status: 'fail'; - } & FailedFlatEntityValidation); - -// TODO prastoin refactor the builder to building a selection of flatEntityMaps => simplify export abstract class WorkspaceEntityMigrationBuilderV2Service< - T extends keyof AllFlatEntitiesByMetadataEngineName, // TODO refactor the whole generic to be inferred from this one only - TFlatEntity extends AllFlatEntities, - TActions extends WorkspaceMigrationActionV2, - TRelatedFlatEntityMaps extends - | Partial - | undefined = undefined, + T extends AllMetadataName, > { @Inject(LoggerService) protected readonly logger: LoggerService; @@ -159,9 +53,7 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< from: fromFlatEntityMaps, to: toFlatEntityMaps, workspaceId, - }: ValidateAndBuildArgs): Promise< - ValidateAndBuildReturnType - > { + }: ValidateAndBuildArgs): Promise> { this.logger.time(`EntityBuilder ${this.metadataName}`, 'validateAndBuild'); this.logger.time( `EntityBuilder ${this.metadataName}`, @@ -179,10 +71,18 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< createdFlatEntityMaps, deletedFlatEntityMaps, updatedFlatEntityMaps, - } = flatEntityDeletedCreatedUpdatedMatrixDispatcher({ + } = flatEntityDeletedCreatedUpdatedMatrixDispatcher({ from: fromFlatEntities, to: toFlatEntities, buildOptions, + comparisonOptions: { + propertiesToCompare: + ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY[this.metadataName] + .propertiesToCompare, + propertiesToStringify: + ALL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY[this.metadataName] + .propertiesToStringify, + }, }); this.logger.timeEnd( @@ -192,16 +92,11 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< this.logger.time(`EntityBuilder ${this.metadataName}`, 'entity processing'); let optimisticFlatEntityMaps = structuredClone(fromFlatEntityMaps); - const validateAndBuildResult: ValidateAndBuilActionsReturnType< - TFlatEntity, - TActions - > = { - failed: [], - created: [], - deleted: [], - updated: [], - }; - + const actionsResult = getMetadataEmptyWorkspaceMigrationActionRecord( + this.metadataName, + ); + const allValidationResult: FailedFlatEntityValidateAndBuild['errors'] = + []; let remainingFlatEntityMapsToCreate = structuredClone( createdFlatEntityMaps, ); @@ -237,7 +132,7 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< }); if (validationResult.status === 'fail') { - validateAndBuildResult.failed.push(validationResult); + allValidationResult.push(validationResult); continue; } @@ -248,7 +143,7 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< dependencyOptimisticFlatEntityMaps = validationResult.dependencyOptimisticFlatEntityMaps; - validateAndBuildResult.created.push( + actionsResult.created.push( ...(Array.isArray(validationResult.action) ? validationResult.action : [validationResult.action]), @@ -297,7 +192,7 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< }); if (validationResult.status === 'fail') { - validateAndBuildResult.failed.push(validationResult); + allValidationResult.push(validationResult); continue; } @@ -308,7 +203,7 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< dependencyOptimisticFlatEntityMaps = validationResult.dependencyOptimisticFlatEntityMaps; - validateAndBuildResult.deleted.push( + actionsResult.deleted.push( ...(Array.isArray(validationResult.action) ? validationResult.action : [validationResult.action]), @@ -321,66 +216,58 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< ); this.logger.time(`EntityBuilder ${this.metadataName}`, 'update validation'); - let remainingFlatEntityMapsToUpdate = structuredClone( - updatedFlatEntityMaps, - ); + for (const flatEntityToUpdateId in updatedFlatEntityMaps.byId) { + const flatEntityToUpdate = + updatedFlatEntityMaps.byId[flatEntityToUpdateId]; - for (const flatEntityToUpdateId in updatedFlatEntityMaps.to.byId) { - const flatEntityToUpdateFrom = - updatedFlatEntityMaps.from.byId[flatEntityToUpdateId]; - const flatEntityToUpdateTo = - updatedFlatEntityMaps.to.byId[flatEntityToUpdateId]; - - if ( - !isDefined(flatEntityToUpdateTo) || - !isDefined(flatEntityToUpdateFrom) - ) { + if (!isDefined(flatEntityToUpdate)) { throw new FlatEntityMapsException( - 'Could not find flat entity to update in maps should never occur', + 'Could not find flat entity updates in maps dispatcher should never occur', FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND, ); } - remainingFlatEntityMapsToUpdate.from = - deleteFlatEntityFromFlatEntityMapsOrThrow({ - entityToDeleteId: flatEntityToUpdateId, - flatEntityMaps: remainingFlatEntityMapsToUpdate.from, - }); - remainingFlatEntityMapsToUpdate.to = - deleteFlatEntityFromFlatEntityMapsOrThrow({ - entityToDeleteId: flatEntityToUpdateId, - flatEntityMaps: remainingFlatEntityMapsToUpdate.to, - }); - const validationResult = await this.validateFlatEntityUpdate({ + flatEntityUpdates: flatEntityToUpdate.updates, + flatEntityId: flatEntityToUpdateId, dependencyOptimisticFlatEntityMaps, - flatEntityUpdate: { - from: flatEntityToUpdateFrom, - to: flatEntityToUpdateTo, - }, optimisticFlatEntityMaps: optimisticFlatEntityMaps, workspaceId, - remainingFlatEntityMapsToValidate: remainingFlatEntityMapsToUpdate, buildOptions, }); - if (validationResult === undefined) { + if (validationResult.status === 'fail') { + allValidationResult.push(validationResult); continue; } - if (validationResult.status === 'fail') { - validateAndBuildResult.failed.push(validationResult); - continue; + const existingFlatEntity = findFlatEntityByIdInFlatEntityMaps({ + flatEntityId: flatEntityToUpdateId, + flatEntityMaps: optimisticFlatEntityMaps, + }); + + if (!isDefined(existingFlatEntity)) { + throw new FlatEntityMapsException( + 'Existing flat entity to update post successful validation is not defined, should never occur', + FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND, + ); } + const updatedFlatEntity = { + ...existingFlatEntity, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ + updates: flatEntityToUpdate.updates, + }), + }; + optimisticFlatEntityMaps = replaceFlatEntityInFlatEntityMapsOrThrow({ - flatEntity: flatEntityToUpdateTo, + flatEntity: updatedFlatEntity, flatEntityMaps: optimisticFlatEntityMaps, }); dependencyOptimisticFlatEntityMaps = validationResult.dependencyOptimisticFlatEntityMaps; - validateAndBuildResult.updated.push( + actionsResult.updated.push( ...(Array.isArray(validationResult.action) ? validationResult.action : [validationResult.action]), @@ -396,10 +283,10 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< 'entity processing', ); - if (validateAndBuildResult.failed.length > 0) { + if (allValidationResult.length > 0) { return { status: 'fail', - errors: validateAndBuildResult.failed, + errors: allValidationResult, optimisticFlatEntityMaps, dependencyOptimisticFlatEntityMaps, }; @@ -412,44 +299,21 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< return { status: 'success', - actions: { - created: validateAndBuildResult.created, - deleted: validateAndBuildResult.deleted, - updated: validateAndBuildResult.updated, - }, + actions: actionsResult, optimisticFlatEntityMaps, dependencyOptimisticFlatEntityMaps, }; } protected abstract validateFlatEntityCreation( - args: FlatEntityValidationArgs, - ): Promise< - FlatEntityValidationReturnType< - TActions, - TFlatEntity, - TRelatedFlatEntityMaps - > - >; + args: FlatEntityValidationArgs, + ): Promise>; protected abstract validateFlatEntityDeletion( - args: FlatEntityValidationArgs, - ): Promise< - FlatEntityValidationReturnType< - TActions, - TFlatEntity, - TRelatedFlatEntityMaps - > - >; + args: FlatEntityValidationArgs, + ): Promise>; protected abstract validateFlatEntityUpdate( - args: FlatEntityUpdateValidationArgs, - ): Promise< - | FlatEntityValidationReturnType< - TActions, - TFlatEntity, - TRelatedFlatEntityMaps - > - | undefined - >; + args: FlatEntityUpdateValidationArgs, + ): Promise>; } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/failed-flat-entity-validate-and-build.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/failed-flat-entity-validate-and-build.type.ts new file mode 100644 index 0000000000..de5dcf644d --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/failed-flat-entity-validate-and-build.type.ts @@ -0,0 +1,12 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type MetadataFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type'; +import { type MetadataValidationRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type'; +import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; + +export type FailedFlatEntityValidateAndBuild = { + status: 'fail'; + errors: FailedFlatEntityValidation>[]; + optimisticFlatEntityMaps: MetadataFlatEntityMaps; + dependencyOptimisticFlatEntityMaps: MetadataValidationRelatedFlatEntityMaps; +}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type.ts new file mode 100644 index 0000000000..0dcd1a7bef --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type.ts @@ -0,0 +1,11 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type FlatEntityPropertiesUpdates } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type'; +import { type FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; + +export type FlatEntityUpdateValidationArgs = Omit< + FlatEntityValidationArgs, + 'flatEntityToValidate' | 'remainingFlatEntityMapsToValidate' +> & { + flatEntityId: string; + flatEntityUpdates: FlatEntityPropertiesUpdates; +}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type.ts new file mode 100644 index 0000000000..923624e4df --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type.ts @@ -0,0 +1,14 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type MetadataFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type'; +import { type MetadataValidationRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type'; +import { type WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type'; + +export type FlatEntityValidationArgs = { + flatEntityToValidate: MetadataFlatEntity; + optimisticFlatEntityMaps: MetadataFlatEntityMaps; + dependencyOptimisticFlatEntityMaps: MetadataValidationRelatedFlatEntityMaps; + workspaceId: string; + remainingFlatEntityMapsToValidate: MetadataFlatEntityMaps; + buildOptions: WorkspaceMigrationBuilderOptions; +}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type.ts new file mode 100644 index 0000000000..8ee09c22e2 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type.ts @@ -0,0 +1,20 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type'; +import { type MetadataValidationRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type'; +import { type MetadataWorkspaceMigrationAction } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type'; +import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; + +export type FlatEntityValidationReturnType< + T extends AllMetadataName, + TOperation extends 'created' | 'deleted' | 'updated', +> = + | { + status: 'success'; + action: + | MetadataWorkspaceMigrationAction + | MetadataWorkspaceMigrationAction[]; + dependencyOptimisticFlatEntityMaps: MetadataValidationRelatedFlatEntityMaps; + } + | ({ + status: 'fail'; + } & FailedFlatEntityValidation>); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/successful-flat-entity-validate-and-build.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/successful-flat-entity-validate-and-build.type.ts new file mode 100644 index 0000000000..f49b9d639d --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/successful-flat-entity-validate-and-build.type.ts @@ -0,0 +1,11 @@ +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type'; +import { type MetadataValidationRelatedFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-types.type'; +import { type MetadataWorkspaceMigrationActionsRecord } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type'; + +export type SuccessfulFlatEntityValidateAndBuild = { + status: 'success'; + actions: MetadataWorkspaceMigrationActionsRecord; + optimisticFlatEntityMaps: MetadataFlatEntityMaps; + dependencyOptimisticFlatEntityMaps: MetadataValidationRelatedFlatEntityMaps; +}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/to-merge.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/to-merge.type.ts deleted file mode 100644 index 877a647675..0000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/to-merge.type.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type ToMerge = { - [P in 'toMerge' | 'dest' as `${P}${Capitalize}`]: T; -}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts index 9a62dd8b59..074a966ef4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts @@ -1,25 +1,9 @@ -import { type WorkspaceMigrationCronTriggerActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type'; -import { type WorkspaceMigrationDatabaseEventTriggerActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type'; -import { type WorkspaceMigrationFieldActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; -import { type WorkspaceMigrationIndexActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; -import { type WorkspaceMigrationObjectActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; -import { type WorkspaceMigrationRouteTriggerActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type'; -import { type WorkspaceMigrationServerlessFunctionActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type'; -import { type WorkspaceMigrationViewActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type'; -import { type WorkspaceMigrationViewFieldActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type'; -import { type WorkspaceMigrationViewFilterActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type'; +import { type AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { type MetadataWorkspaceMigrationAction } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type'; export type WorkspaceMigrationActionV2 = - | WorkspaceMigrationObjectActionV2 - | WorkspaceMigrationFieldActionV2 - | WorkspaceMigrationIndexActionV2 - | WorkspaceMigrationViewActionV2 - | WorkspaceMigrationViewFieldActionV2 - | WorkspaceMigrationViewFilterActionV2 - | WorkspaceMigrationServerlessFunctionActionV2 - | WorkspaceMigrationDatabaseEventTriggerActionV2 - | WorkspaceMigrationCronTriggerActionV2 - | WorkspaceMigrationRouteTriggerActionV2; + MetadataWorkspaceMigrationAction; + export type WorkspaceMigrationActionTypeV2 = WorkspaceMigrationActionV2['type']; export type ExtractAction = Extract< diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts index 45fea14831..59482292fb 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2.ts @@ -1,13 +1,9 @@ -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; export type WorkspaceMigrationV2< TActions extends WorkspaceMigrationActionV2 = WorkspaceMigrationActionV2, > = { - // formatVersion: 1; - // createdAt: string; - // name: string; - // description?: string; actions: TActions[]; workspaceId: string; relatedFlatEntityMapsKeys?: (keyof AllFlatEntityMaps)[]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-cron-trigger-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-cron-trigger-validator.service.ts index 3c22d842d1..420b724eab 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-cron-trigger-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-cron-trigger-validator.service.ts @@ -1,105 +1,121 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { CronTriggerExceptionCode } from 'src/engine/metadata-modules/cron-trigger/exceptions/cron-trigger.exception'; import { FlatCronTrigger } from 'src/engine/metadata-modules/cron-trigger/types/flat-cron-trigger.type'; -import { CronTriggerRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/cron-trigger-related-flat-entity-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; -type CronTriggerValidationArgs = { - flatCronTriggerToValidate: FlatCronTrigger; - optimisticFlatCronTriggerMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: CronTriggerRelatedFlatEntityMaps; -}; -// TODO: validate settings integrity @Injectable() export class FlatCronTriggerValidatorService { constructor() {} public validateFlatCronTriggerUpdate({ - flatCronTriggerToValidate: updatedFlatCronTrigger, - optimisticFlatCronTriggerMaps, + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps: optimisticFlatCronTriggerMaps, dependencyOptimisticFlatEntityMaps, - }: CronTriggerValidationArgs): FailedFlatEntityValidation { - const errors = []; + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.cronTrigger + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'update_cron_trigger', + errors: [], + flatEntityMinimalInformation: { + id: flatEntityId, + }, + }; const existingFlatCronTrigger = - optimisticFlatCronTriggerMaps.byId[updatedFlatCronTrigger.id]; + optimisticFlatCronTriggerMaps.byId[flatEntityId]; if (!isDefined(existingFlatCronTrigger)) { - errors.push({ + 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 = - dependencyOptimisticFlatEntityMaps.flatServerlessFunctionMaps?.byId?.[ + dependencyOptimisticFlatEntityMaps.flatServerlessFunctionMaps.byId[ updatedFlatCronTrigger.serverlessFunctionId ]; if (!isDefined(serverlessFunction)) { - errors.push({ + validationResult.errors.push({ code: CronTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'update_cron_trigger', - errors, - flatEntityMinimalInformation: { - id: updatedFlatCronTrigger.id, - }, - }; + return validationResult; } public validateFlatCronTriggerDeletion({ - flatCronTriggerToValidate: { id: cronTriggerIdToDelete }, - optimisticFlatCronTriggerMaps, - }: CronTriggerValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityToValidate: { id: cronTriggerIdToDelete }, + optimisticFlatEntityMaps: optimisticFlatCronTriggerMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.cronTrigger + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'delete_cron_trigger', + errors: [], + flatEntityMinimalInformation: { + id: cronTriggerIdToDelete, + }, + }; const existingFlatCronTrigger = optimisticFlatCronTriggerMaps.byId[cronTriggerIdToDelete]; if (!isDefined(existingFlatCronTrigger)) { - errors.push({ + validationResult.errors.push({ code: CronTriggerExceptionCode.CRON_TRIGGER_NOT_FOUND, message: t`Cron trigger not found`, userFriendlyMessage: msg`Cron trigger not found`, }); } - return { - type: 'delete_cron_trigger', - errors, - flatEntityMinimalInformation: { - id: cronTriggerIdToDelete, - }, - }; + return validationResult; } public async validateFlatCronTriggerCreation({ - flatCronTriggerToValidate, - optimisticFlatCronTriggerMaps, + flatEntityToValidate: flatCronTriggerToValidate, + optimisticFlatEntityMaps: optimisticFlatCronTriggerMaps, dependencyOptimisticFlatEntityMaps, - }: CronTriggerValidationArgs): Promise< + }: FlatEntityValidationArgs): Promise< FailedFlatEntityValidation > { - const errors = []; + const validationResult: FailedFlatEntityValidation = { + type: 'create_cron_trigger', + errors: [], + flatEntityMinimalInformation: { + id: flatCronTriggerToValidate.id, + }, + }; if ( isDefined( optimisticFlatCronTriggerMaps.byId[flatCronTriggerToValidate.id], ) ) { - errors.push({ + validationResult.errors.push({ code: CronTriggerExceptionCode.CRON_TRIGGER_ALREADY_EXIST, message: t`Cron trigger with same id already exists`, userFriendlyMessage: msg`Cron trigger already exists`, @@ -112,19 +128,13 @@ export class FlatCronTriggerValidatorService { ]; if (!isDefined(serverlessFunction)) { - errors.push({ + validationResult.errors.push({ code: CronTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'create_cron_trigger', - errors, - flatEntityMinimalInformation: { - id: flatCronTriggerToValidate.id, - }, - }; + return validationResult; } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-database-event-trigger-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-database-event-trigger-validator.service.ts index de9141ea14..54fe33937f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-database-event-trigger-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-database-event-trigger-validator.service.ts @@ -1,71 +1,88 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { DatabaseEventTriggerExceptionCode } from 'src/engine/metadata-modules/database-event-trigger/exceptions/database-event-trigger.exception'; import { FlatDatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger.type'; -import { DatabaseEventTriggerRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/database-event-trigger-related-flat-entity-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; -type DatabaseEventTriggerValidationArgs = { - flatDatabaseEventTriggerToValidate: FlatDatabaseEventTrigger; - optimisticFlatDatabaseEventTriggerMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: DatabaseEventTriggerRelatedFlatEntityMaps; -}; // TODO: validate settings integrity @Injectable() export class FlatDatabaseEventTriggerValidatorService { constructor() {} public validateFlatDatabaseEventTriggerUpdate({ - flatDatabaseEventTriggerToValidate: updatedFlatDatabaseEventTrigger, - optimisticFlatDatabaseEventTriggerMaps, + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps: optimisticFlatDatabaseEventTriggerMaps, dependencyOptimisticFlatEntityMaps, - }: DatabaseEventTriggerValidationArgs): FailedFlatEntityValidation { - const errors = []; + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.databaseEventTrigger + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = + { + type: 'update_database_event_trigger', + errors: [], + flatEntityMinimalInformation: { + id: flatEntityId, + }, + }; const existingFlatDatabaseEventTrigger = - optimisticFlatDatabaseEventTriggerMaps.byId[ - updatedFlatDatabaseEventTrigger.id - ]; + optimisticFlatDatabaseEventTriggerMaps.byId[flatEntityId]; if (!isDefined(existingFlatDatabaseEventTrigger)) { - errors.push({ + 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 = dependencyOptimisticFlatEntityMaps.flatServerlessFunctionMaps?.byId?.[ updatedFlatDatabaseEventTrigger.serverlessFunctionId ]; if (!isDefined(serverlessFunction)) { - errors.push({ + validationResult.errors.push({ code: DatabaseEventTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'update_database_event_trigger', - errors, - flatEntityMinimalInformation: { - id: updatedFlatDatabaseEventTrigger.id, - }, - }; + return validationResult; } public validateFlatDatabaseEventTriggerDeletion({ - flatDatabaseEventTriggerToValidate: { id: databaseEventTriggerIdToDelete }, - optimisticFlatDatabaseEventTriggerMaps, - }: DatabaseEventTriggerValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityToValidate: { id: databaseEventTriggerIdToDelete }, + optimisticFlatEntityMaps: optimisticFlatDatabaseEventTriggerMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.databaseEventTrigger + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = + { + type: 'delete_database_event_trigger', + errors: [], + flatEntityMinimalInformation: { + id: databaseEventTriggerIdToDelete, + }, + }; const existingFlatDatabaseEventTrigger = optimisticFlatDatabaseEventTriggerMaps.byId[ @@ -73,30 +90,31 @@ export class FlatDatabaseEventTriggerValidatorService { ]; if (!isDefined(existingFlatDatabaseEventTrigger)) { - errors.push({ + 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 { - type: 'delete_database_event_trigger', - errors, - flatEntityMinimalInformation: { - id: databaseEventTriggerIdToDelete, - }, - }; + return validationResult; } public async validateFlatDatabaseEventTriggerCreation({ - flatDatabaseEventTriggerToValidate, - optimisticFlatDatabaseEventTriggerMaps, + flatEntityToValidate: flatDatabaseEventTriggerToValidate, + optimisticFlatEntityMaps: optimisticFlatDatabaseEventTriggerMaps, dependencyOptimisticFlatEntityMaps, - }: DatabaseEventTriggerValidationArgs): Promise< - FailedFlatEntityValidation - > { - const errors = []; + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.databaseEventTrigger + >): Promise> { + const validationResult: FailedFlatEntityValidation = + { + type: 'create_database_event_trigger', + errors: [], + flatEntityMinimalInformation: { + id: flatDatabaseEventTriggerToValidate.id, + }, + }; if ( isDefined( @@ -105,7 +123,7 @@ export class FlatDatabaseEventTriggerValidatorService { ], ) ) { - errors.push({ + 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`, @@ -118,19 +136,13 @@ export class FlatDatabaseEventTriggerValidatorService { ]; if (!isDefined(serverlessFunction)) { - errors.push({ + validationResult.errors.push({ code: DatabaseEventTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'create_database_event_trigger', - errors, - flatEntityMinimalInformation: { - id: flatDatabaseEventTriggerToValidate.id, - }, - }; + return validationResult; } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service.ts index c0bcdf2a2a..6313e997f4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-field-metadata-validator.service.ts @@ -1,36 +1,24 @@ import { Injectable } from '@nestjs/common'; import { msg } from '@lingui/core/macro'; -import { FieldMetadataType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { FieldMetadataExceptionCode } from 'src/engine/metadata-modules/field-metadata/field-metadata.exception'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant'; import { FLAT_FIELD_METADATA_RELATION_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-relation-properties-to-compare.constant'; import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-type-validator.service'; import { FlatFieldMetadataRelationPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-relation-properties-to-compare.type'; import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { compareTwoFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util'; import { isFlatFieldMetadataNameSyncedWithLabel } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-name-synced-with-label.util'; import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { validateFlatFieldMetadataNameAvailability } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name-availability.util'; import { validateFlatFieldMetadataName } from 'src/engine/metadata-modules/flat-field-metadata/validators/utils/validate-flat-field-metadata-name.util'; import { isStandardMetadata } from 'src/engine/metadata-modules/utils/is-standard-metadata.util'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; - -export type ValidateOneFieldMetadataArgs< - T extends FieldMetadataType = FieldMetadataType, -> = { - dependencyOptimisticFlatEntityMaps: Pick< - AllFlatEntityMaps, - 'flatObjectMetadataMaps' - >; - remainingFlatEntityMapsToValidate?: FlatEntityMaps; - flatFieldMetadataToValidate: FlatFieldMetadata; - optimisticFlatFieldMetadataMaps: FlatEntityMaps; - workspaceId: string; -}; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class FlatFieldMetadataValidatorService { @@ -38,25 +26,52 @@ export class FlatFieldMetadataValidatorService { private readonly flatFieldMetadataTypeValidatorService: FlatFieldMetadataTypeValidatorService, ) {} - async validateFlatFieldMetadataUpdate({ - dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, + async validateFlatFieldMetadataUpdate({ + flatEntityId, + flatEntityUpdates: updates, + optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, + dependencyOptimisticFlatEntityMaps, workspaceId, - }: ValidateOneFieldMetadataArgs): Promise< - FailedFlatEntityValidation - > { + buildOptions, + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.fieldMetadata + >): Promise> { const validationResult: FailedFlatEntityValidation = { type: 'update_field', errors: [], flatEntityMinimalInformation: { - id: flatFieldMetadataToValidate.id, - name: flatFieldMetadataToValidate.name, - objectMetadataId: flatFieldMetadataToValidate.objectMetadataId, + id: flatEntityId, }, }; + + const existingFlatFieldMetadataToUpdate = + optimisticFlatFieldMetadataMaps.byId[flatEntityId]; + + if (!isDefined(existingFlatFieldMetadataToUpdate)) { + validationResult.errors.push({ + code: FieldMetadataExceptionCode.FIELD_METADATA_NOT_FOUND, + message: 'field metadata to update not found', + userFriendlyMessage: msg`Field to update not found`, + }); + + return validationResult; + } + + const flatFieldMetadataToValidate = { + ...existingFlatFieldMetadataToUpdate, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ updates }), + }; + + validationResult.flatEntityMinimalInformation = { + id: flatFieldMetadataToValidate.id, + name: flatFieldMetadataToValidate.name, + objectMetadataId: flatFieldMetadataToValidate.objectMetadataId, + }; + const flatObjectMetadata = - flatObjectMetadataMaps.byId[flatFieldMetadataToValidate.objectMetadataId]; + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps.byId[ + flatFieldMetadataToValidate.objectMetadataId + ]; if (!isDefined(flatObjectMetadata)) { validationResult.errors.push({ @@ -76,24 +91,6 @@ export class FlatFieldMetadataValidatorService { }); } - const existingFlatFieldMetadataToUpdate = - optimisticFlatFieldMetadataMaps.byId[flatFieldMetadataToValidate.id]; - - if (!isDefined(existingFlatFieldMetadataToUpdate)) { - validationResult.errors.push({ - code: FieldMetadataExceptionCode.FIELD_METADATA_NOT_FOUND, - message: 'field metadata to update not found', - userFriendlyMessage: msg`Field to update not found`, - }); - - return validationResult; - } - - const updates = compareTwoFlatFieldMetadata({ - fromFlatFieldMetadata: existingFlatFieldMetadataToUpdate, - toFlatFieldMetadata: flatFieldMetadataToValidate, - }); - if (isMorphOrRelationFlatFieldMetadata(flatFieldMetadataToValidate)) { const relationNonEditableUpdatedProperties = updates.flatMap( ({ property }) => @@ -138,9 +135,14 @@ export class FlatFieldMetadataValidatorService { const fieldMetadataTypeValidationErrors = await this.flatFieldMetadataTypeValidatorService.validateFlatFieldMetadataTypeSpecificities( { - dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - optimisticFlatFieldMetadataMaps, - flatFieldMetadataToValidate, + dependencyOptimisticFlatEntityMaps: { + flatObjectMetadataMaps: + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, + }, + optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, + flatEntityToValidate: flatFieldMetadataToValidate, + buildOptions, + remainingFlatEntityMapsToValidate: EMPTY_FLAT_ENTITY_MAPS, workspaceId, }, ); @@ -153,10 +155,12 @@ export class FlatFieldMetadataValidatorService { } validateFlatFieldMetadataDeletion({ - dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - flatFieldMetadataToValidate: { id: flatFieldMetadataToDeleteId }, - optimisticFlatFieldMetadataMaps, - }: ValidateOneFieldMetadataArgs): FailedFlatEntityValidation { + flatEntityToValidate: { id: flatFieldMetadataToDeleteId }, + optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.fieldMetadata + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'delete_field', errors: [], @@ -184,7 +188,9 @@ export class FlatFieldMetadataValidatorService { }; const relatedFlatObjectMetadata = - flatObjectMetadataMaps.byId[flatFieldMetadataToDelete.objectMetadataId]; + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps.byId[ + flatFieldMetadataToDelete.objectMetadataId + ]; if ( isDefined(relatedFlatObjectMetadata) && @@ -202,12 +208,14 @@ export class FlatFieldMetadataValidatorService { const relationTargetObjectMetadataHasBeenDeleted = isMorphOrRelationFlatFieldMetadata(flatFieldMetadataToDelete) && !isDefined( - flatObjectMetadataMaps.byId[ + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps.byId[ flatFieldMetadataToDelete.relationTargetObjectMetadataId ], ); const parentObjectMetadataHasBeenDeleted = !isDefined( - flatObjectMetadataMaps.byId[flatFieldMetadataToDelete.objectMetadataId], + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps.byId[ + flatFieldMetadataToDelete.objectMetadataId + ], ); if ( @@ -237,15 +245,14 @@ export class FlatFieldMetadataValidatorService { return validationResult; } - async validateFlatFieldMetadataCreation< - T extends FieldMetadataType = FieldMetadataType, - >({ - dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, + async validateFlatFieldMetadataCreation({ + flatEntityToValidate: flatFieldMetadataToValidate, + optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, + dependencyOptimisticFlatEntityMaps, workspaceId, + buildOptions, remainingFlatEntityMapsToValidate, - }: ValidateOneFieldMetadataArgs): Promise< + }: FlatEntityValidationArgs): Promise< FailedFlatEntityValidation > { const validationResult: FailedFlatEntityValidation = { @@ -259,7 +266,9 @@ export class FlatFieldMetadataValidatorService { }; const parentFlatObjectMetadata = - flatObjectMetadataMaps.byId[flatFieldMetadataToValidate.objectMetadataId]; + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps.byId[ + flatFieldMetadataToValidate.objectMetadataId + ]; if (!isDefined(parentFlatObjectMetadata)) { validationResult.errors.push({ @@ -317,9 +326,10 @@ export class FlatFieldMetadataValidatorService { validationResult.errors.push( ...(await this.flatFieldMetadataTypeValidatorService.validateFlatFieldMetadataTypeSpecificities( { - dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - flatFieldMetadataToValidate, - optimisticFlatFieldMetadataMaps, + dependencyOptimisticFlatEntityMaps, + flatEntityToValidate: flatFieldMetadataToValidate, + buildOptions, + optimisticFlatEntityMaps: optimisticFlatFieldMetadataMaps, workspaceId, remainingFlatEntityMapsToValidate, }, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts index 8be52931e9..49e90c7a6b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts @@ -1,27 +1,24 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatEntityMapsExceptionCode } from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { FlatEntityMapsExceptionCode } from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { IndexExceptionCode } from 'src/engine/metadata-modules/flat-index-metadata/exceptions/index-exception-code'; import { FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; -import { IndexRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; -type IndexValidationArgs = { - flatIndexToValidate: FlatIndexMetadata; - optimisticFlatIndexMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: IndexRelatedFlatEntityMaps; -}; @Injectable() export class FlatIndexValidatorService { public validateFlatIndexDeletion({ - optimisticFlatIndexMaps, - flatIndexToValidate: { id: indexIdToDelete }, - }: IndexValidationArgs): FailedFlatEntityValidation { + optimisticFlatEntityMaps: optimisticFlatIndexMaps, + flatEntityToValidate: { id: indexIdToDelete }, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.index + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'delete_index', errors: [], @@ -46,17 +43,12 @@ export class FlatIndexValidatorService { } public validateFlatIndexCreation({ - flatIndexToValidate, - optimisticFlatIndexMaps, - dependencyOptimisticFlatEntityMaps: { - flatFieldMetadataMaps, - flatObjectMetadataMaps, - }, - }: { - flatIndexToValidate: FlatIndexMetadata; - optimisticFlatIndexMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: IndexRelatedFlatEntityMaps; - }): FailedFlatEntityValidation { + flatEntityToValidate: flatIndexToValidate, + optimisticFlatEntityMaps: optimisticFlatIndexMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.index + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'create_index', errors: [], @@ -81,7 +73,7 @@ export class FlatIndexValidatorService { const relatedObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatIndexToValidate.objectMetadataId, - flatEntityMaps: flatObjectMetadataMaps, + flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, }); if (!isDefined(relatedObjectMetadata)) { @@ -120,7 +112,8 @@ export class FlatIndexValidatorService { flatIndexToValidate.flatIndexFieldMetadatas.forEach((flatIndexField) => { const relatedFlatField = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatIndexField.fieldMetadataId, - flatEntityMaps: flatFieldMetadataMaps, + flatEntityMaps: + dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, }); if (!isDefined(relatedFlatField)) { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-object-metadata-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-object-metadata-validator.service.ts index 081ee68ec7..06a548bc27 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-object-metadata-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-object-metadata-validator.service.ts @@ -1,46 +1,39 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { validateFlatObjectMetadataIdentifiers } from 'src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-identifiers.util'; import { validateFlatObjectMetadataNameAndLabels } from 'src/engine/metadata-modules/flat-object-metadata/validators/utils/validate-flat-object-metadata-name-and-labels.util'; import { ObjectMetadataExceptionCode } from 'src/engine/metadata-modules/object-metadata/object-metadata.exception'; import { isStandardMetadata } from 'src/engine/metadata-modules/utils/is-standard-metadata.util'; -import { ObjectMetadataRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/workspace-migration-v2-object-actions-builder.service'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; -import { WorkspaceMigrationBuilderOptions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-builder-options.type'; -import { FlatObjectPropertiesUpdates } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; - -export type ValidateOneObjectMetadataArgs = { - flatObjectMetadataToValidate: FlatObjectMetadata; - optimisticFlatObjectMetadataMaps: FlatEntityMaps; - buildOptions: WorkspaceMigrationBuilderOptions; - dependencyOptimisticFlatEntityMaps: ObjectMetadataRelatedFlatEntityMaps; -}; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class FlatObjectMetadataValidatorService { public validateFlatObjectMetadataUpdate({ - optimisticFlatObjectMetadataMaps, - flatObjectMetadataToValidate: updatedFlatObjectMetadata, - dependencyOptimisticFlatEntityMaps: { flatFieldMetadataMaps }, - flatObjectPropertiesUpdates, - }: ValidateOneObjectMetadataArgs & { - flatObjectPropertiesUpdates: FlatObjectPropertiesUpdates; - }): FailedFlatEntityValidation { + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps: optimisticFlatObjectMetadataMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.objectMetadata + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'update_object', errors: [], flatEntityMinimalInformation: { - id: updatedFlatObjectMetadata.id, + id: flatEntityId, }, }; const existingFlatObjectMetadata = - optimisticFlatObjectMetadataMaps.byId[updatedFlatObjectMetadata.id]; + optimisticFlatObjectMetadataMaps.byId[flatEntityId]; if (!isDefined(existingFlatObjectMetadata)) { validationResult.errors.push({ @@ -51,6 +44,14 @@ export class FlatObjectMetadataValidatorService { return validationResult; } + + const updatedFlatObjectMetadata = { + ...existingFlatObjectMetadata, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ + updates: flatEntityUpdates, + }), + }; + validationResult.flatEntityMinimalInformation = { id: existingFlatObjectMetadata.id, namePlural: existingFlatObjectMetadata.namePlural, @@ -64,10 +65,9 @@ export class FlatObjectMetadataValidatorService { }), ); - const labelIdentifierFieldMetadataIdUpdate = - flatObjectPropertiesUpdates.find( - (update) => update.property === 'labelIdentifierFieldMetadataId', - ); + const labelIdentifierFieldMetadataIdUpdate = flatEntityUpdates.find( + (update) => update.property === 'labelIdentifierFieldMetadataId', + ); // TODO remove this once we migrated labelIdentifierFieldMetadataId as non nullable if (isDefined(labelIdentifierFieldMetadataIdUpdate)) { @@ -82,7 +82,8 @@ export class FlatObjectMetadataValidatorService { validationResult.errors.push( ...validateFlatObjectMetadataIdentifiers({ flatObjectMetadata: updatedFlatObjectMetadata, - flatFieldMetadataMaps, + flatFieldMetadataMaps: + dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, }), ); } @@ -91,10 +92,12 @@ export class FlatObjectMetadataValidatorService { } public validateFlatObjectMetadataDeletion({ - flatObjectMetadataToValidate: { id: objectMetadataToDeleteId }, - optimisticFlatObjectMetadataMaps, + flatEntityToValidate: { id: objectMetadataToDeleteId }, + optimisticFlatEntityMaps: optimisticFlatObjectMetadataMaps, buildOptions, - }: ValidateOneObjectMetadataArgs): FailedFlatEntityValidation { + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.objectMetadata + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'delete_object', errors: [], @@ -151,12 +154,12 @@ export class FlatObjectMetadataValidatorService { } public async validateFlatObjectMetadataCreation({ - optimisticFlatObjectMetadataMaps, - flatObjectMetadataToValidate, - dependencyOptimisticFlatEntityMaps: { flatFieldMetadataMaps }, - }: ValidateOneObjectMetadataArgs): Promise< - FailedFlatEntityValidation - > { + flatEntityToValidate: flatObjectMetadataToValidate, + optimisticFlatEntityMaps: optimisticFlatObjectMetadataMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.objectMetadata + >): Promise> { const objectValidationResult: FailedFlatEntityValidation = { type: 'create_object', @@ -191,7 +194,8 @@ export class FlatObjectMetadataValidatorService { objectValidationResult.errors.push( ...validateFlatObjectMetadataIdentifiers({ flatObjectMetadata: flatObjectMetadataToValidate, - flatFieldMetadataMaps, + flatFieldMetadataMaps: + dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, }), ); objectValidationResult.errors.push( diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-route-trigger-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-route-trigger-validator.service.ts index ca18219f62..62cad16ad0 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-route-trigger-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-route-trigger-validator.service.ts @@ -1,105 +1,121 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { RouteTriggerExceptionCode } from 'src/engine/metadata-modules/route-trigger/exceptions/route-trigger.exception'; import { FlatRouteTrigger } from 'src/engine/metadata-modules/route-trigger/types/flat-route-trigger.type'; -import { RouteTriggerRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/route-trigger-related-flat-entity-maps.type'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; - -type RouteTriggerValidationArgs = { - flatRouteTriggerToValidate: FlatRouteTrigger; - optimisticFlatRouteTriggerMaps: FlatEntityMaps; - dependencyOptimisticFlatEntityMaps: RouteTriggerRelatedFlatEntityMaps; -}; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class FlatRouteTriggerValidatorService { constructor() {} public validateFlatRouteTriggerUpdate({ - flatRouteTriggerToValidate: updatedFlatRouteTrigger, - optimisticFlatRouteTriggerMaps, + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps: optimisticFlatRouteTriggerMaps, dependencyOptimisticFlatEntityMaps, - }: RouteTriggerValidationArgs): FailedFlatEntityValidation { - const errors = []; + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.routeTrigger + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'update_route_trigger', + errors: [], + flatEntityMinimalInformation: { + id: flatEntityId, + }, + }; const existingFlatRouteTrigger = - optimisticFlatRouteTriggerMaps.byId[updatedFlatRouteTrigger.id]; + optimisticFlatRouteTriggerMaps.byId[flatEntityId]; if (!isDefined(existingFlatRouteTrigger)) { - errors.push({ + 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 = dependencyOptimisticFlatEntityMaps.flatServerlessFunctionMaps.byId[ updatedFlatRouteTrigger.serverlessFunctionId ]; if (!isDefined(serverlessFunction)) { - errors.push({ + validationResult.errors.push({ code: RouteTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'update_route_trigger', - errors, - flatEntityMinimalInformation: { - id: updatedFlatRouteTrigger.id, - }, - }; + return validationResult; } public validateFlatRouteTriggerDeletion({ - flatRouteTriggerToValidate: { id: routeTriggerIdToDelete }, - optimisticFlatRouteTriggerMaps, - }: RouteTriggerValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityToValidate: { id: routeTriggerIdToDelete }, + optimisticFlatEntityMaps: optimisticFlatRouteTriggerMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.routeTrigger + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'delete_route_trigger', + errors: [], + flatEntityMinimalInformation: { + id: routeTriggerIdToDelete, + }, + }; const existingFlatRouteTrigger = optimisticFlatRouteTriggerMaps.byId[routeTriggerIdToDelete]; if (!isDefined(existingFlatRouteTrigger)) { - errors.push({ + validationResult.errors.push({ code: RouteTriggerExceptionCode.ROUTE_NOT_FOUND, message: t`Route not found`, userFriendlyMessage: msg`Route not found`, }); } - return { - type: 'delete_route_trigger', - errors, - flatEntityMinimalInformation: { - id: routeTriggerIdToDelete, - }, - }; + return validationResult; } public async validateFlatRouteTriggerCreation({ - flatRouteTriggerToValidate, - optimisticFlatRouteTriggerMaps, + flatEntityToValidate: flatRouteTriggerToValidate, + optimisticFlatEntityMaps: optimisticFlatRouteTriggerMaps, dependencyOptimisticFlatEntityMaps, - }: RouteTriggerValidationArgs): Promise< + }: FlatEntityValidationArgs): Promise< FailedFlatEntityValidation > { - const errors = []; + const validationResult: FailedFlatEntityValidation = { + type: 'create_route_trigger', + errors: [], + flatEntityMinimalInformation: { + id: flatRouteTriggerToValidate.id, + }, + }; if ( isDefined( optimisticFlatRouteTriggerMaps.byId[flatRouteTriggerToValidate.id], ) ) { - errors.push({ + validationResult.errors.push({ code: RouteTriggerExceptionCode.ROUTE_ALREADY_EXIST, message: t`Route with same id already exists`, userFriendlyMessage: msg`Route already exists`, @@ -116,7 +132,7 @@ export class FlatRouteTriggerValidatorService { flatRouteTrigger.path === flatRouteTriggerToValidate.path, ) ) { - errors.push({ + validationResult.errors.push({ code: RouteTriggerExceptionCode.ROUTE_PATH_ALREADY_EXIST, message: t`Route with same path already exists`, userFriendlyMessage: msg`Route path already exists`, @@ -129,19 +145,13 @@ export class FlatRouteTriggerValidatorService { ]; if (!isDefined(serverlessFunction)) { - errors.push({ + validationResult.errors.push({ code: RouteTriggerExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'create_route_trigger', - errors, - flatEntityMinimalInformation: { - id: flatRouteTriggerToValidate.id, - }, - }; + return validationResult; } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-serverless-function-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-serverless-function-validator.service.ts index 012ace5cc1..214128d56b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-serverless-function-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-serverless-function-validator.service.ts @@ -1,82 +1,91 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { ServerlessFunctionExceptionCode } from 'src/engine/metadata-modules/serverless-function/serverless-function.exception'; import { FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; -type ServerlessFunctionValidationArgs = { - flatServerlessFunctionToValidate: FlatServerlessFunction; - optimisticFlatServerlessFunctionMaps: FlatEntityMaps; -}; @Injectable() export class FlatServerlessFunctionValidatorService { constructor() {} public validateFlatServerlessFunctionUpdate({ - flatServerlessFunctionToValidate: updatedFlatServerlessFunction, - optimisticFlatServerlessFunctionMaps, - }: ServerlessFunctionValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityId, + optimisticFlatEntityMaps: optimisticFlatServerlessFunctionMaps, + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.serverlessFunction + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = + { + type: 'update_serverless_function', + errors: [], + flatEntityMinimalInformation: { + id: flatEntityId, + }, + }; const existingFlatServerlessFunction = - optimisticFlatServerlessFunctionMaps.byId[ - updatedFlatServerlessFunction.id - ]; + optimisticFlatServerlessFunctionMaps.byId[flatEntityId]; if (!isDefined(existingFlatServerlessFunction)) { - errors.push({ + validationResult.errors.push({ code: ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'update_serverless_function', - errors, - flatEntityMinimalInformation: { - id: updatedFlatServerlessFunction.id, - }, - }; + return validationResult; } public validateFlatServerlessFunctionDeletion({ - flatServerlessFunctionToValidate: { id: serverlessFunctionIdToDelete }, - optimisticFlatServerlessFunctionMaps, - }: ServerlessFunctionValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityToValidate: { id: serverlessFunctionIdToDelete }, + optimisticFlatEntityMaps: optimisticFlatServerlessFunctionMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.serverlessFunction + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = + { + type: 'delete_serverless_function', + errors: [], + flatEntityMinimalInformation: { + id: serverlessFunctionIdToDelete, + }, + }; const existingFlatServerlessFunction = optimisticFlatServerlessFunctionMaps.byId[serverlessFunctionIdToDelete]; if (!isDefined(existingFlatServerlessFunction)) { - errors.push({ + validationResult.errors.push({ code: ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_NOT_FOUND, message: t`Serverless function not found`, userFriendlyMessage: msg`Serverless function not found`, }); } - return { - type: 'delete_serverless_function', - errors, - flatEntityMinimalInformation: { - id: serverlessFunctionIdToDelete, - }, - }; + return validationResult; } public async validateFlatServerlessFunctionCreation({ - flatServerlessFunctionToValidate, - optimisticFlatServerlessFunctionMaps, - }: ServerlessFunctionValidationArgs): Promise< - FailedFlatEntityValidation - > { - const errors = []; + flatEntityToValidate: flatServerlessFunctionToValidate, + optimisticFlatEntityMaps: optimisticFlatServerlessFunctionMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.serverlessFunction + >): Promise> { + const validationResult: FailedFlatEntityValidation = + { + type: 'create_serverless_function', + errors: [], + flatEntityMinimalInformation: { + id: flatServerlessFunctionToValidate.id, + }, + }; if ( isDefined( @@ -85,19 +94,13 @@ export class FlatServerlessFunctionValidatorService { ], ) ) { - errors.push({ + validationResult.errors.push({ code: ServerlessFunctionExceptionCode.SERVERLESS_FUNCTION_ALREADY_EXIST, message: t`Serverless function with same id already exists`, userFriendlyMessage: msg`Serverless function already exists`, }); } - return { - type: 'create_serverless_function', - errors, - flatEntityMinimalInformation: { - id: flatServerlessFunctionToValidate.id, - }, - }; + return validationResult; } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service.ts index 6e17bfd6de..2d520c8470 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service.ts @@ -1,45 +1,42 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { FlatViewFieldMaps } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { FlatViewField } from 'src/engine/metadata-modules/flat-view-field/types/flat-view-field.type'; import { isViewFieldInLowestPosition } from 'src/engine/metadata-modules/flat-view-field/utils/is-view-field-in-lowest-position.util'; import { ViewExceptionCode } from 'src/engine/metadata-modules/view/exceptions/view.exception'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; -import { ViewFieldRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/view-field-related-flat-entity-maps.type'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; import { validateLabelIdentifierFieldMetadataIdFlatViewField } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/utils/validate-label-identifier-field-metadata-id-flat-view-field.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; -type ViewFieldValidationArgs = { - flatViewFieldToValidate: FlatViewField; - optimisticFlatViewFieldMaps: FlatViewFieldMaps; - dependencyOptimisticFlatEntityMaps: ViewFieldRelatedFlatEntityMaps; -}; @Injectable() export class FlatViewFieldValidatorService { constructor() {} public validateFlatViewFieldUpdate({ - flatViewFieldToValidate: updatedFlatViewField, - optimisticFlatViewFieldMaps, - dependencyOptimisticFlatEntityMaps: { - flatViewMaps, - flatObjectMetadataMaps, - }, - }: ViewFieldValidationArgs): FailedFlatEntityValidation { + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps: optimisticFlatViewFieldMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.viewField + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'update_view_field', errors: [], flatEntityMinimalInformation: { - id: updatedFlatViewField.id, + id: flatEntityId, }, }; const existingFlatViewField = - optimisticFlatViewFieldMaps.byId[updatedFlatViewField.id]; + optimisticFlatViewFieldMaps.byId[flatEntityId]; if (!isDefined(existingFlatViewField)) { validationResult.errors.push({ @@ -51,6 +48,13 @@ export class FlatViewFieldValidatorService { return validationResult; } + const updatedFlatViewField = { + ...existingFlatViewField, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ + updates: flatEntityUpdates, + }), + }; + validationResult.flatEntityMinimalInformation = { id: updatedFlatViewField.id, viewId: updatedFlatViewField.viewId, @@ -59,7 +63,7 @@ export class FlatViewFieldValidatorService { const flatView = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: updatedFlatViewField.viewId, - flatEntityMaps: flatViewMaps, + flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatViewMaps, }); if (!isDefined(flatView)) { @@ -74,7 +78,7 @@ export class FlatViewFieldValidatorService { const flatObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatView.objectMetadataId, - flatEntityMaps: flatObjectMetadataMaps, + flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, }); if (!isDefined(flatObjectMetadata)) { @@ -112,9 +116,11 @@ export class FlatViewFieldValidatorService { } public validateFlatViewFieldDeletion({ - optimisticFlatViewFieldMaps, - flatViewFieldToValidate: { id: viewFieldIdToDelete }, - }: ViewFieldValidationArgs): FailedFlatEntityValidation { + flatEntityToValidate: { id: viewFieldIdToDelete }, + optimisticFlatEntityMaps: optimisticFlatViewFieldMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.viewField + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'delete_view_field', errors: [], @@ -146,18 +152,12 @@ export class FlatViewFieldValidatorService { } public validateFlatViewFieldCreation({ - flatViewFieldToValidate, - optimisticFlatViewFieldMaps, - dependencyOptimisticFlatEntityMaps: { - flatViewMaps, - flatFieldMetadataMaps, - flatObjectMetadataMaps, - }, - }: { - flatViewFieldToValidate: FlatViewField; - optimisticFlatViewFieldMaps: FlatViewFieldMaps; - dependencyOptimisticFlatEntityMaps: ViewFieldRelatedFlatEntityMaps; - }): FailedFlatEntityValidation { + flatEntityToValidate: flatViewFieldToValidate, + optimisticFlatEntityMaps: optimisticFlatViewFieldMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.viewField + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'create_view_field', errors: [], @@ -183,7 +183,7 @@ export class FlatViewFieldValidatorService { const flatFieldMetadata = findFlatEntityByIdInFlatEntityMaps({ flatEntityId: flatViewFieldToValidate.fieldMetadataId, - flatEntityMaps: flatFieldMetadataMaps, + flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, }); if (!isDefined(flatFieldMetadata)) { @@ -194,7 +194,10 @@ export class FlatViewFieldValidatorService { }); } - const flatView = flatViewMaps.byId[flatViewFieldToValidate.viewId]; + const flatView = + dependencyOptimisticFlatEntityMaps.flatViewMaps.byId[ + flatViewFieldToValidate.viewId + ]; if (!isDefined(flatView)) { validationResult.errors.push({ @@ -226,7 +229,7 @@ export class FlatViewFieldValidatorService { } const flatObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ - flatEntityMaps: flatObjectMetadataMaps, + flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps, flatEntityId: flatView.objectMetadataId, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service.ts index dab6588854..e4aa58689a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-filter-validator.service.ts @@ -3,26 +3,26 @@ import { Injectable } from '@nestjs/common'; import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; -import { type FlatViewFilterMaps } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; import { type FlatViewFilter } from 'src/engine/metadata-modules/flat-view-filter/types/flat-view-filter.type'; import { ViewFilterExceptionCode } from 'src/engine/metadata-modules/view-filter/exceptions/view-filter.exception'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; -import { ViewFilterRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/view-filter-related-flat-entity-maps.type'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class FlatViewFilterValidatorService { constructor() {} validateFlatViewFilterCreation({ - flatViewFilterToValidate, + flatEntityToValidate: flatViewFilterToValidate, + optimisticFlatEntityMaps: optimisticFlatViewFilterMaps, dependencyOptimisticFlatEntityMaps, - optimisticFlatViewFilterMaps, - }: { - flatViewFilterToValidate: FlatViewFilter; - dependencyOptimisticFlatEntityMaps: ViewFilterRelatedFlatEntityMaps; - optimisticFlatViewFilterMaps: FlatViewFilterMaps; - }): FailedFlatEntityValidation { + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.viewFilter + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'create_view_filter', errors: [], @@ -74,12 +74,11 @@ export class FlatViewFilterValidatorService { } validateFlatViewFilterDeletion({ - flatViewFilterToValidate, - optimisticFlatViewFilterMaps, - }: { - flatViewFilterToValidate: FlatViewFilter; - optimisticFlatViewFilterMaps: FlatViewFilterMaps; - }): FailedFlatEntityValidation { + flatEntityToValidate: flatViewFilterToValidate, + optimisticFlatEntityMaps: optimisticFlatViewFilterMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.viewFilter + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'delete_view_filter', errors: [], @@ -111,26 +110,22 @@ export class FlatViewFilterValidatorService { } validateFlatViewFilterUpdate({ - flatViewFilterToValidate, + flatEntityId, + flatEntityUpdates, + optimisticFlatEntityMaps: optimisticFlatViewFilterMaps, dependencyOptimisticFlatEntityMaps, - optimisticFlatViewFilterMaps, - }: { - flatViewFilterToValidate: FlatViewFilter; - dependencyOptimisticFlatEntityMaps: ViewFilterRelatedFlatEntityMaps; - optimisticFlatViewFilterMaps: FlatViewFilterMaps; - }): FailedFlatEntityValidation { + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.viewFilter + >): FailedFlatEntityValidation { const validationResult: FailedFlatEntityValidation = { type: 'update_view_filter', errors: [], flatEntityMinimalInformation: { - id: flatViewFilterToValidate.id, + id: flatEntityId, }, }; - const existingViewFilter = findFlatEntityByIdInFlatEntityMaps({ - flatEntityId: flatViewFilterToValidate.id, - flatEntityMaps: optimisticFlatViewFilterMaps, - }); + const existingViewFilter = optimisticFlatViewFilterMaps.byId[flatEntityId]; if (!isDefined(existingViewFilter)) { validationResult.errors.push({ @@ -138,10 +133,19 @@ export class FlatViewFilterValidatorService { message: t`View filter not found`, userFriendlyMessage: msg`View filter not found`, }); + + return validationResult; } + const updatedFlatViewFilter = { + ...existingViewFilter, + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity({ + updates: flatEntityUpdates, + }), + }; + const referencedFieldMetadata = findFlatEntityByIdInFlatEntityMaps({ - flatEntityId: flatViewFilterToValidate.fieldMetadataId, + flatEntityId: updatedFlatViewFilter.fieldMetadataId, flatEntityMaps: dependencyOptimisticFlatEntityMaps.flatFieldMetadataMaps, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service.ts index fc057f4f41..7b86f78628 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service.ts @@ -1,65 +1,71 @@ import { Injectable } from '@nestjs/common'; -import { t, msg } from '@lingui/core/macro'; +import { msg, t } from '@lingui/core/macro'; import { isDefined } from 'twenty-shared/utils'; -import { FlatViewMaps } from 'src/engine/metadata-modules/flat-view/types/flat-view-maps.type'; +import { ALL_METADATA_NAME } from 'src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant'; import { FlatView } from 'src/engine/metadata-modules/flat-view/types/flat-view.type'; import { ViewExceptionCode } from 'src/engine/metadata-modules/view/exceptions/view.exception'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; -import { ViewRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service'; +import { FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type'; +import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type'; -type ViewValidationArgs = { - flatViewToValidate: FlatView; - optimisticFlatViewMaps: FlatViewMaps; - dependencyOptimisticFlatEntityMaps: ViewRelatedFlatEntityMaps; -}; @Injectable() export class FlatViewValidatorService { constructor() {} public validateFlatViewUpdate({ - flatViewToValidate: updatedFlatView, - optimisticFlatViewMaps, - }: ViewValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityId, + optimisticFlatEntityMaps: optimisticFlatViewMaps, + }: FlatEntityUpdateValidationArgs< + typeof ALL_METADATA_NAME.view + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'update_view', + errors: [], + flatEntityMinimalInformation: { + id: flatEntityId, + }, + }; - const existingFlatView = optimisticFlatViewMaps.byId[updatedFlatView.id]; + const existingFlatView = optimisticFlatViewMaps.byId[flatEntityId]; if (!isDefined(existingFlatView)) { - errors.push({ + validationResult.errors.push({ code: ViewExceptionCode.INVALID_VIEW_DATA, message: t`View not found`, userFriendlyMessage: msg`View not found`, }); } - return { - type: 'update_view', - errors, - flatEntityMinimalInformation: { - id: updatedFlatView.id, - }, - }; + return validationResult; } public validateFlatViewDeletion({ - flatViewToValidate: { id: viewIdToDelete }, - optimisticFlatViewMaps, - }: ViewValidationArgs): FailedFlatEntityValidation { - const errors = []; + flatEntityToValidate: { id: viewIdToDelete }, + optimisticFlatEntityMaps: optimisticFlatViewMaps, + }: FlatEntityValidationArgs< + typeof ALL_METADATA_NAME.view + >): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'delete_view', + errors: [], + flatEntityMinimalInformation: { + id: viewIdToDelete, + }, + }; const existingFlatView = optimisticFlatViewMaps.byId[viewIdToDelete]; if (!isDefined(existingFlatView)) { - errors.push({ + validationResult.errors.push({ code: ViewExceptionCode.INVALID_VIEW_DATA, message: t`View not found`, userFriendlyMessage: msg`View not found`, }); } else { if (!isDefined(existingFlatView.deletedAt)) { - errors.push({ + validationResult.errors.push({ code: ViewExceptionCode.INVALID_VIEW_DATA, message: t`View to delete has not been soft deleted`, userFriendlyMessage: msg`View to delete has not been soft deleted`, @@ -67,27 +73,31 @@ export class FlatViewValidatorService { } } - return { - type: 'delete_view', - errors, - flatEntityMinimalInformation: { - id: viewIdToDelete, - }, - }; + return validationResult; } public async validateFlatViewCreation({ - dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, - flatViewToValidate, - optimisticFlatViewMaps, - }: ViewValidationArgs): Promise> { - const optimisticFlatObjectMetadata = - flatObjectMetadataMaps.byId[flatViewToValidate.objectMetadataId]; + flatEntityToValidate: flatViewToValidate, + optimisticFlatEntityMaps: optimisticFlatViewMaps, + dependencyOptimisticFlatEntityMaps, + }: FlatEntityValidationArgs): Promise< + FailedFlatEntityValidation + > { + const validationResult: FailedFlatEntityValidation = { + type: 'create_view', + errors: [], + flatEntityMinimalInformation: { + id: flatViewToValidate.id, + }, + }; - const errors = []; + const optimisticFlatObjectMetadata = + dependencyOptimisticFlatEntityMaps.flatObjectMetadataMaps.byId[ + flatViewToValidate.objectMetadataId + ]; if (!isDefined(optimisticFlatObjectMetadata)) { - errors.push({ + validationResult.errors.push({ code: ViewExceptionCode.INVALID_VIEW_DATA, message: t`Object metadata not found`, userFriendlyMessage: msg`Object metadata not found`, @@ -95,19 +105,13 @@ export class FlatViewValidatorService { } if (isDefined(optimisticFlatViewMaps.byId[flatViewToValidate.id])) { - errors.push({ + validationResult.errors.push({ code: ViewExceptionCode.INVALID_VIEW_DATA, message: t`View with same id is already exists`, userFriendlyMessage: msg`View already exists`, }); } - return { - type: 'create_view', - errors, - flatEntityMinimalInformation: { - id: flatViewToValidate.id, - }, - }; + return validationResult; } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts index 4602871c9c..3f10673e29 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/create-cron-trigger-action-handler.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { CreateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type'; +import { CreateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts index 3ed663360f..d1849870ad 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/delete-cron-trigger-action-handler.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { DeleteCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type'; +import { DeleteCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts index f720d2db09..7a6636316c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/cron-trigger/services/update-cron-trigger-action-handler.service.ts @@ -3,9 +3,9 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { CronTrigger } from 'src/engine/metadata-modules/cron-trigger/entities/cron-trigger.entity'; -import { UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-cron-trigger-action-v2.type'; +import { UpdateCronTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/cron-trigger/types/workspace-migration-cron-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateCronTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -26,7 +26,7 @@ export class UpdateCronTriggerActionHandlerService extends WorkspaceMigrationRun await cronTriggerRepository.update( cronTriggerId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts index cc21ad5ade..a3f4acbdc6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/create-database-event-trigger-action-handler.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; -import { CreateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type'; +import { CreateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts index a385b3c724..884b56a08f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/delete-database-event-trigger-action-handler.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; -import { DeleteDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type'; +import { DeleteDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts index 9ebb9eb7e1..cff2827e09 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/database-event-trigger/services/update-database-event-trigger-action-handler.service.ts @@ -3,9 +3,9 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { DatabaseEventTrigger } from 'src/engine/metadata-modules/database-event-trigger/entities/database-event-trigger.entity'; -import { UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-database-event-trigger-action-v2.type'; +import { UpdateDatabaseEventTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/database-event-trigger/types/workspace-migration-database-event-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateDatabaseEventTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -28,7 +28,7 @@ export class UpdateDatabaseEventTriggerActionHandlerService extends WorkspaceMig await databaseEventTriggerRepository.update( databaseEventTriggerId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts index 7e98b45402..2b259d4514 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts @@ -8,15 +8,15 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; import { convertOnDeleteActionToOnDelete } from 'src/engine/workspace-manager/workspace-migration-runner/utils/convert-on-delete-action-to-on-delete.util'; -import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; +import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { generateColumnDefinitions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/generate-column-definitions.util'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/delete-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/delete-field-action-handler.service.ts index 751713d039..f6eacbff0f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/delete-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/delete-field-action-handler.service.ts @@ -7,12 +7,12 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; -import { type DeleteFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; +import { type DeleteFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { generateColumnDefinitions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/generate-column-definitions.util'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts index 048b22dcdf..e0ba53b9e9 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts @@ -9,15 +9,15 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { MorphOrRelationFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/types/morph-or-relation-field-metadata-type.type'; import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util'; import { getCompositeTypeOrThrow } from 'src/engine/metadata-modules/field-metadata/utils/get-composite-type-or-throw.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; -import { FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { FlatEntityPropertiesToCompare } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util'; import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util'; @@ -26,15 +26,16 @@ import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-meta import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; +import { isPropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/is-property-update.type'; import { PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; -import { type UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; +import { type UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/types/workspace-migration-field-action-v2'; import { serializeDefaultValueV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/serialize-default-value-v2.util'; import { WorkspaceMigrationRunnerException, WorkspaceMigrationRunnerExceptionCode, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/exceptions/workspace-migration-runner.exception'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; import { generateColumnDefinitions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/generate-column-definitions.util'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; import { @@ -44,7 +45,7 @@ import { } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/workspace-schema-enum-operations.util'; type UpdateFieldPropertyUpdateHandlerArgs< - P extends FlatFieldMetadataPropertiesToCompare, + P extends FlatEntityPropertiesToCompare<'fieldMetadata'>, T extends FieldMetadataType = FieldMetadataType, > = { queryRunner: QueryRunner; @@ -87,7 +88,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct const updatedFlatFieldMetadata = { ...existingFlatFieldMetadata, - ...fromWorkspaceMigrationUpdateActionToPartialEntity(action), + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), }; const updatedFlatFieldMetadataMaps = @@ -114,7 +115,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct await fieldMetadataRepository.update( fieldMetadataId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); } @@ -147,7 +148,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct let optimisticFlatFieldMetadata = structuredClone(currentFlatFieldMetadata); for (const update of updates) { - if (update.property === 'name') { + if (isPropertyUpdate(update, 'name')) { await this.handleFieldNameUpdate({ queryRunner, schemaName, @@ -157,7 +158,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct }); optimisticFlatFieldMetadata.name = update.to; } - if (update.property === 'defaultValue') { + if (isPropertyUpdate(update, 'defaultValue')) { await this.handleFieldDefaultValueUpdate({ queryRunner, schemaName, @@ -168,7 +169,7 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct optimisticFlatFieldMetadata.defaultValue = update.to; } if ( - update.property === 'options' && + isPropertyUpdate(update, 'options') && isEnumFlatFieldMetadata(optimisticFlatFieldMetadata) ) { await this.handleFieldOptionsUpdate({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts index 2423165682..e8a1d7daa7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts @@ -14,15 +14,15 @@ import { import { FlatEntityMapsException, FlatEntityMapsExceptionCode, -} from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +} from 'src/engine/metadata-modules/flat-entity/exceptions/flat-entity-maps.exception'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util'; import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; -import { type CreateIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; +import { type CreateIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/types/workspace-migration-index-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts index 44ecf68b5c..b53764b7b6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts @@ -5,13 +5,13 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { getWorkspaceSchemaName } from 'src/engine/workspace-datasource/utils/get-workspace-schema-name.util'; -import { type DeleteIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; +import { type DeleteIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/types/workspace-migration-index-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts index 6d4da62b8e..f445c2898c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts @@ -5,15 +5,15 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util'; import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; -import { type CreateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type CreateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { generateColumnDefinitions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/generate-column-definitions.util'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/delete-object-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/delete-object-action-handler.service.ts index da31008410..08f7420528 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/delete-object-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/delete-object-action-handler.service.ts @@ -5,15 +5,15 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util'; import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; -import { type DeleteObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { type DeleteObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; import { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/update-object-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/update-object-action-handler.service.ts index 0e68a15835..bfadda0788 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/update-object-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/update-object-action-handler.service.ts @@ -1,22 +1,26 @@ import { Injectable } from '@nestjs/common'; +import { isDefined } from 'twenty-shared/utils'; + import { OptimisticallyApplyActionOnAllFlatEntityMapsArgs, WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findManyFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { isCompositeFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-composite-flat-field-metadata.util'; import { isEnumFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-enum-flat-field-metadata.util'; +import { FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util'; -import { type UpdateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2'; +import { isPropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/is-property-update.type'; +import { type UpdateObjectAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/types/workspace-migration-object-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; import { collectEnumOperationsForObject, @@ -49,7 +53,7 @@ export class UpdateObjectActionHandlerService extends WorkspaceMigrationRunnerAc const updatedFlatObjectMetadata = { ...existingFlatObjectMetadata, - ...fromWorkspaceMigrationUpdateActionToPartialEntity(action), + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), }; const updatedFlatObjectMetadataMaps = @@ -75,7 +79,7 @@ export class UpdateObjectActionHandlerService extends WorkspaceMigrationRunnerAc await objectMetadataRepository.update( action.objectMetadataId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); } @@ -101,14 +105,14 @@ export class UpdateObjectActionHandlerService extends WorkspaceMigrationRunnerAc flatObjectMetadata: flatObjectMetadata, }); - for (const update of updates) { - if (update.property !== 'nameSingular') { - continue; - } + const nameSingularUpdate = updates.find((update) => + isPropertyUpdate(update, 'nameSingular'), + ); - const updatedObjectMetadata = { + if (isDefined(nameSingularUpdate)) { + const updatedObjectMetadata: FlatObjectMetadata = { ...flatObjectMetadata, - [update.property]: update.to, + nameSingular: nameSingularUpdate.to, }; const newTableName = computeObjectTargetTable(updatedObjectMetadata); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts index fa5fc16f12..a010af54ac 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/create-route-trigger-action-handler.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; -import { CreateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type'; +import { CreateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts index b2d04a9e15..02975457a7 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/delete-route-trigger-action-handler.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; -import { DeleteRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type'; +import { DeleteRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts index fae8ae9586..b151da8998 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/route-trigger/services/update-route-trigger-action-handler.service.ts @@ -3,9 +3,9 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { RouteTrigger } from 'src/engine/metadata-modules/route-trigger/route-trigger.entity'; -import { UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-route-trigger-action-v2.type'; +import { UpdateRouteTriggerAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/route-trigger/types/workspace-migration-route-trigger-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateRouteTriggerActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -26,7 +26,7 @@ export class UpdateRouteTriggerActionHandlerService extends WorkspaceMigrationRu await routeTriggerRepository.update( routeTriggerId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/create-serverless-function-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/create-serverless-function-action-handler.service.ts index 999e6537c1..99306ba8e8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/create-serverless-function-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/create-serverless-function-action-handler.service.ts @@ -10,7 +10,7 @@ import { FileStorageService } from 'src/engine/core-modules/file-storage/file-st import { getBaseTypescriptProjectFiles } from 'src/engine/core-modules/serverless/drivers/utils/get-base-typescript-project-files'; import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils'; import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; -import { CreateServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type'; +import { CreateServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/delete-serverless-function-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/delete-serverless-function-action-handler.service.ts index 87e91b82fb..5a6a6ff64b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/delete-serverless-function-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/delete-serverless-function-action-handler.service.ts @@ -2,11 +2,11 @@ import { Injectable } from '@nestjs/common'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; -import { DeleteServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type'; +import { DeleteServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/update-serverless-function-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/update-serverless-function-action-handler.service.ts index bfd0360c39..9a8e8ff6b2 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/update-serverless-function-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/serverless-function/services/update-serverless-function-action-handler.service.ts @@ -4,16 +4,16 @@ import { isDefined } from 'twenty-shared/utils'; import { WorkspaceMigrationRunnerActionHandler } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { FileStorageService } from 'src/engine/core-modules/file-storage/file-storage.service'; import { ServerlessService } from 'src/engine/core-modules/serverless/serverless.service'; import { getServerlessFolder } from 'src/engine/core-modules/serverless/utils/serverless-get-folder.utils'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity'; import { FlatServerlessFunction } from 'src/engine/metadata-modules/serverless-function/types/flat-serverless-function.type'; -import { UpdateServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-serverless-function-action-v2.type'; -import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; import { ServerlessFunctionCode } from 'src/engine/metadata-modules/serverless-function/types/serverless-function-code.type'; +import { UpdateServerlessFunctionAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/serverless-function/types/workspace-migration-serverless-function-action-v2.type'; +import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateServerlessFunctionActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -39,7 +39,7 @@ export class UpdateServerlessFunctionActionHandlerService extends WorkspaceMigra await serverlessFunctionRepository.update( serverlessFunctionId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); const serverlessFunction = findFlatEntityByIdInFlatEntityMapsOrThrow({ diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts index 5f06c05e92..96475692d6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts @@ -5,10 +5,10 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; -import { CreateViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type'; +import { CreateViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/delete-view-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/delete-view-field-action-handler.service.ts index bdfdff48d1..a85ee80784 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/delete-view-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/delete-view-field-action-handler.service.ts @@ -5,10 +5,10 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; -import { DeleteViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type'; +import { DeleteViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/update-view-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/update-view-field-action-handler.service.ts index 1f8496e642..66f240d23c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/update-view-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/update-view-field-action-handler.service.ts @@ -5,13 +5,13 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { ViewFieldEntity } from 'src/engine/metadata-modules/view-field/entities/view-field.entity'; -import { UpdateViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-field-action-v2.type'; +import { UpdateViewFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/types/workspace-migration-view-field-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateViewFieldActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -35,7 +35,7 @@ export class UpdateViewFieldActionHandlerService extends WorkspaceMigrationRunne const updatedViewField = { ...existingViewField, - ...fromWorkspaceMigrationUpdateActionToPartialEntity(action), + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), }; const updatedFlatViewFieldMaps = replaceFlatEntityInFlatEntityMapsOrThrow({ @@ -57,7 +57,7 @@ export class UpdateViewFieldActionHandlerService extends WorkspaceMigrationRunne const viewFieldRepository = queryRunner.manager.getRepository(ViewFieldEntity); - const update = fromWorkspaceMigrationUpdateActionToPartialEntity(action); + const update = fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action); await viewFieldRepository.update(viewFieldId, update); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/create-view-filter-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/create-view-filter-action-handler.service.ts index 63d1fd9ae1..d07cb95caa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/create-view-filter-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/create-view-filter-action-handler.service.ts @@ -5,10 +5,10 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; -import { CreateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type'; +import { CreateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/delete-view-filter-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/delete-view-filter-action-handler.service.ts index d45c6c8c73..5a5204156f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/delete-view-filter-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/delete-view-filter-action-handler.service.ts @@ -5,10 +5,10 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; -import { DeleteViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type'; +import { DeleteViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/update-view-filter-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/update-view-filter-action-handler.service.ts index c3dd04c243..d35ea0fd3f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/update-view-filter-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-filter/services/update-view-filter-action-handler.service.ts @@ -5,13 +5,13 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { ViewFilterEntity } from 'src/engine/metadata-modules/view-filter/entities/view-filter.entity'; -import { UpdateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-filter-action-v2.type'; +import { UpdateViewFilterAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-filter/types/workspace-migration-view-filter-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateViewFilterActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -35,7 +35,7 @@ export class UpdateViewFilterActionHandlerService extends WorkspaceMigrationRunn const updatedViewFilter = { ...existingViewFilter, - ...fromWorkspaceMigrationUpdateActionToPartialEntity(action), + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), }; const updatedFlatViewFilterMaps = replaceFlatEntityInFlatEntityMapsOrThrow({ @@ -57,7 +57,7 @@ export class UpdateViewFilterActionHandlerService extends WorkspaceMigrationRunn const viewFilterRepository = queryRunner.manager.getRepository(ViewFilterEntity); - const update = fromWorkspaceMigrationUpdateActionToPartialEntity(action); + const update = fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action); await viewFilterRepository.update(viewFilterId, update); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts index cf1774ee31..d0b4938448 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts @@ -5,10 +5,10 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { CreateViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type'; +import { CreateViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/delete-view-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/delete-view-action-handler.service.ts index ae6303bac4..826202974b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/delete-view-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/delete-view-action-handler.service.ts @@ -5,10 +5,10 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { DeleteViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type'; +import { DeleteViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; @Injectable() diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/update-view-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/update-view-action-handler.service.ts index 6e08fb31a4..2c8c5f7e57 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/update-view-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/update-view-action-handler.service.ts @@ -5,13 +5,13 @@ import { WorkspaceMigrationRunnerActionHandler, } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; -import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; -import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { replaceFlatEntityInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util'; import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entity'; -import { UpdateViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-view-action-v2.type'; +import { UpdateViewAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/types/workspace-migration-view-action-v2.type'; import { WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -import { fromWorkspaceMigrationUpdateActionToPartialEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util'; +import { fromFlatEntityPropertiesUpdatesToPartialFlatEntity } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity'; @Injectable() export class UpdateViewActionHandlerService extends WorkspaceMigrationRunnerActionHandler( @@ -35,7 +35,7 @@ export class UpdateViewActionHandlerService extends WorkspaceMigrationRunnerActi const updatedView = { ...existingView, - ...fromWorkspaceMigrationUpdateActionToPartialEntity(action), + ...fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), }; const updatedFlatViewMaps = replaceFlatEntityInFlatEntityMapsOrThrow({ @@ -59,7 +59,7 @@ export class UpdateViewActionHandlerService extends WorkspaceMigrationRunnerActi await viewRepository.update( viewId, - fromWorkspaceMigrationUpdateActionToPartialEntity(action), + fromFlatEntityPropertiesUpdatesToPartialFlatEntity(action), ); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface.ts index 42a05ff1ad..94b51e2a34 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface.ts @@ -1,7 +1,11 @@ import { Inject, SetMetadata } from '@nestjs/common'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; import { LoggerService } from 'src/engine/core-modules/logger/logger.service'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; +import { AllMetadataName } from 'src/engine/metadata-modules/flat-entity/types/all-metadata-name.type'; +import { MetadataRelatedFlatEntityMapsKeys } from 'src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type'; +import { MetadataToFlatEntityMapsKey } from 'src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key'; +import { FromWorkspaceMigrationActionToMetadataName } from 'src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type'; import { type ExtractAction, type WorkspaceMigrationActionTypeV2, @@ -10,29 +14,20 @@ import { import { WORKSPACE_MIGRATION_ACTION_HANDLER_METADATA_KEY } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/constants/workspace-migration-action-handler-metadata-key.constant'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; -export interface WorkspaceMigrationRunnerActionHandlerService< - TActionType extends WorkspaceMigrationActionTypeV2, -> { - execute( - context: WorkspaceMigrationActionRunnerArgs>, - ): Promise>; - - rollback( - context: WorkspaceMigrationActionRunnerArgs>, - ): Promise; -} - +// TODO deprecated prastoin export type OptimisticallyApplyActionOnAllFlatEntityMapsArgs< TActionType extends WorkspaceMigrationActionV2, > = Pick< WorkspaceMigrationActionRunnerArgs, 'allFlatEntityMaps' | 'action' >; +/// export abstract class BaseWorkspaceMigrationRunnerActionHandlerService< TActionType extends WorkspaceMigrationActionTypeV2, -> implements WorkspaceMigrationRunnerActionHandlerService -{ + TMetadataName extends + AllMetadataName = FromWorkspaceMigrationActionToMetadataName, +> { public actionType: TActionType; @Inject(LoggerService) @@ -54,7 +49,11 @@ export abstract class BaseWorkspaceMigrationRunnerActionHandlerService< args: OptimisticallyApplyActionOnAllFlatEntityMapsArgs< ExtractAction >, - ): Partial { + ): Pick< + AllFlatEntityMaps, + | MetadataRelatedFlatEntityMapsKeys + | MetadataToFlatEntityMapsKey + > { return args.allFlatEntityMaps; } @@ -66,7 +65,13 @@ export abstract class BaseWorkspaceMigrationRunnerActionHandlerService< async execute( context: WorkspaceMigrationActionRunnerArgs>, - ): Promise> { + ): Promise< + Pick< + AllFlatEntityMaps, + | MetadataRelatedFlatEntityMapsKeys + | MetadataToFlatEntityMapsKey + > + > { await Promise.all([ this.asyncMethodPerformanceMetricWrapper({ label: 'executeForMetadata', diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/registry/workspace-migration-runner-action-handler-registry.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/registry/workspace-migration-runner-action-handler-registry.service.ts index 9c71f3ddf2..bb2851e3d8 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/registry/workspace-migration-runner-action-handler-registry.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/registry/workspace-migration-runner-action-handler-registry.service.ts @@ -3,9 +3,9 @@ import { DiscoveryService } from '@nestjs/core'; import { isDefined } from 'twenty-shared/utils'; -import { type WorkspaceMigrationRunnerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; +import { BaseWorkspaceMigrationRunnerActionHandlerService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type WorkspaceMigrationActionTypeV2, type WorkspaceMigrationActionV2, @@ -24,7 +24,7 @@ export class WorkspaceMigrationRunnerActionHandlerRegistryService { private readonly actionHandlers = new Map< WorkspaceMigrationActionTypeV2, - WorkspaceMigrationRunnerActionHandlerService + InstanceType >(); constructor(private readonly discoveryService: DiscoveryService) {} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/services/workspace-migration-runner-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/services/workspace-migration-runner-v2.service.ts index 7bc4cdbdd9..723abd88fa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/services/workspace-migration-runner-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/services/workspace-migration-runner-v2.service.ts @@ -7,9 +7,9 @@ import { WorkspaceQueryRunnerException, WorkspaceQueryRunnerExceptionCode, } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-runner.exception'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; -import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; import { LoggerService } from 'src/engine/core-modules/logger/logger.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; import { WorkspacePermissionsCacheService } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service'; import { WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type.ts index 2f00a0ae36..4ab73c60aa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type.ts @@ -1,6 +1,6 @@ import { type QueryRunner } from 'typeorm'; -import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { type AllFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type'; import { type WorkspaceMigrationActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2'; export type WorkspaceMigrationActionRunnerArgs< diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity.ts similarity index 76% rename from packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util.ts rename to packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity.ts index 47a5464bdf..ea92563800 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-workspace-migration-update-action-to-partial-field-or-object-entity.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/from-flat-entity-properties-updates-to-partial-flat-entity.ts @@ -1,4 +1,4 @@ -export const fromWorkspaceMigrationUpdateActionToPartialEntity = < +export const fromFlatEntityPropertiesUpdatesToPartialFlatEntity = < T extends { updates: Array<{ property: string; to: unknown }> }, >( action: T, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts index 5278f86c00..44f8d5f7aa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/workspace-migration-runner-v2.module.ts @@ -2,9 +2,9 @@ import { Module } from '@nestjs/common'; import { DiscoveryModule } from '@nestjs/core'; import { TypeORMModule } from 'src/database/typeorm/typeorm.module'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { WorkspaceMetadataCacheModule } from 'src/engine/metadata-modules/workspace-metadata-cache/workspace-metadata-cache.module'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; import { WorkspacePermissionsCacheModule } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.module'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts index b762185b80..6a6f14a0ef 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.module.ts @@ -1,13 +1,13 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { AgentRoleModule } from 'src/engine/metadata-modules/agent-role/agent-role.module'; import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module'; import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; +import { WorkspaceManyOrAllFlatEntityMapsCacheModule } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.module'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; import { WorkspaceMetadataVersionModule } from 'src/engine/metadata-modules/workspace-metadata-version/workspace-metadata-version.module'; import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity'; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts index 175ef1303b..b5860e248b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/workspace-sync-metadata.service.ts @@ -5,7 +5,7 @@ import { DataSource, QueryFailedError } from 'typeorm'; import { type WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface'; -import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service'; +import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service'; import { WorkspaceMetadataVersionService } from 'src/engine/metadata-modules/workspace-metadata-version/services/workspace-metadata-version.service'; import { WorkspaceMigrationEntity, diff --git a/packages/twenty-shared/src/types/Arrayable.ts b/packages/twenty-shared/src/types/Arrayable.ts new file mode 100644 index 0000000000..b60bf24248 --- /dev/null +++ b/packages/twenty-shared/src/types/Arrayable.ts @@ -0,0 +1,3 @@ +export type Arrayable = { + [P in keyof T]: Array; +}; diff --git a/packages/twenty-shared/src/types/IsEmptyRecord.type.ts b/packages/twenty-shared/src/types/IsEmptyRecord.type.ts new file mode 100644 index 0000000000..2cdaf0dc3e --- /dev/null +++ b/packages/twenty-shared/src/types/IsEmptyRecord.type.ts @@ -0,0 +1 @@ +export type IsEmptyRecord = keyof T extends never ? true : false; diff --git a/packages/twenty-shared/src/types/extract-properties-that-ends-with-id.ts b/packages/twenty-shared/src/types/extract-properties-that-ends-with-id.ts new file mode 100644 index 0000000000..7089a54c15 --- /dev/null +++ b/packages/twenty-shared/src/types/extract-properties-that-ends-with-id.ts @@ -0,0 +1,9 @@ +export type ExtractPropertiesThatEndsWithId = { + [K in keyof T]: K extends `${infer _}Id` + ? K extends TExcluded + ? never + : T[K] extends string | null | undefined + ? K + : never + : never; +}[keyof T]; diff --git a/packages/twenty-shared/src/types/index.ts b/packages/twenty-shared/src/types/index.ts index ba5ede770d..15bde652d8 100644 --- a/packages/twenty-shared/src/types/index.ts +++ b/packages/twenty-shared/src/types/index.ts @@ -11,11 +11,13 @@ export type { AllowedAddressSubField } from './AddressFieldsType'; export { ALLOWED_ADDRESS_SUBFIELDS } from './AddressFieldsType'; export { AppBasePath } from './AppBasePath'; export { AppPath } from './AppPath'; +export type { Arrayable } from './Arrayable'; export type { CompositeFieldSubFieldName } from './CompositeFieldSubFieldNameType'; export type { ConfigVariableValue } from './ConfigVariableValue'; export { ConnectedAccountProvider } from './ConnectedAccountProvider'; export type { EnumFieldMetadataType } from './EnumFieldMetadataType'; export type { ExcludeFunctions } from './ExcludeFunctions'; +export type { ExtractPropertiesThatEndsWithId } from './extract-properties-that-ends-with-id'; export type { FieldMetadataMultiItemSettings } from './FieldMetadataMultiItemSettings'; export { FieldMetadataType } from './FieldMetadataType'; export type { FieldRatingValue } from './FieldRatingValue'; @@ -25,6 +27,7 @@ export type { } from './FilterableFieldType'; export { FILTERABLE_FIELD_TYPES } from './FilterableFieldType'; export type { FromTo } from './FromToType'; +export type { IsEmptyRecord } from './IsEmptyRecord.type'; export type { IsExactly } from './IsExactly'; export type { NonNullableRequired } from './NonNullableRequired'; export type { Nullable } from './Nullable';