From 6188c72f74557ada29ea737eae186eb2f78e0892 Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Mon, 13 Oct 2025 10:31:34 +0200 Subject: [PATCH] Simplify and enhance v2 type devxp (#15032) # Introduction This PR introduces a huge type refactor that will leverage dynamic intra entity optimistic flat maps update in the future and also a more granular cache invalidation enhancing performances close https://github.com/twentyhq/core-team-issues/issues/1717 close https://github.com/twentyhq/core-team-issues/issues/1716 close https://github.com/twentyhq/core-team-issues/issues/1643 ## What's done ### Comparators centralization Comparator is now done through global configuration as const for each metadata names Thanks to Note: Definition of standard is evolving, standard is now scoped to an app. Meaning that a manifest should be able to update its own standards objects but on other app standards ones ? Each synchronizable entities will have a standardOverrides ? ## Typing refactor ### `AllFlatEntityTypesByMetadataName` **Single source of truth for the complete type ecosystem**, mapping each metadata name to its entity types, flat entities, and migration actions: ```typescript export type AllFlatEntityTypesByMetadataName = { fieldMetadata: { actions: { created: CreateFieldAction; updated: UpdateFieldAction; deleted: DeleteFieldAction; }; flatEntity: FlatFieldMetadata; entity: FieldMetadataEntity; }; objectMetadata: { /* ... */ }; // ... all 10 metadata types }; ``` ### `ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS` **Explicitly declares database relationships** between entities with compile-time validation: ```typescript export const ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS = { viewField: { view: 'viewId', fieldMetadata: 'fieldMetadataId', }, cronTrigger: { serverlessFunction: 'serverlessFunctionId', }, // ... all relations } as const satisfies MetadataNameAndRelations; ``` ### `ALL_FLAT_ENTITY_CONFIGURATION` **Centralizes comparison and serialization logic** for each metadata type: ```typescript export const ALL_FLAT_ENTITY_CONFIGURATION = { fieldMetadata: { propertiesToCompare: ['name', 'type', 'label', 'defaultValue', /* ... */], propertiesToStringify: ['options', 'settings', 'defaultValue'], }, objectMetadata: { propertiesToCompare: ['nameSingular', 'namePlural', 'isActive', /* ... */], propertiesToStringify: [], }, // ... all metadata types } as const satisfies AllFlatEntityConfiguration; ``` ## Combined Impact These three configurations work together to create a **strongly-typed, centrally-managed metadata system**: 1. **`AllFlatEntityTypesByMetadataName`** defines *what exists* 2. **`ALL_METADATA_NAME_MANY_TO_ONE_RELATIONS`** defines *how they relate* 3. **`ALL_FLAT_ENTITY_CONFIGURATION`** defines *how to compare and serialize them* **Result:** Builders and validators become thin wrappers around type-safe, configuration-driven logic instead of containing scattered, error-prone manual implementations. ## What's next ### StandardOverrides standardization Every metadata entity can be a standard one for a workspace if it's an installed app, which means it might not expose the whole entity api to be editable through an import dynamically The standard overrides logic should not be applied to Fields and Objects but to every entities At the moment we have a logic of `EDITABLE_PROPERTIES` through the api, and also `STANDARD_OVERRIDEDABLE_PROPERTIES` This should be configuration centered like `propertiesToCompare` and `propertiesToStringify`. Scoping this PR to two last for the moment. As update dispatch to standardOverrides could be considered as a side effect prefer waiting to start the side effect refactor ### Granular Optimistic deprecation With this new grain at runtime we will be able to add a flat entity and dispatch its addition to related flat maps, so we don't have to describe an optimistic method for each flat entity operations See `addFlatEntityToFlatEntityAndRelatedEntityMapsOrThrow` Note: Still in wip and included in this PR but about to create a new one to integrate these utils and remove existing methods ### ValidateBuildAndRun dynamic args typed defintion We should restrain the devxp to send expected flat maps entity as at least from to or dependency as we now have the grain both a type lvl and runtime to do so It should not be possible in the devxp to forgot adding the views to the v2 builder when passing the view field anymore ( that would lead to permanent validation error in view field integrity checks ) ## Conclusion Thanks for reading and reviewing ! Any suggestions are more than welcomed ! ( same as for questions too ! ) --- .../application/application-sync.service.ts | 2 +- .../application/application.module.ts | 14 +- .../application/application.service.ts | 2 +- .../empty-flat-entity-maps.constant.ts | 7 - ...t-entities-by-metadata-engine-name.type.ts | 23 -- .../common/types/all-flat-entities.type.ts | 4 - .../common/types/all-flat-entity-maps.type.ts | 9 - ...ngine-name-to-flat-entity-maps-key.type.ts | 5 - .../utils/compare-two-flat-entity.util.ts | 77 ----- .../__tests__/workspace.service.spec.ts | 2 +- .../workspace/services/workspace.service.ts | 4 +- .../workspace/workspace.module.ts | 2 +- .../engine/dataloaders/dataloader.module.ts | 2 +- .../engine/dataloaders/dataloader.service.ts | 6 +- ...-trigger-properties-to-compare.constant.ts | 6 - .../cron-trigger/cron-trigger.module.ts | 2 +- .../services/cron-trigger-v2.service.ts | 12 +- ...ace-flat-cron-trigger-map-cache.service.ts | 4 +- .../compare-two-flat-cron-trigger.util.ts | 69 ---- ...at-cron-trigger-to-update-or-throw.util.ts | 2 +- ...-trigger-properties-to-compare.constant.ts | 6 - .../database-event-trigger.module.ts | 2 +- .../database-event-trigger-v2.service.ts | 12 +- ...atabase-event-trigger-map-cache.service.ts | 4 +- ...vent-trigger-properties-to-compare.type.ts | 4 - ...re-two-flat-database-event-trigger.util.ts | 69 ---- ...e-event-trigger-to-update-or-throw.util.ts | 2 +- ...-standard-overrides-properties.constant.ts | 4 +- .../field-metadata/field-metadata.module.ts | 2 +- .../services/field-metadata.service-v2.ts | 12 +- .../services/field-metadata.service.ts | 2 +- ...ll-flat-entity-maps-properties.constant.ts | 2 +- ...rties-to-compare-and-stringify.constant.ts | 91 ++++++ ...metadata-many-to-one-relations.constant.ts | 62 ++++ .../constant/all-metadata-name.constant.ts | 12 + ...quired-metadata-for-validation.constant.ts | 46 +++ .../empty-all-flat-entity-maps.constant.ts | 4 +- .../empty-flat-entity-maps.constant.ts | 7 + .../exceptions/flat-entity-maps.exception.ts | 1 + ...ny-or-all-flat-entity-maps-cache.module.ts | 2 +- ...y-or-all-flat-entity-maps-cache.service.ts | 4 +- .../types/all-flat-entities.type.ts | 4 + ...ntity-by-metadata-engine-name-test.type.ts | 27 ++ .../types/all-flat-entity-maps.type.ts | 10 + .../all-flat-entity-types-by-metadata-name.ts | 162 ++++++++++ .../types/all-metadata-name.type.ts | 3 + .../types/flat-entity-maps.type.ts | 2 +- .../flat-entity-properties-to-compare.type.ts | 5 + ...lat-entity-properties-to-stringify.type.ts | 5 + .../flat-entity-properties-updates.type.ts | 11 + .../flat-entity}/types/flat-entity.type.ts | 0 .../flat-entity/types/metadata-entity.type.ts | 5 + .../types/metadata-flat-entity-maps.type.ts | 7 + .../types/metadata-flat-entity.type.ts | 5 + ...many-to-one-related-metadata-names.type.ts | 8 + .../types/metadata-name-and-relations.type.ts | 24 ++ ...data-related-flat-entity-maps-keys.type.ts | 6 + .../types/metadata-related-types.type.ts | 22 ++ .../types/metadata-to-flat-entity-maps-key.ts | 4 + ...-validation-related-metadata-names.type.ts | 16 + ...etadata-workspace-migration-action.type.ts | 31 ++ ...y-and-related-entity-maps-or-throw.util.ts | 88 ++++++ ...ntity-to-flat-entity-maps-or-throw.util.ts | 6 +- .../utils/compare-two-flat-entity.util.ts | 76 +++++ ...ity-from-flat-entity-maps-or-throw.util.ts | 6 +- ...by-id-in-flat-entity-maps-or-throw.util.ts | 6 +- ...t-entity-by-id-in-flat-entity-maps.util.ts | 4 +- ...by-id-in-flat-entity-maps-or-throw.util.ts | 6 +- .../get-metadata-flat-entity-maps-key.util.ts | 9 + .../get-sub-flat-entity-maps-or-throw.util.ts | 10 +- ...ntity-in-flat-entity-maps-or-throw.util.ts | 8 +- ...ansform-flat-entity-for-comparison.util.ts | 21 +- ...-to-flat-field-metadatas-to-create.spec.ts | 6 +- ...ield-metadata-jsonb-properties.constant.ts | 8 - ...metadata-properties-to-compare.constant.ts | 7 - ...relation-properties-to-compare.constant.ts | 4 +- ...t-field-metadata-type-validator.service.ts | 201 +++--------- ...e-flat-field-metadata-map-cache.service.ts | 6 +- ...at-field-metadata-jsonb-properties.type.ts | 4 - ...eld-metadata-properties-to-compare.type.ts | 4 - ...flat-field-metadata-type-validator.type.ts | 12 +- .../compare-two-flat-field-metadata.util.ts | 94 ------ ...tadata-related-flat-field-metadata.util.ts | 2 +- ...tion-flat-field-metadatas-or-throw.util.ts | 6 +- ...related-to-morph-relation-or-throw.util.ts | 2 +- ...arget-flat-field-metadata-or-throw.util.ts | 2 +- ...-to-flat-field-metadatas-to-create.util.ts | 2 +- ...-to-flat-field-metadatas-to-delete.util.ts | 8 +- ...ield-input-to-flat-field-metadatas.util.ts | 2 +- ...ield-input-to-flat-field-metadatas.util.ts | 2 +- ...field-input-to-flat-field-metadata.util.ts | 6 +- ...flat-field-metadata-jsonb-property.util.ts | 34 -- ...on-flat-field-metadata-name-update.util.ts | 4 +- .../validate-enum-flat-field-metadata.util.ts | 6 +- ...t-field-metadata-name-availability.util.ts | 6 +- ...ph-or-relation-flat-field-metadata.util.ts | 8 +- ...te-morph-relation-creation-payload.util.ts | 2 +- ...validate-relation-creation-payload.util.ts | 2 +- ...metadata-properties-to-compare.constant.ts | 9 - .../workspace-flat-index-map-cache.service.ts | 6 +- ...dex-metadata-properties-to-compare.type.ts | 4 - .../compare-two-flat-index-metadata.util.ts | 61 ---- .../flat-object-metadata-maps.mock.ts | 4 +- ...ject-metadata-jsonb-properties.constant.ts | 5 - ...metadata-properties-to-compare.constant.ts | 14 - ...-flat-object-metadata-map-cache.service.ts | 4 +- ...t-object-metadata-jsonb-properties.type.ts | 4 - ...ect-metadata-properties-to-compare.type.ts | 4 - .../compare-two-flat-object-metadata.util.ts | 91 ------ ...and-flat-field-metadatas-to-create.util.ts | 2 +- ...-to-flat-field-metadatas-to-delete.util.ts | 6 +- ...metadata-and-related-flat-entities.util.ts | 12 +- ...tion-flat-field-metadatas-or-throw.util.ts | 4 +- ...ed-flat-object-metadata-validation.util.ts | 6 +- ...ject-metadata-singular-name-update.util.ts | 4 +- ...fter-flat-object-identifier-update.util.ts | 4 +- ...morph-field-on-object-names-update.util.ts | 4 +- ...e-flat-object-metadata-identifiers.util.ts | 4 +- ...at-object-metadata-name-and-labels.util.ts | 2 +- ...ew-field-properties-to-compare.constant.ts | 7 - ...space-flat-view-field-map-cache.service.ts | 4 +- .../types/flat-view-field-maps.type.ts | 2 +- ...t-view-field-properties-to-compare.type.ts | 4 - .../utils/compare-two-flat-view-field.util.ts | 22 -- ...t-view-filter-jsonb-properties.constant.ts | 5 - ...w-filter-properties-to-compare.constant.ts | 8 - ...pace-flat-view-filter-map-cache.service.ts | 4 +- .../types/flat-view-filter-maps.type.ts | 2 +- ...-view-filter-properties-to-compare.type.ts | 4 - .../compare-two-flat-view-filter.util.ts | 23 -- ...lat-view-properties-to-compare.constant.ts | 8 - .../workspace-flat-view-map-cache.service.ts | 4 +- .../flat-view/types/flat-view-maps.type.ts | 2 +- .../flat-view-properties-to-compare.type.ts | 4 - .../utils/compare-two-flat-view.util.ts | 56 ---- .../utils/generate-flat-index.util.ts | 2 +- ...-standard-overrides-properties.constant.ts | 4 +- .../object-metadata-v2.service.ts | 16 +- .../object-metadata/object-metadata.module.ts | 2 +- .../object-metadata.service.ts | 2 +- ...-field-metadatas-for-custom-object.util.ts | 4 +- ...-trigger-properties-to-compare.constant.ts | 6 - .../route-trigger/route-trigger.module.ts | 2 +- .../services/route-trigger-v2.service.ts | 12 +- ...ce-flat-route-trigger-map-cache.service.ts | 4 +- ...oute-trigger-properties-to-compare.type.ts | 4 - .../compare-two-flat-route-trigger.util.ts | 59 ---- ...t-route-trigger-to-update-or-throw.util.ts | 2 +- ...function-properties-to-compare.constant.ts | 7 - .../serverless-function.module.ts | 4 +- .../serverless-function-v2.service.ts | 14 +- ...t-serverless-function-map-cache.service.ts | 4 +- ...ess-function-properties-to-compare.type.ts | 4 - ...mpare-two-flat-serverless-function.util.ts | 59 ---- ...erless-function-to-update-or-throw.util.ts | 2 +- ...ect-with-same-name-exists-or-throw.util.ts | 2 +- .../services/view-field-v2.service.ts | 14 +- .../view-field/view-field.module.ts | 2 +- .../services/view-filter-v2.service.ts | 14 +- .../view-filter/view-filter.module.ts | 2 +- .../view/services/view-v2.service.ts | 12 +- .../metadata-modules/view/view.module.ts | 2 +- .../utils/compute-object-target-table.util.ts | 4 +- .../workspace-flat-map-cache.decorator.ts | 2 +- ...rkspace-flat-map-cache-registry.service.ts | 2 +- .../workspace-flat-map-cache.service.ts | 4 +- .../dev-seeder/dev-seeder.module.ts | 2 +- .../dev-seeder/services/dev-seeder.service.ts | 2 +- ...ty-orchestrator-actions-report.constant.ts | 33 +- .../types/validate-error-response.type.ts | 10 +- ...ce-migration-build-orchestrator.service.ts | 6 +- .../types/is-property-update.type.ts | 8 + .../workspace-migration-orchestrator.type.ts | 17 +- ...ject-and-create-field-actions.util.spec.ts | 4 +- ...ject-and-delete-field-actions.util.spec.ts | 4 +- ...te-object-and-create-field-actions.util.ts | 4 +- ...ort-delete-object-and-delete-field.util.ts | 4 +- ...-created-updated-matrix-dispatcher.util.ts | 114 ++++--- ...-workspace-migration-action-record.util.ts | 13 + ...n-trigger-related-flat-entity-maps.type.ts | 6 - ...e-migration-cron-trigger-action-v2.type.ts | 0 ...-v2-cron-trigger-action-builder.service.ts | 127 +++----- ...t-trigger-related-flat-entity-maps.type.ts | 6 - ...n-database-event-trigger-action-v2.type.ts | 12 +- ...e-event-trigger-actions-builder.service.ts | 136 +++----- .../workspace-migration-field-action-v2.ts | 12 +- ...ration-v2-field-actions-builder.service.ts | 158 ++++------ .../workspace-migration-index-action-v2.ts | 0 ...ration-v2-index-actions-builder.service.ts | 161 +++++----- .../workspace-migration-object-action-v2.ts | 14 +- ...ation-v2-object-actions-builder.service.ts | 144 +++------ ...e-trigger-related-flat-entity-maps.type.ts | 6 - ...-migration-route-trigger-action-v2.type.ts | 12 +- ...2-route-trigger-actions-builder.service.ts | 130 +++----- ...tion-serverless-function-action-v2.type.ts | 12 +- ...erless-function-actions-builder.service.ts | 132 ++++---- .../failed-flat-entity-validation.type.ts | 2 +- ...iew-field-related-flat-entity-maps.type.ts | 6 - ...ace-migration-view-field-action-v2.type.ts | 9 +- ...n-v2-view-field-actions-builder.service.ts | 132 +++----- ...ew-filter-related-flat-entity-maps.type.ts | 6 - ...ce-migration-view-filter-action-v2.type.ts | 12 +- ...-v2-view-filter-actions-builder.service.ts | 131 +++----- ...workspace-migration-view-action-v2.type.ts | 15 +- ...gration-v2-view-actions-builder.service.ts | 130 +++----- ...ace-entity-migration-builder-v2.service.ts | 298 +++++------------- ...led-flat-entity-validate-and-build.type.ts | 12 + ...flat-entity-update-validation-args.type.ts | 11 + .../types/flat-entity-validation-args.type.ts | 14 + .../flat-entity-validation-result.type.ts | 20 ++ ...ful-flat-entity-validate-and-build.type.ts | 11 + .../types/to-merge.type.ts | 3 - .../workspace-migration-action-common-v2.ts | 24 +- .../types/workspace-migration-v2.ts | 6 +- .../flat-cron-trigger-validator.service.ts | 108 ++++--- ...atabase-event-trigger-validator.service.ts | 114 ++++--- .../flat-field-metadata-validator.service.ts | 144 +++++---- .../flat-index-metadata-validator.service.ts | 45 ++- .../flat-object-metadata-validator.service.ts | 76 ++--- .../flat-route-trigger-validator.service.ts | 108 ++++--- ...t-serverless-function-validator.service.ts | 97 +++--- .../flat-view-field-validator.service.ts | 81 ++--- .../flat-view-filter-validator.service.ts | 62 ++-- .../services/flat-view-validator.service.ts | 104 +++--- ...ate-cron-trigger-action-handler.service.ts | 2 +- ...ete-cron-trigger-action-handler.service.ts | 2 +- ...ate-cron-trigger-action-handler.service.ts | 6 +- ...se-event-trigger-action-handler.service.ts | 2 +- ...se-event-trigger-action-handler.service.ts | 2 +- ...se-event-trigger-action-handler.service.ts | 6 +- .../create-field-action-handler.service.ts | 8 +- .../delete-field-action-handler.service.ts | 8 +- .../update-field-action-handler.service.ts | 25 +- .../create-index-action-handler.service.ts | 10 +- .../delete-index-action-handler.service.ts | 8 +- .../create-object-action-handler.service.ts | 6 +- .../delete-object-action-handler.service.ts | 10 +- .../update-object-action-handler.service.ts | 32 +- ...te-route-trigger-action-handler.service.ts | 2 +- ...te-route-trigger-action-handler.service.ts | 2 +- ...te-route-trigger-action-handler.service.ts | 6 +- ...verless-function-action-handler.service.ts | 2 +- ...verless-function-action-handler.service.ts | 4 +- ...verless-function-action-handler.service.ts | 10 +- ...reate-view-field-action-handler.service.ts | 6 +- ...elete-view-field-action-handler.service.ts | 6 +- ...pdate-view-field-action-handler.service.ts | 14 +- ...eate-view-filter-action-handler.service.ts | 6 +- ...lete-view-filter-action-handler.service.ts | 6 +- ...date-view-filter-action-handler.service.ts | 14 +- .../create-view-action-handler.service.ts | 6 +- .../delete-view-action-handler.service.ts | 6 +- .../update-view-action-handler.service.ts | 14 +- ...runner-action-handler-service.interface.ts | 39 ++- ...-runner-action-handler-registry.service.ts | 6 +- .../workspace-migration-runner-v2.service.ts | 4 +- ...space-migration-action-runner-args.type.ts | 2 +- ...perties-updates-to-partial-flat-entity.ts} | 2 +- .../workspace-migration-runner-v2.module.ts | 2 +- .../workspace-sync-metadata.module.ts | 2 +- .../workspace-sync-metadata.service.ts | 2 +- packages/twenty-shared/src/types/Arrayable.ts | 3 + .../src/types/IsEmptyRecord.type.ts | 1 + .../extract-properties-that-ends-with-id.ts | 9 + packages/twenty-shared/src/types/index.ts | 3 + 265 files changed, 2537 insertions(+), 3166 deletions(-) delete mode 100644 packages/twenty-server/src/engine/core-modules/common/constant/empty-flat-entity-maps.constant.ts delete mode 100644 packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts delete mode 100644 packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities.type.ts delete mode 100644 packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts delete mode 100644 packages/twenty-server/src/engine/core-modules/common/types/from-metadata-engine-name-to-flat-entity-maps-key.type.ts delete mode 100644 packages/twenty-server/src/engine/core-modules/common/utils/compare-two-flat-entity.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/cron-trigger/constants/flat-cron-trigger-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/cron-trigger/utils/compare-two-flat-cron-trigger.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/database-event-trigger/constants/flat-database-event-trigger-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/database-event-trigger/types/flat-database-event-trigger-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/database-event-trigger/utils/compare-two-flat-database-event-trigger.util.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/constant/all-flat-entity-maps-properties.constant.ts (75%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-flat-entity-properties-to-compare-and-stringify.constant.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-many-to-one-relations.constant.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-name.constant.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-metadata-required-metadata-for-validation.constant.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/constant/empty-all-flat-entity-maps.constant.ts (70%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/empty-flat-entity-maps.constant.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/exceptions/flat-entity-maps.exception.ts (90%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/services/workspace-many-or-all-flat-entity-maps-cache.module.ts (81%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/services/workspace-many-or-all-flat-entity-maps-cache.service.ts (92%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entities.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-by-metadata-engine-name-test.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-maps.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-flat-entity-types-by-metadata-name.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/all-metadata-name.type.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/types/flat-entity-maps.type.ts (60%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-compare.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-to-stringify.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/flat-entity-properties-updates.type.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/types/flat-entity.type.ts (100%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-entity.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity-maps.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-flat-entity.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-related-metadata-names.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-name-and-relations.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-flat-entity-maps-keys.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-related-types.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-to-flat-entity-maps-key.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-validation-related-metadata-names.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/types/metadata-workspace-migration-action.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/add-flat-entity-to-flat-entity-and-related-entity-maps-or-throw.util.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/add-flat-entity-to-flat-entity-maps-or-throw.util.ts (75%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/compare-two-flat-entity.util.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util.ts (79%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts (72%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/find-flat-entity-by-id-in-flat-entity-maps.util.ts (63%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/find-many-flat-entity-by-id-in-flat-entity-maps-or-throw.util.ts (63%) create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-entity/utils/get-metadata-flat-entity-maps-key.util.ts rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/get-sub-flat-entity-maps-or-throw.util.ts (55%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/replace-flat-entity-in-flat-entity-maps-or-throw.util.ts (65%) rename packages/twenty-server/src/engine/{core-modules/common => metadata-modules/flat-entity}/utils/transform-flat-entity-for-comparison.util.ts (64%) delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-jsonb-properties.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/constants/flat-field-metadata-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-jsonb-properties.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/compare-two-flat-field-metadata.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-jsonb-property.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-jsonb-properties.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/constants/flat-object-metadata-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-jsonb-properties.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-object-metadata/utils/compare-two-flat-object-metadata.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-field/constants/flat-view-field-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-field/types/flat-view-field-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-field/utils/compare-two-flat-view-field.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-jsonb-properties.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-filter/constants/flat-view-filter-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-filter/types/flat-view-filter-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view-filter/utils/compare-two-flat-view-filter.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view/constants/flat-view-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view/types/flat-view-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-view/utils/compare-two-flat-view.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/route-trigger/constants/flat-route-trigger-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/route-trigger/types/flat-route-trigger-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/route-trigger/utils/compare-two-flat-route-trigger.util.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/serverless-function/constants/flat-serverless-function-properties-to-compare.constant.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/serverless-function/types/flat-serverless-function-properties-to-compare.type.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/serverless-function/utils/compare-two-flat-serverless-function.util.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/is-property-update.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/utils/get-metadata-empty-workspace-migration-action-record.util.ts delete mode 100644 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 rename 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 (100%) delete mode 100644 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 rename 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 (58%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/{ => builders/field}/types/workspace-migration-field-action-v2.ts (59%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/{ => builders/index}/types/workspace-migration-index-action-v2.ts (100%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/{ => builders/object}/types/workspace-migration-object-action-v2.ts (64%) delete mode 100644 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 rename 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 (55%) rename 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 (66%) delete mode 100644 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 rename 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 (60%) delete mode 100644 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 rename 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 (59%) rename packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/{ => builders/view}/types/workspace-migration-view-action-v2.type.ts (50%) create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/failed-flat-entity-validate-and-build.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-result.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/successful-flat-entity-validate-and-build.type.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/to-merge.type.ts rename 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 => from-flat-entity-properties-updates-to-partial-flat-entity.ts} (76%) create mode 100644 packages/twenty-shared/src/types/Arrayable.ts create mode 100644 packages/twenty-shared/src/types/IsEmptyRecord.type.ts create mode 100644 packages/twenty-shared/src/types/extract-properties-that-ends-with-id.ts 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';