Migrate page layout services (#16443)

Last step of the page layout migration:
- Migrate services
- Write integration tests
This commit is contained in:
Raphaël Bosi
2025-12-10 14:49:44 +01:00
committed by GitHub
parent 1839f8e946
commit f48adb5f07
157 changed files with 6099 additions and 7586 deletions
@@ -4,11 +4,12 @@ import { msg, t } from '@lingui/core/macro';
import { type ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { isDefined } from 'twenty-shared/utils';
import { type FlatPageLayoutTab } from 'src/engine/metadata-modules/flat-page-layout-tab/types/flat-page-layout-tab.type';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { type FlatPageLayoutTab } from 'src/engine/metadata-modules/flat-page-layout-tab/types/flat-page-layout-tab.type';
import { PageLayoutExceptionCode } from 'src/engine/metadata-modules/page-layout/exceptions/page-layout.exception';
import { type FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type';
import { type FlatEntityUpdateValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-update-validation-args.type';
import { type FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type';
import { FlatEntityValidationArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-entity-validation-args.type';
const PAGE_LAYOUT_TAB_EXCEPTION_CODE = {
PAGE_LAYOUT_TAB_NOT_FOUND: 'PAGE_LAYOUT_TAB_NOT_FOUND',
@@ -18,6 +19,7 @@ const PAGE_LAYOUT_TAB_EXCEPTION_CODE = {
export class FlatPageLayoutTabValidatorService {
public validateFlatPageLayoutTabCreation({
flatEntityToValidate: flatPageLayoutTab,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: { flatPageLayoutMaps },
}: FlatEntityValidationArgs<
typeof ALL_METADATA_NAME.pageLayoutTab
>): FailedFlatEntityValidation<FlatPageLayoutTab> {
@@ -30,6 +32,19 @@ export class FlatPageLayoutTabValidatorService {
},
};
const referencedPageLayout = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: flatPageLayoutTab.pageLayoutId,
flatEntityMaps: flatPageLayoutMaps,
});
if (!isDefined(referencedPageLayout)) {
validationResult.errors.push({
code: PageLayoutExceptionCode.PAGE_LAYOUT_NOT_FOUND,
message: t`Page layout not found`,
userFriendlyMessage: msg`Page layout not found`,
});
}
return validationResult;
}
@@ -4,7 +4,9 @@ import { msg, t } from '@lingui/core/macro';
import { ALL_METADATA_NAME } from 'twenty-shared/metadata';
import { isDefined } from 'twenty-shared/utils';
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
import { FlatPageLayoutWidget } from 'src/engine/metadata-modules/flat-page-layout-widget/types/flat-page-layout-widget.type';
import { PageLayoutTabExceptionCode } from 'src/engine/metadata-modules/page-layout/exceptions/page-layout-tab.exception';
import { PageLayoutWidgetExceptionCode } from 'src/engine/metadata-modules/page-layout/exceptions/page-layout-widget.exception';
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';
@@ -95,6 +97,7 @@ export class FlatPageLayoutWidgetValidatorService {
public validateFlatPageLayoutWidgetCreation({
flatEntityToValidate: flatPageLayoutWidgetToValidate,
optimisticFlatEntityMapsAndRelatedFlatEntityMaps: {
flatPageLayoutTabMaps,
flatPageLayoutWidgetMaps: optimisticFlatPageLayoutWidgetMaps,
},
}: FlatEntityValidationArgs<
@@ -124,6 +127,19 @@ export class FlatPageLayoutWidgetValidatorService {
});
}
const referencedPageLayoutTab = findFlatEntityByIdInFlatEntityMaps({
flatEntityId: flatPageLayoutWidgetToValidate.pageLayoutTabId,
flatEntityMaps: flatPageLayoutTabMaps,
});
if (!isDefined(referencedPageLayoutTab)) {
validationResult.errors.push({
code: PageLayoutTabExceptionCode.PAGE_LAYOUT_TAB_NOT_FOUND,
message: t`Page layout tab not found`,
userFriendlyMessage: msg`Page layout tab not found`,
});
}
return validationResult;
}
}