Refactor builder to embed Object validation create/delete/update (#13934)

# Introduction
Moving validation directly in the builder that has the perfect
granularity to do it.
When importing we won't have to infer and dispatch on the operation
nature ( update delete create ) and validate accordingly

## Objects
Only migrated object validation for the moment even though create object
involves a validate flat field metadata creation call too

## TODO
- improve `otherFlatObjectMetadataMapsToValidate` naming too vague

## Next
- handle fields validation within fields actions build
- Unit test coverage validation issue on builder and validate
- integration test plugging with new feature flag

## Manual tested
- Update
- Delete
- Create TODO
This commit is contained in:
Paul Rastoin
2025-08-18 11:16:16 +02:00
committed by GitHub
parent 18b2a68b69
commit 6629092645
51 changed files with 3800 additions and 617 deletions
@@ -0,0 +1,864 @@
import { FieldMetadataType } from 'twenty-shared/types';
import { DateDisplayFormat } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { getFlatFieldMetadataMock } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { RelationOnDeleteAction } from 'src/engine/metadata-modules/relation-metadata/relation-on-delete-action.type';
export const FAVORITE_FLAT_FIELDS_MOCK = {
position: getFlatFieldMetadataMock({
id: '64dbf3ef-a352-44bb-9055-f95822f18d0a',
standardId: '20202020-dd26-42c6-8c3c-2a7598c204f6',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.NUMBER,
name: 'position',
label: 'Position',
defaultValue: 0,
description: 'Favorite position',
icon: 'IconList',
standardOverrides: null,
options: null,
settings: null,
isCustom: false,
isActive: true,
isSystem: true,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-dd26-42c6-8c3c-2a7598c204f6',
flatRelationTargetFieldMetadata: null,
}),
id: getFlatFieldMetadataMock({
id: '49f58497-4e7c-49e6-b3bc-c91d4b8a8ddc',
standardId: '20202020-eda0-4cee-9577-3eb357e3c22b',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.UUID,
name: 'id',
label: 'Id',
defaultValue: 'uuid',
description: 'Id',
icon: 'Icon123',
standardOverrides: null,
options: null,
settings: null,
isCustom: false,
isActive: true,
isSystem: true,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-eda0-4cee-9577-3eb357e3c22b',
flatRelationTargetFieldMetadata: null,
}),
createdAt: getFlatFieldMetadataMock({
id: '0606a76c-8a72-48ca-90c6-526c729c25eb',
standardId: '20202020-66ac-4502-9975-e4d959c50311',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.DATE_TIME,
name: 'createdAt',
label: 'Creation date',
defaultValue: 'now',
description: 'Creation date',
icon: 'IconCalendar',
standardOverrides: null,
options: null,
settings: { displayFormat: DateDisplayFormat.RELATIVE },
isCustom: false,
isActive: true,
isSystem: false,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-66ac-4502-9975-e4d959c50311',
flatRelationTargetFieldMetadata: null,
}),
updatedAt: getFlatFieldMetadataMock({
id: 'fb202982-0c8e-4917-8dda-acb8248be749',
standardId: '20202020-d767-4622-bdcf-d8a084834d86',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.DATE_TIME,
name: 'updatedAt',
label: 'Last update',
defaultValue: 'now',
description: 'Last time the record was changed',
icon: 'IconCalendarClock',
standardOverrides: null,
options: null,
settings: { displayFormat: DateDisplayFormat.RELATIVE },
isCustom: false,
isActive: true,
isSystem: false,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-d767-4622-bdcf-d8a084834d86',
flatRelationTargetFieldMetadata: null,
}),
deletedAt: getFlatFieldMetadataMock({
id: 'ef52e151-a974-470f-bbe7-f345fd4eca65',
standardId: '20202020-b9a7-48d8-8387-b9a3090a50ec',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.DATE_TIME,
name: 'deletedAt',
label: 'Deleted at',
defaultValue: null,
description: 'Date when the record was deleted',
icon: 'IconCalendarMinus',
standardOverrides: null,
options: null,
settings: { displayFormat: DateDisplayFormat.RELATIVE },
isCustom: false,
isActive: true,
isSystem: false,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-b9a7-48d8-8387-b9a3090a50ec',
flatRelationTargetFieldMetadata: null,
}),
forWorkspaceMember: getFlatFieldMetadataMock({
id: '07f2c3ba-63d1-4e44-bac4-bc4591e51bac',
standardId: '20202020-ce63-49cb-9676-fdc0c45892cd',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'forWorkspaceMember',
label: 'Workspace Member',
defaultValue: null,
description: 'Favorite workspace member',
icon: 'IconCircleUser',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'forWorkspaceMemberId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: 'a15a4b41-1849-4dea-aa43-f53caad016be',
relationTargetObjectMetadataId: '7d8264db-2b55-4b74-81ff-b7064ed43840',
uniqueIdentifier: '20202020-ce63-49cb-9676-fdc0c45892cd',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: 'a15a4b41-1849-4dea-aa43-f53caad016be',
standardId: '20202020-f3c1-4faf-b343-cf7681038757',
objectMetadataId: '7d8264db-2b55-4b74-81ff-b7064ed43840',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the workspace member',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '07f2c3ba-63d1-4e44-bac4-bc4591e51bac',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-f3c1-4faf-b343-cf7681038757',
}),
}),
person: getFlatFieldMetadataMock({
id: '013cec20-e9cc-42db-b9b9-ff6bd0f52abd',
standardId: '20202020-c428-4f40-b6f3-86091511c41c',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'person',
label: 'Person',
defaultValue: null,
description: 'Favorite person',
icon: 'IconUser',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'personId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'a1a72bee-1c15-4598-ba23-67ba8e3e505d',
relationTargetObjectMetadataId: '843e0b67-9619-4628-91c4-2fa62256a611',
uniqueIdentifier: '20202020-c428-4f40-b6f3-86091511c41c',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: 'a1a72bee-1c15-4598-ba23-67ba8e3e505d',
standardId: '20202020-4073-4117-9cf1-203bcdc91cbd',
objectMetadataId: '843e0b67-9619-4628-91c4-2fa62256a611',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the contact',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '013cec20-e9cc-42db-b9b9-ff6bd0f52abd',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-4073-4117-9cf1-203bcdc91cbd',
}),
}),
company: getFlatFieldMetadataMock({
id: '9a11532c-6839-46ed-a2f5-ed03f88b86f6',
standardId: '20202020-cff5-4682-8bf9-069169e08279',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'company',
label: 'Company',
defaultValue: null,
description: 'Favorite company',
icon: 'IconBuildingSkyscraper',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'companyId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '72415216-fed4-450b-aa00-691e37718b01',
relationTargetObjectMetadataId: '7f5c2c7a-bb23-46fb-b59d-9b7a52a8d1cc',
uniqueIdentifier: '20202020-cff5-4682-8bf9-069169e08279',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '72415216-fed4-450b-aa00-691e37718b01',
standardId: '20202020-4d1d-41ac-b13b-621631298d55',
objectMetadataId: '7f5c2c7a-bb23-46fb-b59d-9b7a52a8d1cc',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the company',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '9a11532c-6839-46ed-a2f5-ed03f88b86f6',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-4d1d-41ac-b13b-621631298d55',
}),
}),
favoriteFolder: getFlatFieldMetadataMock({
id: 'fabbe669-b8fc-49fe-8010-f13d01eb61f1',
standardId: '20202020-f658-4d12-8b4d-248356aa4bd9',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'favoriteFolder',
label: 'Favorite Folder',
defaultValue: null,
description: 'The folder this favorite belongs to',
icon: 'IconFolder',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.SET_NULL,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'favoriteFolderId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '71b95076-6b8d-45c9-9a7c-ab981b81bd1b',
relationTargetObjectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
uniqueIdentifier: '20202020-f658-4d12-8b4d-248356aa4bd9',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '71b95076-6b8d-45c9-9a7c-ab981b81bd1b',
standardId: '20202020-b5e3-4b42-8af2-03cd4fd2e4d2',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites in this folder',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'fabbe669-b8fc-49fe-8010-f13d01eb61f1',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-b5e3-4b42-8af2-03cd4fd2e4d2',
}),
}),
opportunity: getFlatFieldMetadataMock({
id: '6380cf8e-4327-4d1e-ad21-1826ce4ecf05',
standardId: '20202020-dabc-48e1-8318-2781a2b32aa2',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'opportunity',
label: 'Opportunity',
defaultValue: null,
description: 'Favorite opportunity',
icon: 'IconTargetArrow',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'opportunityId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '87bb9924-a1cc-4357-9c8a-52141dabf266',
relationTargetObjectMetadataId: 'e6996bbf-dd41-423a-9324-8546f5b22fa7',
uniqueIdentifier: '20202020-dabc-48e1-8318-2781a2b32aa2',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '87bb9924-a1cc-4357-9c8a-52141dabf266',
standardId: '20202020-a1c2-4500-aaae-83ba8a0e827a',
objectMetadataId: 'e6996bbf-dd41-423a-9324-8546f5b22fa7',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the opportunity',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '6380cf8e-4327-4d1e-ad21-1826ce4ecf05',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-a1c2-4500-aaae-83ba8a0e827a',
}),
}),
workflow: getFlatFieldMetadataMock({
id: '12c20527-9b1d-4922-9650-00cc31b26387',
standardId: '20202020-b11b-4dc8-999a-6bd0a947b463',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'workflow',
label: 'Workflow',
defaultValue: null,
description: 'Favorite workflow',
icon: 'IconSettingsAutomation',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'workflowId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'b848abe8-276b-46c9-9eab-baf34d2a0583',
relationTargetObjectMetadataId: '664c19a5-0693-45d4-a4e5-76c3717db83c',
uniqueIdentifier: '20202020-b11b-4dc8-999a-6bd0a947b463',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: 'b848abe8-276b-46c9-9eab-baf34d2a0583',
standardId: '20202020-c554-4c41-be7a-cf9cd4b0d512',
objectMetadataId: '664c19a5-0693-45d4-a4e5-76c3717db83c',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the workflow',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '12c20527-9b1d-4922-9650-00cc31b26387',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-c554-4c41-be7a-cf9cd4b0d512',
}),
}),
workflowVersion: getFlatFieldMetadataMock({
id: '5cb92f25-c067-4e19-afb3-c7cc038ed1a4',
standardId: '20202020-e1b8-4caf-b55a-3ab4d4cbcd21',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'workflowVersion',
label: 'Workflow',
defaultValue: null,
description: 'Favorite workflow version',
icon: 'IconSettingsAutomation',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'workflowVersionId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: 'ea6b6bda-6ba7-4549-b81a-1f3ced0d4b25',
relationTargetObjectMetadataId: '99cf5f27-b41d-4f25-a23b-9e47d27dae9b',
uniqueIdentifier: '20202020-e1b8-4caf-b55a-3ab4d4cbcd21',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: 'ea6b6bda-6ba7-4549-b81a-1f3ced0d4b25',
standardId: '20202020-b8e0-4e57-928d-b51671cc71f2',
objectMetadataId: '99cf5f27-b41d-4f25-a23b-9e47d27dae9b',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the workflow version',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '5cb92f25-c067-4e19-afb3-c7cc038ed1a4',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-b8e0-4e57-928d-b51671cc71f2',
}),
}),
workflowRun: getFlatFieldMetadataMock({
id: 'a4bdd0d8-c36f-4519-812b-be4800ab14b0',
standardId: '20202020-db5a-4fe4-9a13-9afa22b1e762',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'workflowRun',
label: 'Workflow',
defaultValue: null,
description: 'Favorite workflow run',
icon: 'IconSettingsAutomation',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'workflowRunId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: '444a6e9e-443d-4f04-a60d-32f76f17049c',
relationTargetObjectMetadataId: '06d95e96-b050-443f-946e-dd276d291a2f',
uniqueIdentifier: '20202020-db5a-4fe4-9a13-9afa22b1e762',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '444a6e9e-443d-4f04-a60d-32f76f17049c',
standardId: '20202020-4baf-4604-b899-2f7fcfbbf90d',
objectMetadataId: '06d95e96-b050-443f-946e-dd276d291a2f',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the workflow run',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'a4bdd0d8-c36f-4519-812b-be4800ab14b0',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-4baf-4604-b899-2f7fcfbbf90d',
}),
}),
task: getFlatFieldMetadataMock({
id: 'db16ab78-ea3f-4b67-93e3-6ad9ab1b7273',
standardId: '20202020-1b1b-4b3b-8b1b-7f8d6a1d7d5c',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'task',
label: 'Task',
defaultValue: null,
description: 'Favorite task',
icon: 'IconCheckbox',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'taskId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '33e4eff0-ff0f-4530-802a-cd630481ee84',
relationTargetObjectMetadataId: '3186920d-2a15-4b5f-96c7-2bf6567024b0',
uniqueIdentifier: '20202020-1b1b-4b3b-8b1b-7f8d6a1d7d5c',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '33e4eff0-ff0f-4530-802a-cd630481ee84',
standardId: '20202020-4d1d-41ac-b13b-621631298d65',
objectMetadataId: '3186920d-2a15-4b5f-96c7-2bf6567024b0',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the task',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'db16ab78-ea3f-4b67-93e3-6ad9ab1b7273',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-4d1d-41ac-b13b-621631298d65',
}),
}),
note: getFlatFieldMetadataMock({
id: 'a61baf0f-2d43-4fda-9baf-efb000c17ecd',
standardId: '20202020-1f25-43fe-8b00-af212fdde824',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'note',
label: 'Note',
defaultValue: null,
description: 'Favorite note',
icon: 'IconNotes',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'noteId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '065a1ede-f773-48ca-84bf-70f61d838396',
relationTargetObjectMetadataId: '1253e3e5-5b00-4a34-93b8-02f3dc6e2b7c',
uniqueIdentifier: '20202020-1f25-43fe-8b00-af212fdde824',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '065a1ede-f773-48ca-84bf-70f61d838396',
standardId: '20202020-4d1d-41ac-b13b-621631298d67',
objectMetadataId: '1253e3e5-5b00-4a34-93b8-02f3dc6e2b7c',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the note',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'a61baf0f-2d43-4fda-9baf-efb000c17ecd',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-4d1d-41ac-b13b-621631298d67',
}),
}),
view: getFlatFieldMetadataMock({
id: 'accd216c-790e-4bd2-83bb-0700e06d0e5c',
standardId: '20202020-5a93-4fa9-acce-e73481a0bbdf',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'view',
label: 'View',
defaultValue: null,
description: 'Favorite view',
icon: 'IconLayoutCollage',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'viewId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '90a103ec-7dce-4bd4-aed4-e2c9d46ecf32',
relationTargetObjectMetadataId: '8377fc0d-ec1c-4fb5-b6ae-9381d9b22a95',
uniqueIdentifier: '20202020-5a93-4fa9-acce-e73481a0bbdf',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '90a103ec-7dce-4bd4-aed4-e2c9d46ecf32',
standardId: '20202020-c818-4a86-8284-9ec0ef0a59a5',
objectMetadataId: '8377fc0d-ec1c-4fb5-b6ae-9381d9b22a95',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites linked to the view',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'accd216c-790e-4bd2-83bb-0700e06d0e5c',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-c818-4a86-8284-9ec0ef0a59a5',
}),
}),
rocket: getFlatFieldMetadataMock({
id: '9448627d-725d-499e-a071-90fd5cfcf0ea',
standardId: '20202020-78f7-4d7d-86e9-7562ced0b381',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'rocket',
label: 'Rocket',
defaultValue: null,
description: 'Favorites Rocket',
icon: 'IconBuildingSkyscraper',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'rocketId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: '14010360-f3c2-442e-b05f-43c30158f246',
relationTargetObjectMetadataId: 'd78ec657-74a4-4652-a350-1f44ff62970a',
uniqueIdentifier: '20202020-78f7-4d7d-86e9-7562ced0b381',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '14010360-f3c2-442e-b05f-43c30158f246',
standardId: '20202020-a4a7-4686-b296-1c6c3482ee21',
objectMetadataId: 'd78ec657-74a4-4652-a350-1f44ff62970a',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites tied to the Rocket',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: '9448627d-725d-499e-a071-90fd5cfcf0ea',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-a4a7-4686-b296-1c6c3482ee21',
}),
}),
pet: getFlatFieldMetadataMock({
id: 'd34b4048-bf0c-4c61-8ffe-59f1838a2cc4',
standardId: '20202020-1bd7-4d10-80dc-968b9f5d1a8a',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'pet',
label: 'Pet',
defaultValue: null,
description: 'Favorites Pet',
icon: 'IconBuildingSkyscraper',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'petId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: '80bc4e7a-6bd1-4f2b-98b1-6333c631cc1a',
relationTargetObjectMetadataId: 'd34e0f07-1b8c-4de0-938e-599cf05e1f7f',
uniqueIdentifier: '20202020-1bd7-4d10-80dc-968b9f5d1a8a',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '80bc4e7a-6bd1-4f2b-98b1-6333c631cc1a',
standardId: '20202020-a4a7-4686-b296-1c6c3482ee21',
objectMetadataId: 'd34e0f07-1b8c-4de0-938e-599cf05e1f7f',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites tied to the Pet',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: 'd34b4048-bf0c-4c61-8ffe-59f1838a2cc4',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-a4a7-4686-b296-1c6c3482ee21',
}),
}),
surveyResult: getFlatFieldMetadataMock({
id: '9cdfb5a1-bb9c-4a59-811d-f5a1034a8f8b',
standardId: '20202020-d049-4912-80ee-43b09fe3b0ac',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'surveyResult',
label: 'Survey result',
defaultValue: null,
description: 'Favorites Survey result',
icon: 'IconBuildingSkyscraper',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.CASCADE,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'surveyResultId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: '8e11aced-3a20-4551-baa1-b38b98a74e1c',
relationTargetObjectMetadataId: '713da753-0340-49b5-b1fa-add34d2dc9a8',
uniqueIdentifier: '20202020-d049-4912-80ee-43b09fe3b0ac',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: '8e11aced-3a20-4551-baa1-b38b98a74e1c',
standardId: '20202020-a4a7-4686-b296-1c6c3482ee21',
objectMetadataId: '713da753-0340-49b5-b1fa-add34d2dc9a8',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites tied to the Survey result',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: '9cdfb5a1-bb9c-4a59-811d-f5a1034a8f8b',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-a4a7-4686-b296-1c6c3482ee21',
}),
}),
} as const satisfies Record<string, FlatFieldMetadata>;
@@ -0,0 +1,213 @@
import { FieldMetadataType } from 'twenty-shared/types';
import { DateDisplayFormat } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { getFlatFieldMetadataMock } from 'src/engine/metadata-modules/flat-field-metadata/__mocks__/get-flat-field-metadata.mock';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { RelationOnDeleteAction } from 'src/engine/metadata-modules/relation-metadata/relation-on-delete-action.type';
export const FAVORITE_FOLDER_FLAT_FIELDS_MOCK = {
position: getFlatFieldMetadataMock({
id: '5894ab56-99b7-49e8-98be-dd6524250df5',
standardId: '20202020-5278-4bde-8909-2cec74d43744',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.NUMBER,
name: 'position',
label: 'Position',
defaultValue: 0,
description: 'Favorite folder position',
icon: 'IconList',
standardOverrides: null,
options: null,
settings: null,
isCustom: false,
isActive: true,
isSystem: true,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-5278-4bde-8909-2cec74d43744',
flatRelationTargetFieldMetadata: null,
}),
name: getFlatFieldMetadataMock({
id: '1502abe0-b2f8-43a7-ae55-91c826b34ffe',
standardId: '20202020-82a3-4537-8ff0-dbce7eec35d6',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.TEXT,
name: 'name',
label: 'Name',
defaultValue: "''",
description: 'Name of the favorite folder',
icon: 'IconText',
standardOverrides: null,
options: null,
settings: null,
isCustom: false,
isActive: true,
isSystem: false,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-82a3-4537-8ff0-dbce7eec35d6',
flatRelationTargetFieldMetadata: null,
}),
id: getFlatFieldMetadataMock({
id: '85ab1864-0a92-4682-8583-82e8b696410b',
standardId: '20202020-eda0-4cee-9577-3eb357e3c22b',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.UUID,
name: 'id',
label: 'Id',
defaultValue: 'uuid',
description: 'Id',
icon: 'Icon123',
standardOverrides: null,
options: null,
settings: null,
isCustom: false,
isActive: true,
isSystem: true,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-eda0-4cee-9577-3eb357e3c22b',
flatRelationTargetFieldMetadata: null,
}),
createdAt: getFlatFieldMetadataMock({
id: 'a92b4b66-c2de-483e-8973-6f12bf36ac1a',
standardId: '20202020-66ac-4502-9975-e4d959c50311',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.DATE_TIME,
name: 'createdAt',
label: 'Creation date',
defaultValue: 'now',
description: 'Creation date',
icon: 'IconCalendar',
standardOverrides: null,
options: null,
settings: { displayFormat: DateDisplayFormat.RELATIVE },
isCustom: false,
isActive: true,
isSystem: false,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-66ac-4502-9975-e4d959c50311',
flatRelationTargetFieldMetadata: null,
}),
updatedAt: getFlatFieldMetadataMock({
id: '3907fc24-3bf0-4f0b-88be-f9635e473145',
standardId: '20202020-d767-4622-bdcf-d8a084834d86',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.DATE_TIME,
name: 'updatedAt',
label: 'Last update',
defaultValue: 'now',
description: 'Last time the record was changed',
icon: 'IconCalendarClock',
standardOverrides: null,
options: null,
settings: { displayFormat: DateDisplayFormat.RELATIVE },
isCustom: false,
isActive: true,
isSystem: false,
isNullable: false,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: false,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-d767-4622-bdcf-d8a084834d86',
flatRelationTargetFieldMetadata: null,
}),
deletedAt: getFlatFieldMetadataMock({
id: '52dcb335-5ce1-4165-a30b-4a61e84af21f',
standardId: '20202020-b9a7-48d8-8387-b9a3090a50ec',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.DATE_TIME,
name: 'deletedAt',
label: 'Deleted at',
defaultValue: null,
description: 'Date when the record was deleted',
icon: 'IconCalendarMinus',
standardOverrides: null,
options: null,
settings: { displayFormat: DateDisplayFormat.RELATIVE },
isCustom: false,
isActive: true,
isSystem: false,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: null,
relationTargetObjectMetadataId: null,
uniqueIdentifier: '20202020-b9a7-48d8-8387-b9a3090a50ec',
flatRelationTargetFieldMetadata: null,
}),
favorites: getFlatFieldMetadataMock({
id: '71b95076-6b8d-45c9-9a7c-ab981b81bd1b',
standardId: '20202020-b5e3-4b42-8af2-03cd4fd2e4d2',
objectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
type: FieldMetadataType.RELATION,
name: 'favorites',
label: 'Favorites',
defaultValue: null,
description: 'Favorites in this folder',
icon: 'IconHeart',
standardOverrides: null,
options: null,
settings: { relationType: RelationType.ONE_TO_MANY },
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: 'fabbe669-b8fc-49fe-8010-f13d01eb61f1',
relationTargetObjectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
uniqueIdentifier: '20202020-b5e3-4b42-8af2-03cd4fd2e4d2',
flatRelationTargetFieldMetadata: getFlatFieldMetadataMock({
id: 'fabbe669-b8fc-49fe-8010-f13d01eb61f1',
standardId: '20202020-f658-4d12-8b4d-248356aa4bd9',
objectMetadataId: 'f4749ffb-dde8-44ff-8b01-d3fc82df0ba2',
type: FieldMetadataType.RELATION,
name: 'favoriteFolder',
label: 'Favorite Folder',
defaultValue: null,
description: 'The folder this favorite belongs to',
icon: 'IconFolder',
standardOverrides: null,
options: null,
settings: {
onDelete: RelationOnDeleteAction.SET_NULL,
relationType: RelationType.MANY_TO_ONE,
joinColumnName: 'favoriteFolderId',
},
isCustom: false,
isActive: true,
isSystem: true,
isNullable: true,
isUnique: false,
workspaceId: '20202020-1c25-4d02-bf25-6aeccf7ea419',
isLabelSyncedWithName: true,
relationTargetFieldMetadataId: '71b95076-6b8d-45c9-9a7c-ab981b81bd1b',
relationTargetObjectMetadataId: '35763b74-1abe-4c4b-9eab-27693f0ee06d',
uniqueIdentifier: '20202020-f658-4d12-8b4d-248356aa4bd9',
}),
}),
} as const satisfies Record<string, FlatFieldMetadata>;
@@ -13,7 +13,7 @@ type FlatFieldMetadataOverrides<
export const getFlatFieldMetadataMock = <T extends FieldMetadataType>(
overrides: FlatFieldMetadataOverrides<T>,
): FlatFieldMetadata => {
const createdAt = new Date();
const createdAt = '2024-01-01T00:00:00.000Z' as unknown as Date;
return {
createdAt,
@@ -266,6 +266,19 @@ export class FlatFieldMetadataValidatorService {
),
);
} else {
if (
isDefined(
parentFlatObjectMetadata.fieldsById[flatFieldMetadataToValidate.id],
)
) {
errors.push(
new ObjectMetadataException(
'Field with same id already exists in object',
ObjectMetadataExceptionCode.OBJECT_MUTATION_NOT_ALLOWED,
),
);
}
if (parentFlatObjectMetadata.isRemote === true) {
errors.push(
new ObjectMetadataException(
@@ -8,22 +8,22 @@ import {
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
type GetRelationFlatFieldMetadatasUtilArgs = {
existingFlatObjectMetadataMaps: FlatObjectMetadataMaps;
export type GetRelationFlatFieldMetadatasUtilArgs = {
flatObjectMetadataMaps: FlatObjectMetadataMaps;
flatFieldMetadata: FlatFieldMetadata<
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
>;
};
// TODO prastoin handle morph relation
export const getRelationFlatFieldMetadatasOrThrow = ({
existingFlatObjectMetadataMaps,
export const findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow = ({
flatObjectMetadataMaps,
flatFieldMetadata,
}: GetRelationFlatFieldMetadatasUtilArgs): FlatFieldMetadata[] => {
}: GetRelationFlatFieldMetadatasUtilArgs): FlatFieldMetadata => {
const { relationTargetFieldMetadataId, relationTargetObjectMetadataId } =
flatFieldMetadata;
const relatedFlatObjectMetadata =
existingFlatObjectMetadataMaps.byId[relationTargetObjectMetadataId];
flatObjectMetadataMaps.byId[relationTargetObjectMetadataId];
if (!isDefined(relatedFlatObjectMetadata)) {
throw new FieldMetadataException(
@@ -41,5 +41,5 @@ export const getRelationFlatFieldMetadatasOrThrow = ({
);
}
return [flatFieldMetadata, relatedFlatFieldMetadata];
return relatedFlatFieldMetadata;
};
@@ -0,0 +1,15 @@
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import {
findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow,
type GetRelationFlatFieldMetadatasUtilArgs,
} from 'src/engine/metadata-modules/flat-field-metadata/utils/find-relation-flat-field-metadatas-target-flat-field-metadata-or-throw.util';
export const findRelationFlatFieldMetadataTargetFlatFieldMetadata = (
args: GetRelationFlatFieldMetadatasUtilArgs,
): FlatFieldMetadata | undefined => {
try {
return findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow(args);
} catch {
return undefined;
}
};
@@ -10,7 +10,7 @@ import {
FieldMetadataExceptionCode,
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { getRelationFlatFieldMetadatasOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/get-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';
import { isFlatFieldMetadataEntityOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
import { findFlatFieldMetadataInFlatObjectMetadataMapsWithOnlyFieldId } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-field-metadata-in-flat-object-metadata-maps-with-field-id-only.util';
@@ -52,10 +52,13 @@ export const fromDeleteFieldInputToFlatFieldMetadatasToDelete = ({
FieldMetadataType.MORPH_RELATION,
)
) {
return getRelationFlatFieldMetadatasOrThrow({
existingFlatObjectMetadataMaps,
flatFieldMetadata: flatFieldMetadataToDelete,
});
const relationTargetFlatFieldMetadata =
findRelationFlatFieldMetadataTargetFlatFieldMetadataOrThrow({
flatObjectMetadataMaps: existingFlatObjectMetadataMaps,
flatFieldMetadata: flatFieldMetadataToDelete,
});
return [flatFieldMetadataToDelete, relationTargetFlatFieldMetadata];
}
return [flatFieldMetadataToDelete];