diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts index 5dd57ec4b..6cbff8dfe 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids.ts @@ -244,6 +244,7 @@ export const MESSAGE_CHANNEL_STANDARD_FIELD_IDS = { excludeNonProfessionalEmails: '20202020-1df5-445d-b4f3-2413ad178431', excludeGroupEmails: '20202020-45a0-4be4-9164-5820a6a109fb', messageChannelMessageAssociations: '20202020-49b8-4766-88fd-75f1e21b3d5f', + messageFolders: '20202020-cc39-4432-9fe8-ec8ab8bbed94', isSyncEnabled: '20202020-d9a6-48e9-990b-b97fdf22e8dd', syncCursor: '20202020-79d1-41cf-b738-bcf5ed61e256', syncedAt: '20202020-263d-4c6b-ad51-137ada56f7d4', @@ -253,6 +254,12 @@ export const MESSAGE_CHANNEL_STANDARD_FIELD_IDS = { throttleFailureCount: '20202020-0291-42be-9ad0-d578a51684ab', }; +export const MESSAGE_FOLDER_STANDARD_FIELD_IDS = { + name: '20202020-7cf8-40bc-a681-b80b771449b7', + messageChannel: '20202020-b658-408f-bd46-3bd2d15d7e52', + syncCursor: '20202020-98cd-49ed-8dfc-cb5796400e64', +}; + export const MESSAGE_PARTICIPANT_STANDARD_FIELD_IDS = { message: '20202020-985b-429a-9db9-9e55f4898a2a', role: '20202020-65d1-42f4-8729-c9ec1f52aecd', diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons.ts index 94b8ea3cf..e24ab0e2b 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons.ts @@ -16,6 +16,7 @@ export const STANDARD_OBJECT_ICONS = { auditLog: 'IconTimelineEvent', messageChannelMessageAssociation: 'IconMessage', messageChannel: 'IconMessage', + messageFolder: 'IconFolder', messageParticipant: 'IconUserCircle', messageThread: 'IconMessage', messageThreadSubscriber: 'IconPerson', diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids.ts index e8ee42b9a..c5ad0f69d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids.ts @@ -25,6 +25,7 @@ export const STANDARD_OBJECT_IDS = { auditLog: '20202020-0566-476a-b4c4-a0f9781bd80a', messageChannelMessageAssociation: '20202020-ad1e-4127-bccb-d83ae04d2ccb', messageChannel: '20202020-fe8c-40bc-a681-b80b771449b7', + messageFolder: '20202020-4955-4fd9-8e59-2dbd373f2a46', messageParticipant: '20202020-a433-4456-aa2d-fd9cb26b774a', messageThread: '20202020-849a-4c3e-84f5-a25a7d802271', messageThreadSubscriber: '20202020-4b3b-4b3b-8b3b-3b3b3b3b3b3a', diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts index 73536e65e..e447739e6 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/standard-objects/index.ts @@ -11,6 +11,7 @@ import { FavoriteFolderWorkspaceEntity } from 'src/modules/favorite-folder/stand import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity'; import { MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; +import { MessageFolderWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-folder.workspace-entity'; import { MessageParticipantWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-participant.workspace-entity'; import { MessageThreadWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-thread.workspace-entity'; import { MessageWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message.workspace-entity'; @@ -68,6 +69,7 @@ export const standardObjectMetadataDefinitions = [ MessageWorkspaceEntity, MessageChannelWorkspaceEntity, MessageParticipantWorkspaceEntity, + MessageFolderWorkspaceEntity, MessageChannelMessageAssociationWorkspaceEntity, NoteWorkspaceEntity, NoteTargetWorkspaceEntity, 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 79f5bc02a..2acaae970 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 @@ -22,6 +22,7 @@ import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sy import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity'; import { MessageChannelMessageAssociationWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel-message-association.workspace-entity'; +import { MessageFolderWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-folder.workspace-entity'; export enum MessageChannelSyncStatus { NOT_SYNCED = 'NOT_SYNCED', @@ -380,4 +381,16 @@ export class MessageChannelWorkspaceEntity extends BaseWorkspaceEntity { messageChannelMessageAssociations: Relation< MessageChannelMessageAssociationWorkspaceEntity[] >; + + @WorkspaceRelation({ + standardId: MESSAGE_CHANNEL_STANDARD_FIELD_IDS.messageFolders, + type: RelationMetadataType.ONE_TO_MANY, + label: msg`Message Folders`, + description: msg`Message Folders`, + icon: 'IconFolder', + inverseSideTarget: () => MessageFolderWorkspaceEntity, + onDelete: RelationOnDeleteAction.CASCADE, + }) + @WorkspaceIsNullable() + messageFolders: 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 new file mode 100644 index 000000000..efb9cb345 --- /dev/null +++ b/packages/twenty-server/src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts @@ -0,0 +1,59 @@ +import { msg } from '@lingui/core/macro'; +import { FieldMetadataType } from 'twenty-shared'; +import { Relation } from 'typeorm'; + +import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; +import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; +import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator'; +import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; +import { WorkspaceIsNotAuditLogged } from 'src/engine/twenty-orm/decorators/workspace-is-not-audit-logged.decorator'; +import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; +import { WorkspaceJoinColumn } from 'src/engine/twenty-orm/decorators/workspace-join-column.decorator'; +import { WorkspaceRelation } from 'src/engine/twenty-orm/decorators/workspace-relation.decorator'; +import { MESSAGE_FOLDER_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; +import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons'; +import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; +import { MessageChannelWorkspaceEntity } from 'src/modules/messaging/common/standard-objects/message-channel.workspace-entity'; + +@WorkspaceEntity({ + standardId: STANDARD_OBJECT_IDS.messageFolder, + namePlural: 'messageFolders', + labelSingular: msg`Message Folder`, + labelPlural: msg`Message Folders`, + description: msg`Folder for Message Channel`, + icon: STANDARD_OBJECT_ICONS.messageFolder, +}) +@WorkspaceIsNotAuditLogged() +@WorkspaceIsSystem() +export class MessageFolderWorkspaceEntity extends BaseWorkspaceEntity { + @WorkspaceField({ + standardId: MESSAGE_FOLDER_STANDARD_FIELD_IDS.name, + type: FieldMetadataType.TEXT, + label: msg`Name`, + description: msg`Folder name`, + icon: 'IconFolder', + }) + name: string; + + @WorkspaceRelation({ + standardId: MESSAGE_FOLDER_STANDARD_FIELD_IDS.messageChannel, + type: RelationMetadataType.MANY_TO_ONE, + label: msg`Message Channel`, + description: msg`Message Channel`, + icon: 'IconMessage', + inverseSideTarget: () => MessageChannelWorkspaceEntity, + }) + messageChannel: Relation; + + @WorkspaceField({ + standardId: MESSAGE_FOLDER_STANDARD_FIELD_IDS.syncCursor, + type: FieldMetadataType.TEXT, + label: msg`Sync Cursor`, + description: msg`Sync Cursor`, + icon: 'IconHash', + }) + syncCursor: string; + + @WorkspaceJoinColumn('messageChannel') + messageChannelId: string; +}