Skip to content

Commit 11a41b3

Browse files
authored
feat: created by email calendar (#6536)
This PR is a followup of #6324 to add support of EMAIL and CALENDAR source for the created by composite field.
1 parent dce5a64 commit 11a41b3

File tree

20 files changed

+377
-314
lines changed

20 files changed

+377
-314
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
"tslib": "^2.3.0",
193193
"tsup": "^8.0.1",
194194
"type-fest": "4.10.1",
195-
"typeorm": "^0.3.20",
195+
"typeorm": "patch:typeorm@0.3.20#./packages/twenty-server/patches/typeorm+0.3.20.patch",
196196
"typescript": "5.3.3",
197197
"use-context-selector": "^2.0.0",
198198
"use-debounce": "^10.0.0",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
diff --git a/node_modules/typeorm/common/PickKeysByType.d.ts b/node_modules/typeorm/common/PickKeysByType.d.ts
2+
index 55ad347..1a8a184 100644
3+
--- a/common/PickKeysByType.d.ts
4+
+++ b/common/PickKeysByType.d.ts
5+
@@ -1,6 +1,6 @@
6+
/**
7+
* Pick only the keys that match the Type `U`
8+
*/
9+
-export type PickKeysByType<T, U> = string & keyof {
10+
- [P in keyof T as T[P] extends U ? P : never]: T[P];
11+
-};
12+
+export type PickKeysByType<T, U> = string & {
13+
+ [P in keyof T]: Exclude<T[P], null> extends U ? P : never;
14+
+}[keyof T];
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
import { BlocklistRepository } from 'src/modules/blocklist/repositories/blocklist.repository';
2-
import { CompanyRepository } from 'src/modules/company/repositories/company.repository';
32
import { ConnectedAccountRepository } from 'src/modules/connected-account/repositories/connected-account.repository';
43
import { MessageChannelMessageAssociationRepository } from 'src/modules/messaging/common/repositories/message-channel-message-association.repository';
54
import { MessageChannelRepository } from 'src/modules/messaging/common/repositories/message-channel.repository';
65
import { MessageParticipantRepository } from 'src/modules/messaging/common/repositories/message-participant.repository';
76
import { MessageThreadRepository } from 'src/modules/messaging/common/repositories/message-thread.repository';
87
import { MessageRepository } from 'src/modules/messaging/common/repositories/message.repository';
9-
import { PersonRepository } from 'src/modules/person/repositories/person.repository';
108
import { AuditLogRepository } from 'src/modules/timeline/repositiories/audit-log.repository';
119
import { TimelineActivityRepository } from 'src/modules/timeline/repositiories/timeline-activity.repository';
1210
import { WorkspaceMemberRepository } from 'src/modules/workspace-member/repositories/workspace-member.repository';
1311

1412
export const metadataToRepositoryMapping = {
1513
AuditLogWorkspaceEntity: AuditLogRepository,
1614
BlocklistWorkspaceEntity: BlocklistRepository,
17-
CompanyWorkspaceEntity: CompanyRepository,
1815
ConnectedAccountWorkspaceEntity: ConnectedAccountRepository,
1916
MessageChannelMessageAssociationWorkspaceEntity:
2017
MessageChannelMessageAssociationRepository,
2118
MessageChannelWorkspaceEntity: MessageChannelRepository,
2219
MessageWorkspaceEntity: MessageRepository,
2320
MessageParticipantWorkspaceEntity: MessageParticipantRepository,
2421
MessageThreadWorkspaceEntity: MessageThreadRepository,
25-
PersonWorkspaceEntity: PersonRepository,
2622
TimelineActivityWorkspaceEntity: TimelineActivityRepository,
2723
WorkspaceMemberWorkspaceEntity: WorkspaceMemberRepository,
2824
};

packages/twenty-server/src/engine/twenty-orm/repository/workspace.repository.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ import {
1818
SaveOptions,
1919
UpdateResult,
2020
} from 'typeorm';
21-
import { PickKeysByType } from 'typeorm/common/PickKeysByType';
2221
import { QueryDeepPartialEntity } from 'typeorm/query-builder/QueryPartialEntity';
2322
import { UpsertOptions } from 'typeorm/repository/UpsertOptions';
23+
import { PickKeysByType } from 'typeorm/common/PickKeysByType';
2424

2525
import { WorkspaceInternalContext } from 'src/engine/twenty-orm/interfaces/workspace-internal-context.interface';
2626

packages/twenty-server/src/modules/calendar/calendar-event-import-manager/calendar-event-import-manager.module.ts

-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import { CalendarEventWorkspaceEntity } from 'src/modules/calendar/common/standa
2727
import { ConnectedAccountModule } from 'src/modules/connected-account/connected-account.module';
2828
import { RefreshAccessTokenManagerModule } from 'src/modules/connected-account/refresh-access-token-manager/refresh-access-token-manager.module';
2929
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
30-
import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity';
3130
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
3231

3332
@Module({
@@ -41,7 +40,6 @@ import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/sta
4140
ObjectMetadataRepositoryModule.forFeature([
4241
ConnectedAccountWorkspaceEntity,
4342
BlocklistWorkspaceEntity,
44-
PersonWorkspaceEntity,
4543
WorkspaceMemberWorkspaceEntity,
4644
]),
4745
CalendarEventParticipantManagerModule,

packages/twenty-server/src/modules/calendar/calendar-event-import-manager/services/calendar-save-events.service.ts

+2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
CreateCompanyAndContactJob,
2020
CreateCompanyAndContactJobData,
2121
} from 'src/modules/contact-creation-manager/jobs/create-company-and-contact.job';
22+
import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
2223

2324
@Injectable()
2425
export class CalendarSaveEventsService {
@@ -153,6 +154,7 @@ export class CalendarSaveEventsService {
153154
workspaceId,
154155
connectedAccount,
155156
contactsToCreate: participantsToSave,
157+
source: FieldActorSource.CALENDAR,
156158
},
157159
);
158160
}

packages/twenty-server/src/modules/calendar/calendar-event-participant-manager/jobs/calendar-create-company-and-contact-after-sync.job.ts

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { TwentyORMManager } from 'src/engine/twenty-orm/twenty-orm.manager';
99
import { CalendarChannelWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity';
1010
import { CalendarEventParticipantWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-event-participant.workspace-entity';
1111
import { CreateCompanyAndContactService } from 'src/modules/contact-creation-manager/services/create-company-and-contact.service';
12+
import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
1213

1314
export type CalendarCreateCompanyAndContactAfterSyncJobData = {
1415
workspaceId: string;
@@ -96,6 +97,7 @@ export class CalendarCreateCompanyAndContactAfterSyncJob {
9697
connectedAccount,
9798
calendarEventParticipantsWithoutPersonIdAndWorkspaceMemberId,
9899
workspaceId,
100+
FieldActorSource.CALENDAR,
99101
);
100102

101103
this.logger.log(

packages/twenty-server/src/modules/company/repositories/company.repository.ts

-85
This file was deleted.

packages/twenty-server/src/modules/company/standard-objects/company.workspace-entity.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { Address } from 'nodemailer/lib/mailer';
2-
31
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
42

53
import {
@@ -32,6 +30,7 @@ import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/perso
3230
import { TaskTargetWorkspaceEntity } from 'src/modules/task/standard-objects/task-target.workspace-entity';
3331
import { TimelineActivityWorkspaceEntity } from 'src/modules/timeline/standard-objects/timeline-activity.workspace-entity';
3432
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
33+
import { AddressMetadata } from 'src/engine/metadata-modules/field-metadata/composite-types/address.composite-type';
3534

3635
@WorkspaceEntity({
3736
standardId: STANDARD_OBJECT_IDS.company,
@@ -60,7 +59,7 @@ export class CompanyWorkspaceEntity extends BaseWorkspaceEntity {
6059
'The company website URL. We use this url to fetch the company icon',
6160
icon: 'IconLink',
6261
})
63-
domainName?: string;
62+
domainName?: LinksMetadata;
6463

6564
@WorkspaceField({
6665
standardId: COMPANY_STANDARD_FIELD_IDS.employees,
@@ -111,7 +110,7 @@ export class CompanyWorkspaceEntity extends BaseWorkspaceEntity {
111110
icon: 'IconMap',
112111
})
113112
@WorkspaceIsNullable()
114-
address: Address;
113+
address: AddressMetadata;
115114

116115
@WorkspaceField({
117116
standardId: COMPANY_STANDARD_FIELD_IDS.idealCustomerProfile,

packages/twenty-server/src/modules/contact-creation-manager/contact-creation-manager.module.ts

+1-9
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,22 @@ import { Module } from '@nestjs/common';
22
import { TypeOrmModule } from '@nestjs/typeorm';
33

44
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
5-
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
65
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
76
import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module';
87
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
9-
import { CompanyWorkspaceEntity } from 'src/modules/company/standard-objects/company.workspace-entity';
108
import { AutoCompaniesAndContactsCreationCalendarChannelListener } from 'src/modules/contact-creation-manager/listeners/auto-companies-and-contacts-creation-calendar-channel.listener';
119
import { AutoCompaniesAndContactsCreationMessageChannelListener } from 'src/modules/contact-creation-manager/listeners/auto-companies-and-contacts-creation-message-channel.listener';
1210
import { CreateCompanyAndContactService } from 'src/modules/contact-creation-manager/services/create-company-and-contact.service';
1311
import { CreateCompanyService } from 'src/modules/contact-creation-manager/services/create-company.service';
1412
import { CreateContactService } from 'src/modules/contact-creation-manager/services/create-contact.service';
15-
import { PersonWorkspaceEntity } from 'src/modules/person/standard-objects/person.workspace-entity';
1613
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
1714

1815
@Module({
1916
imports: [
20-
ObjectMetadataRepositoryModule.forFeature([
21-
PersonWorkspaceEntity,
22-
WorkspaceMemberWorkspaceEntity,
23-
CompanyWorkspaceEntity,
24-
]),
17+
ObjectMetadataRepositoryModule.forFeature([WorkspaceMemberWorkspaceEntity]),
2518
WorkspaceDataSourceModule,
2619
TypeOrmModule.forFeature([FeatureFlagEntity], 'core'),
2720
TypeOrmModule.forFeature([ObjectMetadataEntity], 'metadata'),
28-
TypeOrmModule.forFeature([FieldMetadataEntity], 'metadata'),
2921
],
3022
providers: [
3123
CreateCompanyService,

packages/twenty-server/src/modules/contact-creation-manager/jobs/create-company-and-contact.job.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Process } from 'src/engine/integrations/message-queue/decorators/process.decorator';
22
import { Processor } from 'src/engine/integrations/message-queue/decorators/processor.decorator';
33
import { MessageQueue } from 'src/engine/integrations/message-queue/message-queue.constants';
4+
import { FieldActorSource } from 'src/engine/metadata-modules/field-metadata/composite-types/actor.composite-type';
45
import { ConnectedAccountWorkspaceEntity } from 'src/modules/connected-account/standard-objects/connected-account.workspace-entity';
56
import { CreateCompanyAndContactService } from 'src/modules/contact-creation-manager/services/create-company-and-contact.service';
67

@@ -11,6 +12,7 @@ export type CreateCompanyAndContactJobData = {
1112
displayName: string;
1213
handle: string;
1314
}[];
15+
source: FieldActorSource;
1416
};
1517

1618
@Processor(MessageQueue.contactCreationQueue)
@@ -21,7 +23,7 @@ export class CreateCompanyAndContactJob {
2123

2224
@Process(CreateCompanyAndContactJob.name)
2325
async handle(data: CreateCompanyAndContactJobData): Promise<void> {
24-
const { workspaceId, connectedAccount, contactsToCreate } = data;
26+
const { workspaceId, connectedAccount, contactsToCreate, source } = data;
2527

2628
await this.createCompanyAndContactService.createCompaniesAndContactsAndUpdateParticipants(
2729
connectedAccount,
@@ -30,6 +32,7 @@ export class CreateCompanyAndContactJob {
3032
displayName: contact.displayName,
3133
})),
3234
workspaceId,
35+
source,
3336
);
3437
}
3538
}

0 commit comments

Comments
 (0)