From 4d7dbb1991986d91a611df4feef12c0c2a367f4f Mon Sep 17 00:00:00 2001 From: martmull Date: Thu, 24 Apr 2025 18:32:14 +0200 Subject: [PATCH] Fix missing on delete cascade for relation (#11725) Follow up from https://github.com/twentyhq/twenty/pull/10217 Adding onDelete action on Many_to_one sides --- .../standard-objects/attachment.workspace-entity.ts | 8 ++++++++ .../standard-objects/blocklist.workspace-entity.ts | 2 ++ ...ndar-channel-event-association.workspace-entity.ts | 3 +++ .../calendar-channel.workspace-entity.ts | 1 + .../calendar-event-participant.workspace-entity.ts | 4 ++++ .../connected-account.workspace-entity.ts | 1 + .../standard-objects/favorite.workspace-entity.ts | 11 +++++++++++ ...ge-channel-message-association.workspace-entity.ts | 3 +++ .../message-channel.workspace-entity.ts | 1 + .../message-folder.workspace-entity.ts | 2 ++ .../message-participant.workspace-entity.ts | 4 ++++ .../standard-objects/note-target.workspace-entity.ts | 6 ++++++ .../standard-objects/person.workspace-entity.ts | 1 + .../standard-objects/task-target.workspace-entity.ts | 6 ++++++ .../standard-objects/audit-log.workspace-entity.ts | 2 ++ .../timeline-activity.workspace-entity.ts | 11 +++++++++++ .../workflow-event-listener.workspace-entity.ts | 2 ++ .../standard-objects/workflow-run.workspace-entity.ts | 2 ++ .../workflow-version.workspace-entity.ts | 1 + 19 files changed, 71 insertions(+) diff --git a/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts b/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts index f8d311aad..c6d1906cf 100644 --- a/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts +++ b/packages/twenty-server/src/modules/attachment/standard-objects/attachment.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; @@ -69,6 +70,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCircleUser', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'authoredAttachments', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() author: Relation | null; @@ -84,6 +86,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconNotes', inverseSideTarget: () => TaskWorkspaceEntity, inverseSideFieldKey: 'attachments', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() task: Relation | null; @@ -99,6 +102,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconNotes', inverseSideTarget: () => NoteWorkspaceEntity, inverseSideFieldKey: 'attachments', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() note: Relation | null; @@ -114,6 +118,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'attachments', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() person: Relation | null; @@ -129,6 +134,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'attachments', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() company: Relation | null; @@ -144,6 +150,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => OpportunityWorkspaceEntity, inverseSideFieldKey: 'attachments', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() opportunity: Relation | null; @@ -163,6 +170,7 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity { }), inverseSideTarget: () => CustomWorkspaceEntity, inverseSideFieldKey: 'attachments', + onDelete: RelationOnDeleteAction.CASCADE, }) custom: Relation; } diff --git a/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts b/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts index 380f1cded..3f3e18262 100644 --- a/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts +++ b/packages/twenty-server/src/modules/blocklist/standard-objects/blocklist.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -45,6 +46,7 @@ export class BlocklistWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCircleUser', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'blocklist', + onDelete: RelationOnDeleteAction.SET_NULL, }) workspaceMember: Relation; diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts index 978fd3c15..010997a16 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -57,6 +58,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac icon: 'IconCalendar', inverseSideTarget: () => CalendarChannelWorkspaceEntity, inverseSideFieldKey: 'calendarChannelEventAssociations', + onDelete: RelationOnDeleteAction.CASCADE, }) calendarChannel: Relation; @@ -72,6 +74,7 @@ export class CalendarChannelEventAssociationWorkspaceEntity extends BaseWorkspac icon: 'IconCalendar', inverseSideTarget: () => CalendarEventWorkspaceEntity, inverseSideFieldKey: 'calendarChannelEventAssociations', + onDelete: RelationOnDeleteAction.CASCADE, }) calendarEvent: Relation; diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts index ed8999130..5abfb5df1 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts @@ -307,6 +307,7 @@ export class CalendarChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUserCircle', inverseSideTarget: () => ConnectedAccountWorkspaceEntity, inverseSideFieldKey: 'calendarChannels', + onDelete: RelationOnDeleteAction.CASCADE, }) connectedAccount: Relation; diff --git a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts index 9a289fbfa..48f7c7422 100644 --- a/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts +++ b/packages/twenty-server/src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -111,6 +112,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity icon: 'IconCalendar', inverseSideTarget: () => CalendarEventWorkspaceEntity, inverseSideFieldKey: 'calendarEventParticipants', + onDelete: RelationOnDeleteAction.CASCADE, }) calendarEvent: Relation; @@ -125,6 +127,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'calendarEventParticipants', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() person: Relation | null; @@ -140,6 +143,7 @@ export class CalendarEventParticipantWorkspaceEntity extends BaseWorkspaceEntity icon: 'IconUser', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'calendarEventParticipants', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() workspaceMember: Relation | null; diff --git a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts index a629d66aa..de8992dd1 100644 --- a/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts +++ b/packages/twenty-server/src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts @@ -117,6 +117,7 @@ export class ConnectedAccountWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUserCircle', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'connectedAccounts', + onDelete: RelationOnDeleteAction.CASCADE, }) accountOwner: Relation; diff --git a/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts b/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts index 5b952f35e..8f7a4e94a 100644 --- a/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts +++ b/packages/twenty-server/src/modules/favorite/standard-objects/favorite.workspace-entity.ts @@ -61,6 +61,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCircleUser', inverseSideFieldKey: 'favorites', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() forWorkspaceMember: Relation; @@ -76,6 +77,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() person: Relation | null; @@ -91,6 +93,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() company: Relation | null; @@ -106,6 +109,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconFolder', inverseSideTarget: () => FavoriteFolderWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() favoriteFolder: Relation | null; @@ -121,6 +125,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => OpportunityWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() opportunity: Relation | null; @@ -136,6 +141,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettingsAutomation', inverseSideTarget: () => WorkflowWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflow: Relation | null; @@ -151,6 +157,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettingsAutomation', inverseSideTarget: () => WorkflowVersionWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflowVersion: Relation | null; @@ -166,6 +173,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettingsAutomation', inverseSideTarget: () => WorkflowRunWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflowRun: Relation | null; @@ -181,6 +189,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCheckbox', inverseSideTarget: () => TaskWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() task: Relation | null; @@ -196,6 +205,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconNotes', inverseSideTarget: () => NoteWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() note: Relation | null; @@ -231,6 +241,7 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity { }), inverseSideTarget: () => CustomWorkspaceEntity, inverseSideFieldKey: 'favorites', + onDelete: RelationOnDeleteAction.CASCADE, }) custom: Relation; } diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts index 9c0a275f8..d92b0a6d9 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -93,6 +94,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa icon: 'IconHash', inverseSideTarget: () => MessageChannelWorkspaceEntity, inverseSideFieldKey: 'messageChannelMessageAssociations', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() messageChannel: Relation | null; @@ -108,6 +110,7 @@ export class MessageChannelMessageAssociationWorkspaceEntity extends BaseWorkspa icon: 'IconHash', inverseSideTarget: () => MessageWorkspaceEntity, inverseSideFieldKey: 'messageChannelMessageAssociations', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() message: Relation | null; diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts index c1ad6eb19..d2004971a 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts @@ -359,6 +359,7 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUserCircle', inverseSideTarget: () => ConnectedAccountWorkspaceEntity, inverseSideFieldKey: 'messageChannels', + onDelete: RelationOnDeleteAction.CASCADE, }) connectedAccount: Relation; diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts index ba4442c6f..5cb4c73ba 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts @@ -3,6 +3,7 @@ import { Relation } from 'typeorm'; import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -44,6 +45,7 @@ export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconMessage', inverseSideTarget: () => MessageChannelWorkspaceEntity, inverseSideFieldKey: 'messageFolders', + onDelete: RelationOnDeleteAction.CASCADE, }) messageChannel: Relation; diff --git a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts index cec06c5a1..c07cdefdc 100644 --- a/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -73,6 +74,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconMessage', inverseSideTarget: () => MessageWorkspaceEntity, inverseSideFieldKey: 'messageParticipants', + onDelete: RelationOnDeleteAction.CASCADE, }) message: Relation; @@ -87,6 +89,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'messageParticipants', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() person: Relation | null; @@ -102,6 +105,7 @@ export class MessageParticipantWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCircleUser', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'messageParticipants', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() workspaceMember: Relation | null; diff --git a/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts b/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts index 21cc84bde..13d93cdd7 100644 --- a/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts +++ b/packages/twenty-server/src/modules/note/standard-objects/note-target.workspace-entity.ts @@ -2,6 +2,7 @@ import { msg } from '@lingui/core/macro'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; @@ -37,6 +38,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconNotes', inverseSideTarget: () => NoteWorkspaceEntity, inverseSideFieldKey: 'noteTargets', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() note: Relation | null; @@ -52,6 +54,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'noteTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() person: Relation | null; @@ -67,6 +70,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'noteTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() company: Relation | null; @@ -82,6 +86,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => OpportunityWorkspaceEntity, inverseSideFieldKey: 'noteTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() opportunity: Relation | null; @@ -101,6 +106,7 @@ export class NoteTargetWorkspaceEntity extends BaseWorkspaceEntity { }), inverseSideTarget: () => CustomWorkspaceEntity, inverseSideFieldKey: 'noteTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) custom: Relation; } diff --git a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts index 29fd39a60..361887d28 100644 --- a/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts +++ b/packages/twenty-server/src/modules/person/standard-objects/person.workspace-entity.ts @@ -185,6 +185,7 @@ export class PersonWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'people', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() company: Relation | null; diff --git a/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts b/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts index 603c3988e..0a247a20f 100644 --- a/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts +++ b/packages/twenty-server/src/modules/task/standard-objects/task-target.workspace-entity.ts @@ -2,6 +2,7 @@ import { msg } from '@lingui/core/macro'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; @@ -37,6 +38,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCheckbox', inverseSideTarget: () => TaskWorkspaceEntity, inverseSideFieldKey: 'taskTargets', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() task: Relation | null; @@ -52,6 +54,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'taskTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() person: Relation | null; @@ -67,6 +70,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'taskTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() company: Relation | null; @@ -82,6 +86,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => OpportunityWorkspaceEntity, inverseSideFieldKey: 'taskTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() opportunity: Relation | null; @@ -101,6 +106,7 @@ export class TaskTargetWorkspaceEntity extends BaseWorkspaceEntity { }), inverseSideTarget: () => CustomWorkspaceEntity, inverseSideFieldKey: 'taskTargets', + onDelete: RelationOnDeleteAction.CASCADE, }) custom: Relation; } diff --git a/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts b/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts index 440a4771f..e22dcac42 100644 --- a/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts +++ b/packages/twenty-server/src/modules/timeline/standard-objects/audit-log.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -92,6 +93,7 @@ export class AuditLogWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCircleUser', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'auditLogs', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() workspaceMember: Relation | null; diff --git a/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts b/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts index 8a2eefa5b..d325762f4 100644 --- a/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts +++ b/packages/twenty-server/src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; @@ -106,6 +107,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconCircleUser', inverseSideTarget: () => WorkspaceMemberWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workspaceMember: Relation | null; @@ -121,6 +123,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconUser', inverseSideTarget: () => PersonWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() person: Relation | null; @@ -136,6 +139,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconBuildingSkyscraper', inverseSideTarget: () => CompanyWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() company: Relation | null; @@ -151,6 +155,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => OpportunityWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() opportunity: Relation | null; @@ -166,6 +171,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => NoteWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() note: Relation | null; @@ -181,6 +187,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => TaskWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.SET_NULL, }) @WorkspaceIsNullable() task: Relation | null; @@ -196,6 +203,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => WorkflowWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflow: Relation | null; @@ -211,6 +219,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => WorkflowVersionWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflowVersion: Relation | null; @@ -226,6 +235,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconTargetArrow', inverseSideTarget: () => WorkflowRunWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflowRun: Relation | null; @@ -245,6 +255,7 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity { }), inverseSideTarget: () => CustomWorkspaceEntity, inverseSideFieldKey: 'timelineActivities', + onDelete: RelationOnDeleteAction.CASCADE, }) custom: Relation; } diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts index 77389988b..26df1008f 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts @@ -3,6 +3,7 @@ import { FieldMetadataType } from 'twenty-shared/types'; import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; +import { RelationOnDeleteAction } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-on-delete-action.interface'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; @@ -45,6 +46,7 @@ export class WorkflowEventListenerWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettingsAutomation', inverseSideTarget: () => WorkflowWorkspaceEntity, inverseSideFieldKey: 'eventListeners', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflow: Relation; diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts index 6cfa552d3..b355ea73d 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts @@ -169,6 +169,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconVersions', inverseSideTarget: () => WorkflowVersionWorkspaceEntity, inverseSideFieldKey: 'runs', + onDelete: RelationOnDeleteAction.SET_NULL, }) workflowVersion: Relation; @@ -183,6 +184,7 @@ export class WorkflowRunWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettingsAutomation', inverseSideTarget: () => WorkflowWorkspaceEntity, inverseSideFieldKey: 'runs', + onDelete: RelationOnDeleteAction.CASCADE, }) workflow: Relation; diff --git a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts index 7858caaf4..67b5b2b04 100644 --- a/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts +++ b/packages/twenty-server/src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts @@ -127,6 +127,7 @@ export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { icon: 'IconSettingsAutomation', inverseSideTarget: () => WorkflowWorkspaceEntity, inverseSideFieldKey: 'versions', + onDelete: RelationOnDeleteAction.CASCADE, }) @WorkspaceIsNullable() workflow: Relation;