Merge messages and threads #1 (#3583)

* Merge messages and threads

* rename messageChannelSync to messageChannelMessage

* add merge logic

* remove deprecated methods

* restore enqueue GmailFullSyncJob after connectedAccount creation
This commit is contained in:
Weiko
2024-01-23 17:28:14 +01:00
committed by GitHub
parent 23a3614b54
commit dc7fccb0a8
13 changed files with 298 additions and 344 deletions

View File

@ -6,6 +6,7 @@ import { CommentObjectMetadata } from 'src/workspace/workspace-sync-metadata/sta
import { CompanyObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/company.object-metadata';
import { ConnectedAccountObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/connected-account.object-metadata';
import { FavoriteObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/favorite.object-metadata';
import { MessageChannelMessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel-message.object-metadata';
import { MessageChannelObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel.object-metadata';
import { MessageParticipantObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-participant.object-metadata';
import { MessageThreadObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-thread.object-metadata';
@ -42,4 +43,5 @@ export const standardObjectMetadata = [
MessageObjectMetadata,
MessageChannelObjectMetadata,
MessageParticipantObjectMetadata,
MessageChannelMessageObjectMetadata,
];

View File

@ -0,0 +1,71 @@
import { FieldMetadataType } from 'src/metadata/field-metadata/field-metadata.entity';
import { FieldMetadata } from 'src/workspace/workspace-sync-metadata/decorators/field-metadata.decorator';
import { Gate } from 'src/workspace/workspace-sync-metadata/decorators/gate.decorator';
import { IsNullable } from 'src/workspace/workspace-sync-metadata/decorators/is-nullable.decorator';
import { IsSystem } from 'src/workspace/workspace-sync-metadata/decorators/is-system.decorator';
import { ObjectMetadata } from 'src/workspace/workspace-sync-metadata/decorators/object-metadata.decorator';
import { BaseObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/base.object-metadata';
import { MessageChannelObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel.object-metadata';
import { MessageThreadObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-thread.object-metadata';
import { MessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message.object-metadata';
@ObjectMetadata({
namePlural: 'messageChannelMessages',
labelSingular: 'Message Channel Message',
labelPlural: 'Message Channel Messages',
description: 'Message Synced with a Message Channel',
icon: 'IconMessage',
})
@Gate({
featureFlag: 'IS_MESSAGING_ENABLED',
})
@IsSystem()
export class MessageChannelMessageObjectMetadata extends BaseObjectMetadata {
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Channel Id',
description: 'Message Channel Id',
icon: 'IconHash',
joinColumn: 'messageChannelId',
})
@IsNullable()
messageChannel: MessageChannelObjectMetadata;
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Id',
description: 'Message Id',
icon: 'IconHash',
joinColumn: 'messageId',
})
@IsNullable()
message: MessageObjectMetadata;
@FieldMetadata({
type: FieldMetadataType.TEXT,
label: 'Message External Id',
description: 'Message id from the messaging provider',
icon: 'IconHash',
})
@IsNullable()
messageExternalId: string;
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Thread Id',
description: 'Message Thread Id',
icon: 'IconHash',
joinColumn: 'messageThreadId',
})
@IsNullable()
messageThread: MessageThreadObjectMetadata;
@FieldMetadata({
type: FieldMetadataType.TEXT,
label: 'Thread External Id',
description: 'Thread id from the messaging provider',
icon: 'IconHash',
})
@IsNullable()
messageThreadExternalId: string;
}

View File

@ -8,7 +8,7 @@ import { ObjectMetadata } from 'src/workspace/workspace-sync-metadata/decorators
import { RelationMetadata } from 'src/workspace/workspace-sync-metadata/decorators/relation-metadata.decorator';
import { BaseObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/base.object-metadata';
import { ConnectedAccountObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/connected-account.object-metadata';
import { MessageThreadObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-thread.object-metadata';
import { MessageChannelMessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel-message.object-metadata';
@ObjectMetadata({
namePlural: 'messageChannels',
@ -23,12 +23,21 @@ import { MessageThreadObjectMetadata } from 'src/workspace/workspace-sync-metada
@IsSystem()
export class MessageChannelObjectMetadata extends BaseObjectMetadata {
@FieldMetadata({
// This will be a type select later: metadata, subject, share_everything
type: FieldMetadataType.TEXT,
type: FieldMetadataType.SELECT,
label: 'Visibility',
description: 'Visibility',
icon: 'IconEyeglass',
defaultValue: { value: 'metadata' },
options: [
{ value: 'metadata', label: 'Metadata', position: 0, color: 'green' },
{ value: 'subject', label: 'Subject', position: 1, color: 'blue' },
{
value: 'share_everything',
label: 'Share Everything',
position: 2,
color: 'orange',
},
],
defaultValue: { value: 'share_everything' },
})
visibility: string;
@ -50,24 +59,28 @@ export class MessageChannelObjectMetadata extends BaseObjectMetadata {
connectedAccount: ConnectedAccountObjectMetadata;
@FieldMetadata({
// This will be a type select later : email, sms, chat
type: FieldMetadataType.TEXT,
type: FieldMetadataType.SELECT,
label: 'Type',
description: 'Type',
description: 'Channel Type',
icon: 'IconMessage',
options: [
{ value: 'email', label: 'Email', position: 0, color: 'green' },
{ value: 'sms', label: 'SMS', position: 1, color: 'blue' },
],
defaultValue: { value: 'email' },
})
type: string;
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Threads',
description: 'Threads from the channel.',
label: 'Message Channel Syncs',
description: 'Messages from the channel.',
icon: 'IconMessage',
})
@RelationMetadata({
type: RelationMetadataType.ONE_TO_MANY,
objectName: 'messageThread',
objectName: 'messageChannelMessage',
})
@IsNullable()
messageThreads: MessageThreadObjectMetadata[];
messageChannelMessage: MessageChannelMessageObjectMetadata[];
}

View File

@ -7,7 +7,7 @@ import { IsSystem } from 'src/workspace/workspace-sync-metadata/decorators/is-sy
import { ObjectMetadata } from 'src/workspace/workspace-sync-metadata/decorators/object-metadata.decorator';
import { RelationMetadata } from 'src/workspace/workspace-sync-metadata/decorators/relation-metadata.decorator';
import { BaseObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/base.object-metadata';
import { MessageChannelObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel.object-metadata';
import { MessageChannelMessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel-message.object-metadata';
import { MessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message.object-metadata';
@ObjectMetadata({
@ -22,43 +22,6 @@ import { MessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/sta
})
@IsSystem()
export class MessageThreadObjectMetadata extends BaseObjectMetadata {
@FieldMetadata({
// will be an array
type: FieldMetadataType.TEXT,
label: 'External Id',
description: 'Thread id from the messaging provider',
icon: 'IconMessage',
})
externalId: string;
@FieldMetadata({
type: FieldMetadataType.TEXT,
label: 'Subject',
description: 'Subject',
icon: 'IconMessage',
})
subject: string;
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Channel Id',
description: 'Message Channel Id',
icon: 'IconHash',
joinColumn: 'messageChannelId',
})
@IsNullable()
messageChannel: MessageChannelObjectMetadata;
@FieldMetadata({
// This will be a type select later: default, subject, share_everything
type: FieldMetadataType.TEXT,
label: 'Visibility',
description: 'Visibility',
icon: 'IconEyeglass',
defaultValue: { value: 'default' },
})
visibility: string;
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Messages',
@ -71,4 +34,17 @@ export class MessageThreadObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
messages: MessageObjectMetadata[];
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Channel Syncs',
description: 'Messages from the channel.',
icon: 'IconMessage',
})
@RelationMetadata({
type: RelationMetadataType.ONE_TO_MANY,
objectName: 'messageChannelMessage',
})
@IsNullable()
messageChannelMessage: MessageChannelMessageObjectMetadata[];
}

View File

@ -7,6 +7,7 @@ import { IsSystem } from 'src/workspace/workspace-sync-metadata/decorators/is-sy
import { ObjectMetadata } from 'src/workspace/workspace-sync-metadata/decorators/object-metadata.decorator';
import { RelationMetadata } from 'src/workspace/workspace-sync-metadata/decorators/relation-metadata.decorator';
import { BaseObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/base.object-metadata';
import { MessageChannelMessageObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-channel-message.object-metadata';
import { MessageParticipantObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-participant.object-metadata';
import { MessageThreadObjectMetadata } from 'src/workspace/workspace-sync-metadata/standard-objects/message-thread.object-metadata';
@ -22,15 +23,6 @@ import { MessageThreadObjectMetadata } from 'src/workspace/workspace-sync-metada
})
@IsSystem()
export class MessageObjectMetadata extends BaseObjectMetadata {
@FieldMetadata({
// will be an array
type: FieldMetadataType.TEXT,
label: 'External Id',
description: 'Message id from the messaging provider',
icon: 'IconHash',
})
externalId: string;
@FieldMetadata({
type: FieldMetadataType.TEXT,
label: 'Header message Id',
@ -50,11 +42,14 @@ export class MessageObjectMetadata extends BaseObjectMetadata {
messageThread: MessageThreadObjectMetadata;
@FieldMetadata({
// will be a select later: incoming, outgoing
type: FieldMetadataType.TEXT,
type: FieldMetadataType.SELECT,
label: 'Direction',
description: 'Direction',
description: 'Message Direction',
icon: 'IconDirection',
options: [
{ value: 'incoming', label: 'Incoming', position: 0, color: 'green' },
{ value: 'outgoing', label: 'Outgoing', position: 1, color: 'blue' },
],
defaultValue: { value: 'incoming' },
})
direction: string;
@ -97,4 +92,17 @@ export class MessageObjectMetadata extends BaseObjectMetadata {
})
@IsNullable()
messageParticipants: MessageParticipantObjectMetadata[];
@FieldMetadata({
type: FieldMetadataType.RELATION,
label: 'Message Channel Syncs',
description: 'Messages from the channel.',
icon: 'IconMessage',
})
@RelationMetadata({
type: RelationMetadataType.ONE_TO_MANY,
objectName: 'messageChannelMessage',
})
@IsNullable()
messageChannelMessage: MessageChannelMessageObjectMetadata[];
}