4702 rename calendareventattendee to calendareventparticipant (#4761)

Closes #4702
This commit is contained in:
bosiraphael
2024-04-04 14:00:10 +02:00
committed by GitHub
parent 357882c395
commit 85caed3463
36 changed files with 305 additions and 330 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -34,6 +34,23 @@ export type ApiKeyToken = {
token: Scalars['String'];
};
export type AppToken = {
__typename?: 'AppToken';
createdAt: Scalars['DateTime'];
expiresAt: Scalars['DateTime'];
id: Scalars['ID'];
type: Scalars['String'];
updatedAt: Scalars['DateTime'];
};
export type AppTokenEdge = {
__typename?: 'AppTokenEdge';
/** Cursor for this node. */
cursor: Scalars['ConnectionCursor'];
/** The node containing the AppToken */
node: AppToken;
};
export type AuthProviders = {
__typename?: 'AuthProviders';
google: Scalars['Boolean'];
@@ -110,12 +127,6 @@ export type ClientConfig = {
telemetry: Telemetry;
};
export type CreateRemoteServerInput = {
foreignDataWrapperOptions: Scalars['JSON'];
foreignDataWrapperType: Scalars['String'];
userMappingOptions?: InputMaybe<Scalars['JSON']>;
};
export type CursorPaging = {
/** Paginate after opaque cursor */
after?: InputMaybe<Scalars['ConnectionCursor']>;
@@ -271,12 +282,10 @@ export type Mutation = {
authorizeApp: AuthorizeApp;
challenge: LoginToken;
checkoutSession: SessionEntity;
createOneAppToken: AppToken;
createOneObject: Object;
createOneRefreshToken: RefreshToken;
createOneRemoteServer: RemoteServer;
deleteCurrentWorkspace: Workspace;
deleteOneObject: Object;
deleteOneRemoteServer: RemoteServer;
deleteUser: User;
emailPasswordResetLink: EmailPasswordResetLink;
generateApiKeyToken: ApiKeyToken;
@@ -321,21 +330,11 @@ export type MutationCheckoutSessionArgs = {
};
export type MutationCreateOneRemoteServerArgs = {
input: CreateRemoteServerInput;
};
export type MutationDeleteOneObjectArgs = {
input: DeleteOneObjectInput;
};
export type MutationDeleteOneRemoteServerArgs = {
input: RemoteServerIdInput;
};
export type MutationEmailPasswordResetLinkArgs = {
email: Scalars['String'];
};
@@ -358,7 +357,7 @@ export type MutationImpersonateArgs = {
export type MutationRenewTokenArgs = {
refreshToken: Scalars['String'];
appToken: Scalars['String'];
};
@@ -463,8 +462,6 @@ export type Query = {
currentUser: User;
currentWorkspace: Workspace;
exchangeAuthorizationCode: ExchangeAuthCode;
findManyRemoteServersByType: Array<RemoteServer>;
findOneRemoteServerById: RemoteServer;
findWorkspaceFromInviteHash: Workspace;
getProductPrices: ProductPricesEntity;
getTimelineCalendarEventsFromCompanyId: TimelineCalendarEventsWithTotal;
@@ -498,16 +495,6 @@ export type QueryExchangeAuthorizationCodeArgs = {
};
export type QueryFindManyRemoteServersByTypeArgs = {
input: RemoteServerTypeInput;
};
export type QueryFindOneRemoteServerByIdArgs = {
input: RemoteServerIdInput;
};
export type QueryFindWorkspaceFromInviteHashArgs = {
inviteHash: Scalars['String'];
};
@@ -550,22 +537,6 @@ export type QueryValidatePasswordResetTokenArgs = {
passwordResetToken: Scalars['String'];
};
export type RefreshToken = {
__typename?: 'RefreshToken';
createdAt: Scalars['DateTime'];
expiresAt: Scalars['DateTime'];
id: Scalars['ID'];
updatedAt: Scalars['DateTime'];
};
export type RefreshTokenEdge = {
__typename?: 'RefreshTokenEdge';
/** Cursor for this node. */
cursor: Scalars['ConnectionCursor'];
/** The node containing the RefreshToken */
node: RefreshToken;
};
export type RelationConnection = {
__typename?: 'RelationConnection';
/** Array of edges. */
@@ -620,14 +591,6 @@ export type RemoteServer = {
updatedAt: Scalars['DateTime'];
};
export type RemoteServerIdInput = {
/** The id of the record. */
id: Scalars['ID'];
};
export type RemoteServerTypeInput = {
foreignDataWrapperType: Scalars['String'];
};
export type RemoteTable = {
__typename?: 'RemoteTable';
name: Scalars['String'];
@@ -677,7 +640,6 @@ export type Telemetry = {
export type TimelineCalendarEvent = {
__typename?: 'TimelineCalendarEvent';
attendees: Array<TimelineCalendarEventAttendee>;
conferenceLink: LinkMetadata;
conferenceSolution: Scalars['String'];
description: Scalars['String'];
@@ -686,13 +648,14 @@ export type TimelineCalendarEvent = {
isCanceled: Scalars['Boolean'];
isFullDay: Scalars['Boolean'];
location: Scalars['String'];
participants: Array<TimelineCalendarEventParticipant>;
startsAt: Scalars['DateTime'];
title: Scalars['String'];
visibility: TimelineCalendarEventVisibility;
};
export type TimelineCalendarEventAttendee = {
__typename?: 'TimelineCalendarEventAttendee';
export type TimelineCalendarEventParticipant = {
__typename?: 'TimelineCalendarEventParticipant';
avatarUrl: Scalars['String'];
displayName: Scalars['String'];
firstName: Scalars['String'];
@@ -972,11 +935,11 @@ export type RelationEdge = {
node: Relation;
};
export type TimelineCalendarEventAttendeeFragmentFragment = { __typename?: 'TimelineCalendarEventAttendee', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string };
export type TimelineCalendarEventFragmentFragment = { __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, participants: Array<{ __typename?: 'TimelineCalendarEventParticipant', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> };
export type TimelineCalendarEventFragmentFragment = { __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, attendees: Array<{ __typename?: 'TimelineCalendarEventAttendee', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> };
export type TimelineCalendarEventParticipantFragmentFragment = { __typename?: 'TimelineCalendarEventParticipant', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string };
export type TimelineCalendarEventsWithTotalFragmentFragment = { __typename?: 'TimelineCalendarEventsWithTotal', totalNumberOfCalendarEvents: number, timelineCalendarEvents: Array<{ __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, attendees: Array<{ __typename?: 'TimelineCalendarEventAttendee', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> }> };
export type TimelineCalendarEventsWithTotalFragmentFragment = { __typename?: 'TimelineCalendarEventsWithTotal', totalNumberOfCalendarEvents: number, timelineCalendarEvents: Array<{ __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, participants: Array<{ __typename?: 'TimelineCalendarEventParticipant', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> }> };
export type GetTimelineCalendarEventsFromCompanyIdQueryVariables = Exact<{
companyId: Scalars['ID'];
@@ -985,7 +948,7 @@ export type GetTimelineCalendarEventsFromCompanyIdQueryVariables = Exact<{
}>;
export type GetTimelineCalendarEventsFromCompanyIdQuery = { __typename?: 'Query', getTimelineCalendarEventsFromCompanyId: { __typename?: 'TimelineCalendarEventsWithTotal', totalNumberOfCalendarEvents: number, timelineCalendarEvents: Array<{ __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, attendees: Array<{ __typename?: 'TimelineCalendarEventAttendee', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> }> } };
export type GetTimelineCalendarEventsFromCompanyIdQuery = { __typename?: 'Query', getTimelineCalendarEventsFromCompanyId: { __typename?: 'TimelineCalendarEventsWithTotal', totalNumberOfCalendarEvents: number, timelineCalendarEvents: Array<{ __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, participants: Array<{ __typename?: 'TimelineCalendarEventParticipant', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> }> } };
export type GetTimelineCalendarEventsFromPersonIdQueryVariables = Exact<{
personId: Scalars['ID'];
@@ -994,7 +957,7 @@ export type GetTimelineCalendarEventsFromPersonIdQueryVariables = Exact<{
}>;
export type GetTimelineCalendarEventsFromPersonIdQuery = { __typename?: 'Query', getTimelineCalendarEventsFromPersonId: { __typename?: 'TimelineCalendarEventsWithTotal', totalNumberOfCalendarEvents: number, timelineCalendarEvents: Array<{ __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, attendees: Array<{ __typename?: 'TimelineCalendarEventAttendee', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> }> } };
export type GetTimelineCalendarEventsFromPersonIdQuery = { __typename?: 'Query', getTimelineCalendarEventsFromPersonId: { __typename?: 'TimelineCalendarEventsWithTotal', totalNumberOfCalendarEvents: number, timelineCalendarEvents: Array<{ __typename?: 'TimelineCalendarEvent', id: string, title: string, description: string, location: string, startsAt: string, endsAt: string, isFullDay: boolean, visibility: TimelineCalendarEventVisibility, participants: Array<{ __typename?: 'TimelineCalendarEventParticipant', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string }> }> } };
export type ParticipantFragmentFragment = { __typename?: 'TimelineThreadParticipant', personId?: string | null, workspaceMemberId?: string | null, firstName: string, lastName: string, displayName: string, avatarUrl: string, handle: string };
@@ -1085,7 +1048,7 @@ export type ImpersonateMutationVariables = Exact<{
export type ImpersonateMutation = { __typename?: 'Mutation', impersonate: { __typename?: 'Verify', user: { __typename?: 'User', id: string, firstName: string, lastName: string, email: string, canImpersonate: boolean, supportUserHash?: string | null, workspaceMember?: { __typename?: 'WorkspaceMember', id: string, colorScheme: string, avatarUrl?: string | null, locale: string, name: { __typename?: 'FullName', firstName: string, lastName: string } } | null, defaultWorkspace: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, domainName?: string | null, inviteHash?: string | null, allowImpersonation: boolean, subscriptionStatus: string, activationStatus: string, featureFlags?: Array<{ __typename?: 'FeatureFlag', id: string, key: string, value: boolean, workspaceId: string }> | null }, workspaces: Array<{ __typename?: 'UserWorkspace', workspace?: { __typename?: 'Workspace', id: string, logo?: string | null, displayName?: string | null, domainName?: string | null } | null }> }, tokens: { __typename?: 'AuthTokenPair', accessToken: { __typename?: 'AuthToken', token: string, expiresAt: string }, refreshToken: { __typename?: 'AuthToken', token: string, expiresAt: string } } } };
export type RenewTokenMutationVariables = Exact<{
refreshToken: Scalars['String'];
appToken: Scalars['String'];
}>;
@@ -1229,8 +1192,8 @@ export type GetWorkspaceFromInviteHashQueryVariables = Exact<{
export type GetWorkspaceFromInviteHashQuery = { __typename?: 'Query', findWorkspaceFromInviteHash: { __typename?: 'Workspace', id: string, displayName?: string | null, logo?: string | null, allowImpersonation: boolean } };
export const TimelineCalendarEventAttendeeFragmentFragmentDoc = gql`
fragment TimelineCalendarEventAttendeeFragment on TimelineCalendarEventAttendee {
export const TimelineCalendarEventParticipantFragmentFragmentDoc = gql`
fragment TimelineCalendarEventParticipantFragment on TimelineCalendarEventParticipant {
personId
workspaceMemberId
firstName
@@ -1250,11 +1213,11 @@ export const TimelineCalendarEventFragmentFragmentDoc = gql`
endsAt
isFullDay
visibility
attendees {
...TimelineCalendarEventAttendeeFragment
participants {
...TimelineCalendarEventParticipantFragment
}
}
${TimelineCalendarEventAttendeeFragmentFragmentDoc}`;
${TimelineCalendarEventParticipantFragmentFragmentDoc}`;
export const TimelineCalendarEventsWithTotalFragmentFragmentDoc = gql`
fragment TimelineCalendarEventsWithTotalFragment on TimelineCalendarEventsWithTotal {
totalNumberOfCalendarEvents
@@ -1811,8 +1774,8 @@ export type ImpersonateMutationHookResult = ReturnType<typeof useImpersonateMuta
export type ImpersonateMutationResult = Apollo.MutationResult<ImpersonateMutation>;
export type ImpersonateMutationOptions = Apollo.BaseMutationOptions<ImpersonateMutation, ImpersonateMutationVariables>;
export const RenewTokenDocument = gql`
mutation RenewToken($refreshToken: String!) {
renewToken(refreshToken: $refreshToken) {
mutation RenewToken($appToken: String!) {
renewToken(appToken: $appToken) {
tokens {
...AuthTokensFragment
}
@@ -1834,7 +1797,7 @@ export type RenewTokenMutationFn = Apollo.MutationFunction<RenewTokenMutation, R
* @example
* const [renewTokenMutation, { data, loading, error }] = useRenewTokenMutation({
* variables: {
* refreshToken: // value for 'refreshToken'
* appToken: // value for 'appToken'
* },
* });
*/

View File

@@ -115,7 +115,7 @@ export const CalendarEventRow = ({
: format(startsAt, 'HH:mm');
const endTimeLabel = calendarEvent.isFullDay ? '' : format(endsAt, 'HH:mm');
const isCurrentWorkspaceMemberAttending = calendarEvent.attendees?.some(
const isCurrentWorkspaceMemberAttending = calendarEvent.participants?.some(
({ workspaceMemberId }) => workspaceMemberId === currentWorkspaceMember?.id,
);
const showTitle = calendarEvent.visibility === 'SHARE_EVERYTHING';
@@ -154,19 +154,19 @@ export const CalendarEventRow = ({
</StyledVisibilityCard>
)}
</StyledLabels>
{!!calendarEvent.attendees?.length && (
{!!calendarEvent.participants?.length && (
<AvatarGroup
avatars={calendarEvent.attendees.map((attendee) => (
avatars={calendarEvent.participants.map((participant) => (
<Avatar
key={[attendee.workspaceMemberId, attendee.displayName]
key={[participant.workspaceMemberId, participant.displayName]
.filter(isDefined)
.join('-')}
avatarUrl={
attendee.workspaceMemberId === currentWorkspaceMember?.id
participant.workspaceMemberId === currentWorkspaceMember?.id
? currentWorkspaceMember?.avatarUrl
: undefined
}
placeholder={attendee.displayName}
placeholder={participant.displayName}
type="rounded"
/>
))}

View File

@@ -10,7 +10,7 @@ import { sortDesc } from '~/utils/sort';
type CalendarEventGeneric = Omit<
CalendarEvent,
'attendees' | 'externalCreatedAt'
'participants' | 'externalCreatedAt'
>;
export const useCalendarEvents = <T extends CalendarEventGeneric>(

View File

@@ -1,13 +0,0 @@
import { gql } from '@apollo/client';
export const timelineCalendarEventAttendeeFragment = gql`
fragment TimelineCalendarEventAttendeeFragment on TimelineCalendarEventAttendee {
personId
workspaceMemberId
firstName
lastName
displayName
avatarUrl
handle
}
`;

View File

@@ -1,6 +1,6 @@
import { gql } from '@apollo/client';
import { timelineCalendarEventAttendeeFragment } from '@/activities/calendar/queries/fragments/timelineCalendarEventAttendeeFragment';
import { timelineCalendarEventParticipantFragment } from '@/activities/calendar/queries/fragments/timelineCalendarEventParticipantFragment';
export const timelineCalendarEventFragment = gql`
fragment TimelineCalendarEventFragment on TimelineCalendarEvent {
@@ -12,9 +12,9 @@ export const timelineCalendarEventFragment = gql`
endsAt
isFullDay
visibility
attendees {
...TimelineCalendarEventAttendeeFragment
participants {
...TimelineCalendarEventParticipantFragment
}
}
${timelineCalendarEventAttendeeFragment}
${timelineCalendarEventParticipantFragment}
`;

View File

@@ -0,0 +1,13 @@
import { gql } from '@apollo/client';
export const timelineCalendarEventParticipantFragment = gql`
fragment TimelineCalendarEventParticipantFragment on TimelineCalendarEventParticipant {
personId
workspaceMemberId
firstName
lastName
displayName
avatarUrl
handle
}
`;

View File

@@ -14,7 +14,7 @@ export type CalendarEvent = {
startsAt: string;
title?: string;
visibility: 'METADATA' | 'SHARE_EVERYTHING';
attendees?: {
participants?: {
displayName: string;
workspaceMemberId?: string;
}[];

View File

@@ -1,8 +1,8 @@
import { gql } from '@apollo/client';
export const RENEW_TOKEN = gql`
mutation RenewToken($refreshToken: String!) {
renewToken(refreshToken: $refreshToken) {
mutation RenewToken($appToken: String!) {
renewToken(appToken: $appToken) {
tokens {
...AuthTokensFragment
}

View File

@@ -42,7 +42,7 @@ const renewTokenMutation = async (
>({
mutation: RenewTokenDocument,
variables: {
refreshToken: refreshToken,
appToken: refreshToken,
},
fetchPolicy: 'network-only',
});

View File

@@ -51,7 +51,7 @@ export const SettingsAccountsCalendars = () => {
const exampleDayTime = startOfDay(exampleStartDate).getTime();
const exampleCalendarEvent: TimelineCalendarEvent = {
id: '',
attendees: [
participants: [
{
firstName: currentWorkspaceMember?.name.firstName || '',
lastName: currentWorkspaceMember?.name.lastName || '',

View File

@@ -10,7 +10,7 @@ export const mockedCalendarEvents: CalendarEvent[] = [
isFullDay: false,
startsAt: addDays(new Date().setHours(10, 0), 1).toISOString(),
visibility: 'METADATA',
attendees: [
participants: [
{ displayName: 'John Doe', workspaceMemberId: 'john-doe' },
{ displayName: 'Jane Doe', workspaceMemberId: 'jane-doe' },
{ displayName: 'Tim Apple', workspaceMemberId: 'tim-apple' },

View File

@@ -1443,9 +1443,9 @@ const mockedCalendarEventsMetadata = {
__typename: 'field',
id: '07880d2d-4f08-458f-be0b-876402d2a769',
type: 'RELATION',
name: 'eventAttendees',
label: 'Event Attendees',
description: 'Event Attendees',
name: 'eventParticipants',
label: 'Event Participants',
description: 'Event Participants',
icon: 'IconUserCircle',
isCustom: false,
isActive: true,
@@ -1465,8 +1465,8 @@ const mockedCalendarEventsMetadata = {
__typename: 'object',
id: '4adb1b1a-9643-4d1c-a2a0-b1b02ae192ad',
dataSourceId: 'fa94b810-e848-490c-a5f7-24a1ee5bfaa6',
nameSingular: 'calendarEventAttendee',
namePlural: 'calendarEventAttendees',
nameSingular: 'calendarEventParticipant',
namePlural: 'calendarEventParticipants',
isSystem: true,
},
},

View File

@@ -1,7 +1,7 @@
import { ObjectType, Field, ID } from '@nestjs/graphql';
@ObjectType('TimelineCalendarEventAttendee')
export class TimelineCalendarEventAttendee {
@ObjectType('TimelineCalendarEventParticipant')
export class TimelineCalendarEventParticipant {
@Field(() => ID, { nullable: true })
personId: string;

View File

@@ -1,6 +1,6 @@
import { ObjectType, ID, Field, registerEnumType } from '@nestjs/graphql';
import { TimelineCalendarEventAttendee } from 'src/engine/core-modules/calendar/dtos/timeline-calendar-event-attendee.dto';
import { TimelineCalendarEventParticipant } from 'src/engine/core-modules/calendar/dtos/timeline-calendar-event-participant.dto';
export enum TimelineCalendarEventVisibility {
METADATA = 'METADATA',
@@ -53,8 +53,8 @@ export class TimelineCalendarEvent {
@Field(() => LinkMetadata)
conferenceLink: LinkMetadata;
@Field(() => [TimelineCalendarEventAttendee])
attendees: TimelineCalendarEventAttendee[];
@Field(() => [TimelineCalendarEventParticipant])
participants: TimelineCalendarEventParticipant[];
@Field(() => TimelineCalendarEventVisibility)
visibility: TimelineCalendarEventVisibility;

View File

@@ -3,7 +3,7 @@ import { Injectable } from '@nestjs/common';
import groupBy from 'lodash.groupby';
import { TIMELINE_CALENDAR_EVENTS_DEFAULT_PAGE_SIZE } from 'src/engine/core-modules/calendar/constants/calendar.constants';
import { TimelineCalendarEventAttendee } from 'src/engine/core-modules/calendar/dtos/timeline-calendar-event-attendee.dto';
import { TimelineCalendarEventParticipant } from 'src/engine/core-modules/calendar/dtos/timeline-calendar-event-participant.dto';
import {
TimelineCalendarEvent,
TimelineCalendarEventVisibility,
@@ -11,10 +11,10 @@ import {
import { TimelineCalendarEventsWithTotal } from 'src/engine/core-modules/calendar/dtos/timeline-calendar-events-with-total.dto';
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
import { ObjectRecord } from 'src/engine/workspace-manager/workspace-sync-metadata/types/object-record';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
type TimelineCalendarEventAttendeeWithPersonInformation =
ObjectRecord<CalendarEventAttendeeObjectMetadata> & {
type TimelineCalendarEventParticipantWithPersonInformation =
ObjectRecord<CalendarEventParticipantObjectMetadata> & {
personFirstName: string;
personLastName: string;
personAvatarUrl: string;
@@ -40,18 +40,18 @@ export class TimelineCalendarEventService {
const dataSourceSchema =
this.workspaceDataSourceService.getSchemaName(workspaceId);
const calendarEvents: Omit<TimelineCalendarEvent, 'attendees'>[] =
const calendarEvents: Omit<TimelineCalendarEvent, 'participants'>[] =
await this.workspaceDataSourceService.executeRawQuery(
`SELECT
"calendarEvent".*
FROM
${dataSourceSchema}."calendarEvent" "calendarEvent"
LEFT JOIN
${dataSourceSchema}."calendarEventAttendee" "calendarEventAttendee" ON "calendarEvent".id = "calendarEventAttendee"."calendarEventId"
${dataSourceSchema}."calendarEventParticipant" "calendarEventParticipant" ON "calendarEvent".id = "calendarEventParticipant"."calendarEventId"
LEFT JOIN
${dataSourceSchema}."person" "person" ON "calendarEventAttendee"."personId" = "person".id
${dataSourceSchema}."person" "person" ON "calendarEventParticipant"."personId" = "person".id
WHERE
"calendarEventAttendee"."personId" = ANY($1)
"calendarEventParticipant"."personId" = ANY($1)
GROUP BY
"calendarEvent".id
ORDER BY
@@ -69,10 +69,10 @@ export class TimelineCalendarEventService {
};
}
const calendarEventAttendees: TimelineCalendarEventAttendeeWithPersonInformation[] =
const calendarEventParticipants: TimelineCalendarEventParticipantWithPersonInformation[] =
await this.workspaceDataSourceService.executeRawQuery(
`SELECT
"calendarEventAttendee".*,
"calendarEventParticipant".*,
"person"."nameFirstName" as "personFirstName",
"person"."nameLastName" as "personLastName",
"person"."avatarUrl" as "personAvatarUrl",
@@ -80,46 +80,52 @@ export class TimelineCalendarEventService {
"workspaceMember"."nameLastName" as "workspaceMemberLastName",
"workspaceMember"."avatarUrl" as "workspaceMemberAvatarUrl"
FROM
${dataSourceSchema}."calendarEventAttendee" "calendarEventAttendee"
${dataSourceSchema}."calendarEventParticipant" "calendarEventParticipant"
LEFT JOIN
${dataSourceSchema}."person" "person" ON "calendarEventAttendee"."personId" = "person".id
${dataSourceSchema}."person" "person" ON "calendarEventParticipant"."personId" = "person".id
LEFT JOIN
${dataSourceSchema}."workspaceMember" "workspaceMember" ON "calendarEventAttendee"."workspaceMemberId" = "workspaceMember".id
${dataSourceSchema}."workspaceMember" "workspaceMember" ON "calendarEventParticipant"."workspaceMemberId" = "workspaceMember".id
WHERE
"calendarEventAttendee"."calendarEventId" = ANY($1)`,
"calendarEventParticipant"."calendarEventId" = ANY($1)`,
[calendarEvents.map((event) => event.id)],
workspaceId,
);
const formattedCalendarEventAttendees: TimelineCalendarEventAttendee[] =
calendarEventAttendees.map((attendee) => {
const formattedCalendarEventParticipants: TimelineCalendarEventParticipant[] =
calendarEventParticipants.map((participant) => {
const firstName =
attendee.personFirstName || attendee.workspaceMemberFirstName || '';
participant.personFirstName ||
participant.workspaceMemberFirstName ||
'';
const lastName =
attendee.personLastName || attendee.workspaceMemberLastName || '';
participant.personLastName ||
participant.workspaceMemberLastName ||
'';
const displayName =
firstName || attendee.displayName || attendee.handle;
firstName || participant.displayName || participant.handle;
const avatarUrl =
attendee.personAvatarUrl || attendee.workspaceMemberAvatarUrl || '';
participant.personAvatarUrl ||
participant.workspaceMemberAvatarUrl ||
'';
return {
calendarEventId: attendee.calendarEventId,
personId: attendee.personId,
workspaceMemberId: attendee.workspaceMemberId,
calendarEventId: participant.calendarEventId,
personId: participant.personId,
workspaceMemberId: participant.workspaceMemberId,
firstName,
lastName,
displayName,
avatarUrl,
handle: attendee.handle,
handle: participant.handle,
};
});
const calendarEventAttendeesByEventId: {
[calendarEventId: string]: TimelineCalendarEventAttendee[];
} = groupBy(formattedCalendarEventAttendees, 'calendarEventId');
const calendarEventParticipantsByEventId: {
[calendarEventId: string]: TimelineCalendarEventParticipant[];
} = groupBy(formattedCalendarEventParticipants, 'calendarEventId');
const totalNumberOfCalendarEvents: { count: number }[] =
await this.workspaceDataSourceService.executeRawQuery(
@@ -127,46 +133,46 @@ export class TimelineCalendarEventService {
SELECT
COUNT(DISTINCT "calendarEventId")
FROM
${dataSourceSchema}."calendarEventAttendee" "calendarEventAttendee"
${dataSourceSchema}."calendarEventParticipant" "calendarEventParticipant"
WHERE
"calendarEventAttendee"."personId" = ANY($1)
"calendarEventParticipant"."personId" = ANY($1)
`,
[personIds],
workspaceId,
);
const timelineCalendarEvents = calendarEvents.map((event) => {
const attendees = calendarEventAttendeesByEventId[event.id] || [];
const participants = calendarEventParticipantsByEventId[event.id] || [];
return {
...event,
attendees,
participants,
};
});
const calendarEventIdsWithWorkspaceMemberInAttendees =
const calendarEventIdsWithWorkspaceMemberInParticipants =
await this.workspaceDataSourceService.executeRawQuery(
`
SELECT
"calendarEventId"
FROM
${dataSourceSchema}."calendarEventAttendee" "calendarEventAttendee"
${dataSourceSchema}."calendarEventParticipant" "calendarEventParticipant"
WHERE
"calendarEventAttendee"."workspaceMemberId" = $1
"calendarEventParticipant"."workspaceMemberId" = $1
`,
[workspaceMemberId],
workspaceId,
);
const calendarEventIdsWithWorkspaceMemberInAttendeesFormatted =
calendarEventIdsWithWorkspaceMemberInAttendees.map(
const calendarEventIdsWithWorkspaceMemberInParticipantsFormatted =
calendarEventIdsWithWorkspaceMemberInParticipants.map(
(event: { calendarEventId: string }) => event.calendarEventId,
);
const calendarEventIdsToFetchVisibilityFor = timelineCalendarEvents
.filter(
(event) =>
!calendarEventIdsWithWorkspaceMemberInAttendeesFormatted.includes(
!calendarEventIdsWithWorkspaceMemberInParticipantsFormatted.includes(
event.id,
),
)

View File

@@ -37,7 +37,6 @@ export enum FieldMetadataType {
RELATION = 'RELATION',
POSITION = 'POSITION',
ADDRESS = 'ADDRESS',
JSON = 'JSON',
RAW_JSON = 'RAW_JSON',
}

View File

@@ -1,6 +1,6 @@
import { CalendarChannelEventAssociationRepository } from 'src/modules/calendar/repositories/calendar-channel-event-association.repository';
import { CalendarChannelRepository } from 'src/modules/calendar/repositories/calendar-channel.repository';
import { CalendarEventAttendeeRepository } from 'src/modules/calendar/repositories/calendar-event-attendee.repository';
import { CalendarEventParticipantRepository } from 'src/modules/calendar/repositories/calendar-event-participant.repository';
import { CalendarEventRepository } from 'src/modules/calendar/repositories/calendar-event.repository';
import { CompanyRepository } from 'src/modules/company/repositories/company.repository';
import { BlocklistRepository } from 'src/modules/connected-account/repositories/blocklist.repository';
@@ -19,7 +19,7 @@ export const metadataToRepositoryMapping = {
CalendarChannelEventAssociationObjectMetadata:
CalendarChannelEventAssociationRepository,
CalendarChannelObjectMetadata: CalendarChannelRepository,
CalendarEventAttendeeObjectMetadata: CalendarEventAttendeeRepository,
CalendarEventParticipantObjectMetadata: CalendarEventParticipantRepository,
CalendarEventObjectMetadata: CalendarEventRepository,
CompanyObjectMetadata: CompanyRepository,
ConnectedAccountObjectMetadata: ConnectedAccountRepository,

View File

@@ -72,7 +72,7 @@ export const calendarChannelStandardFieldIds = {
calendarChannelEventAssociations: '20202020-afb0-4a9f-979f-2d5087d71d09',
};
export const calendarEventAttendeeStandardFieldIds = {
export const calendarEventParticipantStandardFieldIds = {
calendarEvent: '20202020-fe3a-401c-b889-af4f4657a861',
handle: '20202020-8692-4580-8210-9e09cbd031a7',
displayName: '20202020-ee1e-4f9f-8ac1-5c0b2f69691e',
@@ -97,7 +97,7 @@ export const calendarEventStandardFieldIds = {
conferenceLink: '20202020-35da-43ef-9ca0-e936e9dc237b',
recurringEventExternalId: '20202020-4b96-43d0-8156-4c7a9717635c',
calendarChannelEventAssociations: '20202020-bdf8-4572-a2cc-ecbb6bcc3a02',
eventAttendees: '20202020-e07e-4ccb-88f5-6f3d00458eec',
eventParticipants: '20202020-e07e-4ccb-88f5-6f3d00458eec',
};
export const commentStandardFieldIds = {
@@ -232,7 +232,7 @@ export const personStandardFieldIds = {
favorites: '20202020-4073-4117-9cf1-203bcdc91cbd',
attachments: '20202020-cd97-451f-87fa-bcb789bdbf3a',
messageParticipants: '20202020-498e-4c61-8158-fa04f0638334',
calendarEventAttendees: '20202020-52ee-45e9-a702-b64b3753e3a9',
calendarEventParticipants: '20202020-52ee-45e9-a702-b64b3753e3a9',
events: '20202020-a43e-4873-9c23-e522de906ce5',
};
@@ -293,7 +293,7 @@ export const workspaceMemberStandardFieldIds = {
connectedAccounts: '20202020-e322-4bde-a525-727079b4a100',
messageParticipants: '20202020-8f99-48bc-a5eb-edd33dd54188',
blocklist: '20202020-6cb2-4161-9f29-a4b7f1283859',
calendarEventAttendees: '20202020-0dbc-4841-9ce1-3e793b5b3512',
calendarEventParticipants: '20202020-0dbc-4841-9ce1-3e793b5b3512',
events: '20202020-e15b-47b8-94fe-8200e3c66615',
};

View File

@@ -13,7 +13,7 @@ export const standardObjectIds = {
blocklist: '20202020-0408-4f38-b8a8-4d5e3e26e24d',
calendarChannelEventAssociation: '20202020-491b-4aaa-9825-afd1bae6ae00',
calendarChannel: '20202020-e8f2-40e1-a39c-c0e0039c5034',
calendarEventAttendee: '20202020-a1c3-47a6-9732-27e5b1e8436d',
calendarEventParticipant: '20202020-a1c3-47a6-9732-27e5b1e8436d',
calendarEvent: '20202020-8f1d-4eef-9f85-0d1965e27221',
comment: '20202020-435f-4de9-89b5-97e32233bf5f',
company: '20202020-b374-4779-a561-80086cb2e17f',

View File

@@ -5,7 +5,7 @@ import { AttachmentObjectMetadata } from 'src/modules/attachment/standard-object
import { BlocklistObjectMetadata } from 'src/modules/connected-account/standard-objects/blocklist.object-metadata';
import { CalendarEventObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event.object-metadata';
import { CalendarChannelObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-channel.object-metadata';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CommentObjectMetadata } from 'src/modules/activity/standard-objects/comment.object-metadata';
import { CompanyObjectMetadata } from 'src/modules/company/standard-objects/company.object-metadata';
import { ConnectedAccountObjectMetadata } from 'src/modules/connected-account/standard-objects/connected-account.object-metadata';
@@ -53,5 +53,5 @@ export const standardObjectMetadataDefinitions = [
CalendarEventObjectMetadata,
CalendarChannelObjectMetadata,
CalendarChannelEventAssociationObjectMetadata,
CalendarEventAttendeeObjectMetadata,
CalendarEventParticipantObjectMetadata,
];

View File

@@ -5,25 +5,25 @@ import differenceWith from 'lodash.differencewith';
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
import { ObjectRecord } from 'src/engine/workspace-manager/workspace-sync-metadata/types/object-record';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { getFlattenedValuesAndValuesStringForBatchRawQuery } from 'src/modules/calendar/utils/getFlattenedValuesAndValuesStringForBatchRawQuery.util';
import {
CalendarEventAttendee,
CalendarEventAttendeeWithId,
CalendarEventParticipant,
CalendarEventParticipantWithId,
} from 'src/modules/calendar/types/calendar-event';
@Injectable()
export class CalendarEventAttendeeRepository {
export class CalendarEventParticipantRepository {
constructor(
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
) {}
public async getByIds(
calendarEventAttendeeIds: string[],
calendarEventParticipantIds: string[],
workspaceId: string,
transactionManager?: EntityManager,
): Promise<ObjectRecord<CalendarEventAttendeeObjectMetadata>[]> {
if (calendarEventAttendeeIds.length === 0) {
): Promise<ObjectRecord<CalendarEventParticipantObjectMetadata>[]> {
if (calendarEventParticipantIds.length === 0) {
return [];
}
@@ -31,8 +31,8 @@ export class CalendarEventAttendeeRepository {
this.workspaceDataSourceService.getSchemaName(workspaceId);
return await this.workspaceDataSourceService.executeRawQuery(
`SELECT * FROM ${dataSourceSchema}."calendarEventAttendee" WHERE "id" = ANY($1)`,
[calendarEventAttendeeIds],
`SELECT * FROM ${dataSourceSchema}."calendarEventParticipant" WHERE "id" = ANY($1)`,
[calendarEventParticipantIds],
workspaceId,
transactionManager,
);
@@ -42,7 +42,7 @@ export class CalendarEventAttendeeRepository {
calendarEventIds: string[],
workspaceId: string,
transactionManager?: EntityManager,
): Promise<ObjectRecord<CalendarEventAttendeeObjectMetadata>[]> {
): Promise<ObjectRecord<CalendarEventParticipantObjectMetadata>[]> {
if (calendarEventIds.length === 0) {
return [];
}
@@ -51,7 +51,7 @@ export class CalendarEventAttendeeRepository {
this.workspaceDataSourceService.getSchemaName(workspaceId);
return await this.workspaceDataSourceService.executeRawQuery(
`SELECT * FROM ${dataSourceSchema}."calendarEventAttendee" WHERE "calendarEventId" = ANY($1)`,
`SELECT * FROM ${dataSourceSchema}."calendarEventParticipant" WHERE "calendarEventId" = ANY($1)`,
[calendarEventIds],
workspaceId,
transactionManager,
@@ -59,11 +59,11 @@ export class CalendarEventAttendeeRepository {
}
public async deleteByIds(
calendarEventAttendeeIds: string[],
calendarEventParticipantIds: string[],
workspaceId: string,
transactionManager?: EntityManager,
): Promise<void> {
if (calendarEventAttendeeIds.length === 0) {
if (calendarEventParticipantIds.length === 0) {
return;
}
@@ -71,20 +71,20 @@ export class CalendarEventAttendeeRepository {
this.workspaceDataSourceService.getSchemaName(workspaceId);
await this.workspaceDataSourceService.executeRawQuery(
`DELETE FROM ${dataSourceSchema}."calendarEventAttendee" WHERE "id" = ANY($1)`,
[calendarEventAttendeeIds],
`DELETE FROM ${dataSourceSchema}."calendarEventParticipant" WHERE "id" = ANY($1)`,
[calendarEventParticipantIds],
workspaceId,
transactionManager,
);
}
public async updateCalendarEventAttendees(
calendarEventAttendees: CalendarEventAttendee[],
public async updateCalendarEventParticipants(
calendarEventParticipants: CalendarEventParticipant[],
iCalUIDCalendarEventIdMap: Map<string, string>,
workspaceId: string,
transactionManager?: EntityManager,
): Promise<void> {
if (calendarEventAttendees.length === 0) {
if (calendarEventParticipants.length === 0) {
return;
}
@@ -93,33 +93,36 @@ export class CalendarEventAttendeeRepository {
const calendarEventIds = Array.from(iCalUIDCalendarEventIdMap.values());
const existingCalendarEventAttendees = await this.getByCalendarEventIds(
const existingCalendarEventParticipants = await this.getByCalendarEventIds(
calendarEventIds,
workspaceId,
transactionManager,
);
const calendarEventAttendeesToDelete = differenceWith(
existingCalendarEventAttendees,
calendarEventAttendees,
(existingCalendarEventAttendee, calendarEventAttendee) =>
existingCalendarEventAttendee.handle === calendarEventAttendee.handle,
const calendarEventParticipantsToDelete = differenceWith(
existingCalendarEventParticipants,
calendarEventParticipants,
(existingCalendarEventParticipant, calendarEventParticipant) =>
existingCalendarEventParticipant.handle ===
calendarEventParticipant.handle,
);
await this.deleteByIds(
calendarEventAttendeesToDelete.map(
(calendarEventAttendee) => calendarEventAttendee.id,
calendarEventParticipantsToDelete.map(
(calendarEventParticipant) => calendarEventParticipant.id,
),
workspaceId,
transactionManager,
);
const values = calendarEventAttendees.map((calendarEventAttendee) => ({
...calendarEventAttendee,
calendarEventId: iCalUIDCalendarEventIdMap.get(
calendarEventAttendee.iCalUID,
),
}));
const values = calendarEventParticipants.map(
(calendarEventParticipant) => ({
...calendarEventParticipant,
calendarEventId: iCalUIDCalendarEventIdMap.get(
calendarEventParticipant.iCalUID,
),
}),
);
const { flattenedValues, valuesString } =
getFlattenedValuesAndValuesStringForBatchRawQuery(values, {
@@ -127,17 +130,17 @@ export class CalendarEventAttendeeRepository {
handle: 'text',
displayName: 'text',
isOrganizer: 'boolean',
responseStatus: `${dataSourceSchema}."calendarEventAttendee_responsestatus_enum"`,
responseStatus: `${dataSourceSchema}."calendarEventParticipant_responsestatus_enum"`,
});
await this.workspaceDataSourceService.executeRawQuery(
`UPDATE ${dataSourceSchema}."calendarEventAttendee" AS "calendarEventAttendee"
`UPDATE ${dataSourceSchema}."calendarEventParticipant" AS "calendarEventParticipant"
SET "displayName" = "newValues"."displayName",
"isOrganizer" = "newValues"."isOrganizer",
"responseStatus" = "newValues"."responseStatus"
FROM (VALUES ${valuesString}) AS "newValues"("calendarEventId", "handle", "displayName", "isOrganizer", "responseStatus")
WHERE "calendarEventAttendee"."handle" = "newValues"."handle"
AND "calendarEventAttendee"."calendarEventId" = "newValues"."calendarEventId"`,
WHERE "calendarEventParticipant"."handle" = "newValues"."handle"
AND "calendarEventParticipant"."calendarEventId" = "newValues"."calendarEventId"`,
flattenedValues,
workspaceId,
transactionManager,
@@ -147,7 +150,7 @@ export class CalendarEventAttendeeRepository {
public async getWithoutPersonIdAndWorkspaceMemberId(
workspaceId: string,
transactionManager?: EntityManager,
): Promise<CalendarEventAttendeeWithId[]> {
): Promise<CalendarEventParticipantWithId[]> {
if (!workspaceId) {
throw new Error('WorkspaceId is required');
}
@@ -155,17 +158,17 @@ export class CalendarEventAttendeeRepository {
const dataSourceSchema =
this.workspaceDataSourceService.getSchemaName(workspaceId);
const calendarEventAttendees: CalendarEventAttendeeWithId[] =
const calendarEventParticipants: CalendarEventParticipantWithId[] =
await this.workspaceDataSourceService.executeRawQuery(
`SELECT "calendarEventAttendee".*
FROM ${dataSourceSchema}."calendarEventAttendee" AS "calendarEventAttendee"
WHERE "calendarEventAttendee"."personId" IS NULL
AND "calendarEventAttendee"."workspaceMemberId" IS NULL`,
`SELECT "calendarEventParticipant".*
FROM ${dataSourceSchema}."calendarEventParticipant" AS "calendarEventParticipant"
WHERE "calendarEventParticipant"."personId" IS NULL
AND "calendarEventParticipant"."workspaceMemberId" IS NULL`,
[],
workspaceId,
transactionManager,
);
return calendarEventAttendees;
return calendarEventParticipants;
}
}

View File

@@ -7,7 +7,7 @@ import { ObjectRecord } from 'src/engine/workspace-manager/workspace-sync-metada
import { CalendarEventObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event.object-metadata';
import { getFlattenedValuesAndValuesStringForBatchRawQuery } from 'src/modules/calendar/utils/getFlattenedValuesAndValuesStringForBatchRawQuery.util';
import { CalendarEvent } from 'src/modules/calendar/types/calendar-event';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
@Injectable()
export class CalendarEventRepository {
@@ -60,7 +60,7 @@ export class CalendarEventRepository {
offset: number,
workspaceId: string,
transactionManager?: EntityManager,
): Promise<ObjectRecord<CalendarEventAttendeeObjectMetadata>[]> {
): Promise<ObjectRecord<CalendarEventParticipantObjectMetadata>[]> {
const dataSourceSchema =
this.workspaceDataSourceService.getSchemaName(workspaceId);

View File

@@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module';
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
import { CalendarEventAttendeeService } from 'src/modules/calendar/services/calendar-event-attendee/calendar-event-attendee.service';
import { CalendarEventParticipantService } from 'src/modules/calendar/services/calendar-event-participant/calendar-event-participant.service';
import { AddPersonIdAndWorkspaceMemberIdModule } from 'src/modules/connected-account/services/add-person-id-and-workspace-member-id/add-person-id-and-workspace-member-id.module';
import { PersonObjectMetadata } from 'src/modules/person/standard-objects/person.object-metadata';
@@ -12,7 +12,7 @@ import { PersonObjectMetadata } from 'src/modules/person/standard-objects/person
ObjectMetadataRepositoryModule.forFeature([PersonObjectMetadata]),
AddPersonIdAndWorkspaceMemberIdModule,
],
providers: [CalendarEventAttendeeService],
exports: [CalendarEventAttendeeService],
providers: [CalendarEventParticipantService],
exports: [CalendarEventParticipantService],
})
export class CalendarEventAttendeeModule {}
export class CalendarEventParticipantModule {}

View File

@@ -8,13 +8,13 @@ import { PersonObjectMetadata } from 'src/modules/person/standard-objects/person
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
import { getFlattenedValuesAndValuesStringForBatchRawQuery } from 'src/modules/calendar/utils/getFlattenedValuesAndValuesStringForBatchRawQuery.util';
import {
CalendarEventAttendee,
CalendarEventAttendeeWithId,
CalendarEventParticipant,
CalendarEventParticipantWithId,
} from 'src/modules/calendar/types/calendar-event';
import { AddPersonIdAndWorkspaceMemberIdService } from 'src/modules/connected-account/services/add-person-id-and-workspace-member-id/add-person-id-and-workspace-member-id.service';
@Injectable()
export class CalendarEventAttendeeService {
export class CalendarEventParticipantService {
constructor(
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
@InjectObjectMetadataRepository(PersonObjectMetadata)
@@ -22,36 +22,38 @@ export class CalendarEventAttendeeService {
private readonly addPersonIdAndWorkspaceMemberIdService: AddPersonIdAndWorkspaceMemberIdService,
) {}
public async updateCalendarEventAttendeesAfterContactCreation(
attendees: CalendarEventAttendeeWithId[],
public async updateCalendarEventParticipantsAfterContactCreation(
participants: CalendarEventParticipantWithId[],
workspaceId: string,
transactionManager?: EntityManager,
): Promise<void> {
if (!attendees) return;
if (!participants) return;
const dataSourceSchema =
this.workspaceDataSourceService.getSchemaName(workspaceId);
const handles = attendees.map((attendee) => attendee.handle);
const handles = participants.map((participant) => participant.handle);
const attendeePersonIds = await this.personRepository.getByEmails(
const participantPersonIds = await this.personRepository.getByEmails(
handles,
workspaceId,
transactionManager,
);
const calendarEventAttendeesToUpdate = attendees.map((attendee) => ({
id: attendee.id,
personId: attendeePersonIds.find(
(e: { id: string; email: string }) => e.email === attendee.handle,
)?.id,
}));
const calendarEventParticipantsToUpdate = participants.map(
(participant) => ({
id: participant.id,
personId: participantPersonIds.find(
(e: { id: string; email: string }) => e.email === participant.handle,
)?.id,
}),
);
if (calendarEventAttendeesToUpdate.length === 0) return;
if (calendarEventParticipantsToUpdate.length === 0) return;
const { flattenedValues, valuesString } =
getFlattenedValuesAndValuesStringForBatchRawQuery(
calendarEventAttendeesToUpdate,
calendarEventParticipantsToUpdate,
{
id: 'uuid',
personId: 'uuid',
@@ -59,50 +61,50 @@ export class CalendarEventAttendeeService {
);
await this.workspaceDataSourceService.executeRawQuery(
`UPDATE ${dataSourceSchema}."calendarEventAttendee" AS "calendarEventAttendee" SET "personId" = "data"."personId"
`UPDATE ${dataSourceSchema}."calendarEventParticipant" AS "calendarEventParticipant" SET "personId" = "data"."personId"
FROM (VALUES ${valuesString}) AS "data"("id", "personId")
WHERE "calendarEventAttendee"."id" = "data"."id"`,
WHERE "calendarEventParticipant"."id" = "data"."id"`,
flattenedValues,
workspaceId,
transactionManager,
);
}
public async saveCalendarEventAttendees(
calendarEventAttendees: CalendarEventAttendee[],
public async saveCalendarEventParticipants(
calendarEventParticipants: CalendarEventParticipant[],
workspaceId: string,
transactionManager?: EntityManager,
): Promise<void> {
if (calendarEventAttendees.length === 0) {
if (calendarEventParticipants.length === 0) {
return;
}
const dataSourceSchema =
this.workspaceDataSourceService.getSchemaName(workspaceId);
const calendarEventAttendeesToSave =
const calendarEventParticipantsToSave =
await this.addPersonIdAndWorkspaceMemberIdService.addPersonIdAndWorkspaceMemberId(
calendarEventAttendees,
calendarEventParticipants,
workspaceId,
transactionManager,
);
const { flattenedValues, valuesString } =
getFlattenedValuesAndValuesStringForBatchRawQuery(
calendarEventAttendeesToSave,
calendarEventParticipantsToSave,
{
calendarEventId: 'uuid',
handle: 'text',
displayName: 'text',
isOrganizer: 'boolean',
responseStatus: `${dataSourceSchema}."calendarEventAttendee_responsestatus_enum"`,
responseStatus: `${dataSourceSchema}."calendarEventParticipant_responsestatus_enum"`,
personId: 'uuid',
workspaceMemberId: 'uuid',
},
);
await this.workspaceDataSourceService.executeRawQuery(
`INSERT INTO ${dataSourceSchema}."calendarEventAttendee" ("calendarEventId", "handle", "displayName", "isOrganizer", "responseStatus", "personId", "workspaceMemberId") VALUES ${valuesString}`,
`INSERT INTO ${dataSourceSchema}."calendarEventParticipant" ("calendarEventId", "handle", "displayName", "isOrganizer", "responseStatus", "personId", "workspaceMemberId") VALUES ${valuesString}`,
flattenedValues,
workspaceId,
transactionManager,

View File

@@ -4,12 +4,12 @@ import { TypeOrmModule } from '@nestjs/typeorm';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { ObjectMetadataRepositoryModule } from 'src/engine/object-metadata-repository/object-metadata-repository.module';
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
import { CalendarEventAttendeeModule } from 'src/modules/calendar/services/calendar-event-attendee/calendar-event-attendee.module';
import { CalendarEventParticipantModule } from 'src/modules/calendar/services/calendar-event-participant/calendar-event-participant.module';
import { GoogleCalendarFullSyncService } from 'src/modules/calendar/services/google-calendar-full-sync.service';
import { CalendarProvidersModule } from 'src/modules/calendar/services/providers/calendar-providers.module';
import { CalendarChannelEventAssociationObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-channel-event-association.object-metadata';
import { CalendarChannelObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-channel.object-metadata';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CalendarEventObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event.object-metadata';
import { BlocklistObjectMetadata } from 'src/modules/connected-account/standard-objects/blocklist.object-metadata';
import { ConnectedAccountObjectMetadata } from 'src/modules/connected-account/standard-objects/connected-account.object-metadata';
@@ -24,12 +24,12 @@ import { WorkspaceMemberObjectMetadata } from 'src/modules/workspace-member/stan
CalendarEventObjectMetadata,
CalendarChannelObjectMetadata,
CalendarChannelEventAssociationObjectMetadata,
CalendarEventAttendeeObjectMetadata,
CalendarEventParticipantObjectMetadata,
BlocklistObjectMetadata,
PersonObjectMetadata,
WorkspaceMemberObjectMetadata,
]),
CalendarEventAttendeeModule,
CalendarEventParticipantModule,
TypeOrmModule.forFeature([FeatureFlagEntity], 'core'),
WorkspaceDataSourceModule,
],

View File

@@ -20,15 +20,15 @@ import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/work
import { CalendarEventRepository } from 'src/modules/calendar/repositories/calendar-event.repository';
import { formatGoogleCalendarEvent } from 'src/modules/calendar/utils/format-google-calendar-event.util';
import { GoogleCalendarFullSyncJobData } from 'src/modules/calendar/jobs/google-calendar-full-sync.job';
import { CalendarEventAttendeeRepository } from 'src/modules/calendar/repositories/calendar-event-attendee.repository';
import { CalendarEventParticipantRepository } from 'src/modules/calendar/repositories/calendar-event-participant.repository';
import { ConnectedAccountObjectMetadata } from 'src/modules/connected-account/standard-objects/connected-account.object-metadata';
import { InjectObjectMetadataRepository } from 'src/engine/object-metadata-repository/object-metadata-repository.decorator';
import { CalendarEventObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event.object-metadata';
import { CalendarChannelObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-channel.object-metadata';
import { CalendarChannelEventAssociationObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-channel-event-association.object-metadata';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { BlocklistObjectMetadata } from 'src/modules/connected-account/standard-objects/blocklist.object-metadata';
import { CalendarEventAttendeeService } from 'src/modules/calendar/services/calendar-event-attendee/calendar-event-attendee.service';
import { CalendarEventParticipantService } from 'src/modules/calendar/services/calendar-event-participant/calendar-event-participant.service';
@Injectable()
export class GoogleCalendarFullSyncService {
@@ -48,15 +48,15 @@ export class GoogleCalendarFullSyncService {
CalendarChannelEventAssociationObjectMetadata,
)
private readonly calendarChannelEventAssociationRepository: CalendarChannelEventAssociationRepository,
@InjectObjectMetadataRepository(CalendarEventAttendeeObjectMetadata)
private readonly calendarEventAttendeesRepository: CalendarEventAttendeeRepository,
@InjectObjectMetadataRepository(CalendarEventParticipantObjectMetadata)
private readonly calendarEventParticipantsRepository: CalendarEventParticipantRepository,
@InjectObjectMetadataRepository(BlocklistObjectMetadata)
private readonly blocklistRepository: BlocklistRepository,
@InjectRepository(FeatureFlagEntity, 'core')
private readonly featureFlagRepository: Repository<FeatureFlagEntity>,
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
private readonly eventEmitter: EventEmitter2,
private readonly calendarEventAttendeesService: CalendarEventAttendeeService,
private readonly calendarEventParticipantsService: CalendarEventParticipantService,
) {}
public async startGoogleCalendarFullSync(
@@ -197,10 +197,12 @@ export class GoogleCalendarFullSyncService {
}),
);
const attendeesToSave = eventsToSave.flatMap((event) => event.attendees);
const participantsToSave = eventsToSave.flatMap(
(event) => event.participants,
);
const attendeesToUpdate = eventsToUpdate.flatMap(
(event) => event.attendees,
const participantsToUpdate = eventsToUpdate.flatMap(
(event) => event.participants,
);
const iCalUIDCalendarEventIdMap =
@@ -267,8 +269,8 @@ export class GoogleCalendarFullSyncService {
startTime = Date.now();
await this.calendarEventAttendeesService.saveCalendarEventAttendees(
attendeesToSave,
await this.calendarEventParticipantsService.saveCalendarEventParticipants(
participantsToSave,
workspaceId,
transactionManager,
);
@@ -276,15 +278,15 @@ export class GoogleCalendarFullSyncService {
endTime = Date.now();
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: saving attendees in ${
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: saving participants in ${
endTime - startTime
}ms.`,
);
startTime = Date.now();
await this.calendarEventAttendeesRepository.updateCalendarEventAttendees(
attendeesToUpdate,
await this.calendarEventParticipantsRepository.updateCalendarEventParticipants(
participantsToUpdate,
iCalUIDCalendarEventIdMap,
workspaceId,
transactionManager,
@@ -293,14 +295,14 @@ export class GoogleCalendarFullSyncService {
endTime = Date.now();
this.logger.log(
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: updating attendees in ${
`google calendar full-sync for workspace ${workspaceId} and account ${connectedAccountId}: updating participants in ${
endTime - startTime
}ms.`,
);
});
if (calendarChannel.isContactAutoCreationEnabled) {
const contactsToCreate = attendeesToSave;
const contactsToCreate = participantsToSave;
this.eventEmitter.emit(`createContacts`, {
workspaceId,

View File

@@ -1,5 +1,5 @@
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { calendarEventAttendeeStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { calendarEventParticipantStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
import { FieldMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/decorators/field-metadata.decorator';
import { Gate } from 'src/engine/workspace-manager/workspace-sync-metadata/decorators/gate.decorator';
@@ -11,7 +11,7 @@ import { CalendarEventObjectMetadata } from 'src/modules/calendar/standard-objec
import { PersonObjectMetadata } from 'src/modules/person/standard-objects/person.object-metadata';
import { WorkspaceMemberObjectMetadata } from 'src/modules/workspace-member/standard-objects/workspace-member.object-metadata';
export enum CalendarEventAttendeeResponseStatus {
export enum CalendarEventParticipantResponseStatus {
NEEDS_ACTION = 'NEEDS_ACTION',
DECLINED = 'DECLINED',
TENTATIVE = 'TENTATIVE',
@@ -19,20 +19,20 @@ export enum CalendarEventAttendeeResponseStatus {
}
@ObjectMetadata({
standardId: standardObjectIds.calendarEventAttendee,
namePlural: 'calendarEventAttendees',
labelSingular: 'Calendar event attendee',
labelPlural: 'Calendar event attendees',
description: 'Calendar event attendees',
standardId: standardObjectIds.calendarEventParticipant,
namePlural: 'calendarEventParticipants',
labelSingular: 'Calendar event participant',
labelPlural: 'Calendar event participants',
description: 'Calendar event participants',
icon: 'IconCalendar',
})
@IsSystem()
@Gate({
featureFlag: 'IS_CALENDAR_ENABLED',
})
export class CalendarEventAttendeeObjectMetadata extends BaseObjectMetadata {
export class CalendarEventParticipantObjectMetadata extends BaseObjectMetadata {
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.calendarEvent,
standardId: calendarEventParticipantStandardFieldIds.calendarEvent,
type: FieldMetadataType.RELATION,
label: 'Event ID',
description: 'Event ID',
@@ -42,7 +42,7 @@ export class CalendarEventAttendeeObjectMetadata extends BaseObjectMetadata {
calendarEvent: CalendarEventObjectMetadata;
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.handle,
standardId: calendarEventParticipantStandardFieldIds.handle,
type: FieldMetadataType.TEXT,
label: 'Handle',
description: 'Handle',
@@ -51,7 +51,7 @@ export class CalendarEventAttendeeObjectMetadata extends BaseObjectMetadata {
handle: string;
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.displayName,
standardId: calendarEventParticipantStandardFieldIds.displayName,
type: FieldMetadataType.TEXT,
label: 'Display Name',
description: 'Display Name',
@@ -60,7 +60,7 @@ export class CalendarEventAttendeeObjectMetadata extends BaseObjectMetadata {
displayName: string;
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.isOrganizer,
standardId: calendarEventParticipantStandardFieldIds.isOrganizer,
type: FieldMetadataType.BOOLEAN,
label: 'Is Organizer',
description: 'Is Organizer',
@@ -70,43 +70,43 @@ export class CalendarEventAttendeeObjectMetadata extends BaseObjectMetadata {
isOrganizer: boolean;
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.responseStatus,
standardId: calendarEventParticipantStandardFieldIds.responseStatus,
type: FieldMetadataType.SELECT,
label: 'Response Status',
description: 'Response Status',
icon: 'IconUser',
options: [
{
value: CalendarEventAttendeeResponseStatus.NEEDS_ACTION,
value: CalendarEventParticipantResponseStatus.NEEDS_ACTION,
label: 'Needs Action',
position: 0,
color: 'orange',
},
{
value: CalendarEventAttendeeResponseStatus.DECLINED,
value: CalendarEventParticipantResponseStatus.DECLINED,
label: 'Declined',
position: 1,
color: 'red',
},
{
value: CalendarEventAttendeeResponseStatus.TENTATIVE,
value: CalendarEventParticipantResponseStatus.TENTATIVE,
label: 'Tentative',
position: 2,
color: 'yellow',
},
{
value: CalendarEventAttendeeResponseStatus.ACCEPTED,
value: CalendarEventParticipantResponseStatus.ACCEPTED,
label: 'Accepted',
position: 3,
color: 'green',
},
],
defaultValue: `'${CalendarEventAttendeeResponseStatus.NEEDS_ACTION}'`,
defaultValue: `'${CalendarEventParticipantResponseStatus.NEEDS_ACTION}'`,
})
responseStatus: string;
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.person,
standardId: calendarEventParticipantStandardFieldIds.person,
type: FieldMetadataType.RELATION,
label: 'Person',
description: 'Person',
@@ -117,7 +117,7 @@ export class CalendarEventAttendeeObjectMetadata extends BaseObjectMetadata {
person: PersonObjectMetadata;
@FieldMetadata({
standardId: calendarEventAttendeeStandardFieldIds.workspaceMember,
standardId: calendarEventParticipantStandardFieldIds.workspaceMember,
type: FieldMetadataType.RELATION,
label: 'Workspace Member',
description: 'Workspace Member',

View File

@@ -11,7 +11,7 @@ import { IsSystem } from 'src/engine/workspace-manager/workspace-sync-metadata/d
import { ObjectMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/decorators/object-metadata.decorator';
import { BaseObjectMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects/base.object-metadata';
import { CalendarChannelEventAssociationObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-channel-event-association.object-metadata';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { IsNullable } from 'src/engine/workspace-manager/workspace-sync-metadata/decorators/is-nullable.decorator';
import { standardObjectIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
import { calendarEventStandardFieldIds } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
@@ -171,16 +171,16 @@ export class CalendarEventObjectMetadata extends BaseObjectMetadata {
calendarChannelEventAssociations: CalendarChannelEventAssociationObjectMetadata[];
@FieldMetadata({
standardId: calendarEventStandardFieldIds.eventAttendees,
standardId: calendarEventStandardFieldIds.eventParticipants,
type: FieldMetadataType.RELATION,
label: 'Event Attendees',
description: 'Event Attendees',
label: 'Event Participants',
description: 'Event Participants',
icon: 'IconUserCircle',
})
@RelationMetadata({
type: RelationMetadataType.ONE_TO_MANY,
inverseSideTarget: () => CalendarEventAttendeeObjectMetadata,
inverseSideTarget: () => CalendarEventParticipantObjectMetadata,
onDelete: RelationOnDeleteAction.CASCADE,
})
eventAttendees: CalendarEventAttendeeObjectMetadata[];
eventParticipants: CalendarEventParticipantObjectMetadata[];
}

View File

@@ -1,4 +1,4 @@
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CalendarEventObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event.object-metadata';
import { ObjectRecord } from 'src/engine/workspace-manager/workspace-sync-metadata/types/object-record';
@@ -7,16 +7,16 @@ export type CalendarEvent = Omit<
| 'createdAt'
| 'updatedAt'
| 'calendarChannelEventAssociations'
| 'calendarEventAttendees'
| 'eventAttendees'
| 'calendarEventParticipants'
| 'eventParticipants'
| 'conferenceLink'
> & {
conferenceLinkLabel: string;
conferenceLinkUrl: string;
};
export type CalendarEventAttendee = Omit<
ObjectRecord<CalendarEventAttendeeObjectMetadata>,
export type CalendarEventParticipant = Omit<
ObjectRecord<CalendarEventParticipantObjectMetadata>,
| 'id'
| 'createdAt'
| 'updatedAt'
@@ -29,11 +29,11 @@ export type CalendarEventAttendee = Omit<
iCalUID: string;
};
export type CalendarEventWithAttendees = CalendarEvent & {
export type CalendarEventWithParticipants = CalendarEvent & {
externalId: string;
attendees: CalendarEventAttendee[];
participants: CalendarEventParticipant[];
};
export type CalendarEventAttendeeWithId = CalendarEventAttendee & {
export type CalendarEventParticipantWithId = CalendarEventParticipant & {
id: string;
};

View File

@@ -1,24 +1,24 @@
import { calendar_v3 } from 'googleapis';
import { v4 } from 'uuid';
import { CalendarEventWithAttendees } from 'src/modules/calendar/types/calendar-event';
import { CalendarEventAttendeeResponseStatus } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantResponseStatus } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CalendarEventWithParticipants } from 'src/modules/calendar/types/calendar-event';
export const formatGoogleCalendarEvent = (
event: calendar_v3.Schema$Event,
): CalendarEventWithAttendees => {
): CalendarEventWithParticipants => {
const id = v4();
const formatResponseStatus = (status: string | null | undefined) => {
switch (status) {
case 'accepted':
return CalendarEventAttendeeResponseStatus.ACCEPTED;
return CalendarEventParticipantResponseStatus.ACCEPTED;
case 'declined':
return CalendarEventAttendeeResponseStatus.DECLINED;
return CalendarEventParticipantResponseStatus.DECLINED;
case 'tentative':
return CalendarEventAttendeeResponseStatus.TENTATIVE;
return CalendarEventParticipantResponseStatus.TENTATIVE;
default:
return CalendarEventAttendeeResponseStatus.NEEDS_ACTION;
return CalendarEventParticipantResponseStatus.NEEDS_ACTION;
}
};
@@ -40,7 +40,7 @@ export const formatGoogleCalendarEvent = (
conferenceLinkLabel: event.conferenceData?.entryPoints?.[0]?.uri ?? '',
conferenceLinkUrl: event.conferenceData?.entryPoints?.[0]?.uri ?? '',
recurringEventExternalId: event.recurringEventId ?? '',
attendees:
participants:
event.attendees?.map((attendee) => ({
calendarEventId: id,
iCalUID: event.iCalUID ?? '',

View File

@@ -9,8 +9,8 @@ import { WorkspaceMemberObjectMetadata } from 'src/modules/workspace-member/stan
import { MessageParticipantModule } from 'src/modules/messaging/services/message-participant/message-participant.module';
import { WorkspaceDataSourceModule } from 'src/engine/workspace-datasource/workspace-datasource.module';
import { CreateCompanyAndContactListener } from 'src/modules/connected-account/auto-companies-and-contacts-creation/listeners/create-company-and-contact.listener';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventAttendeeModule } from 'src/modules/calendar/services/calendar-event-attendee/calendar-event-attendee.module';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CalendarEventParticipantModule } from 'src/modules/calendar/services/calendar-event-participant/calendar-event-participant.module';
@Module({
imports: [
@@ -19,11 +19,11 @@ import { CalendarEventAttendeeModule } from 'src/modules/calendar/services/calen
ObjectMetadataRepositoryModule.forFeature([
PersonObjectMetadata,
WorkspaceMemberObjectMetadata,
CalendarEventAttendeeObjectMetadata,
CalendarEventParticipantObjectMetadata,
]),
MessageParticipantModule,
WorkspaceDataSourceModule,
CalendarEventAttendeeModule,
CalendarEventParticipantModule,
],
providers: [CreateCompanyAndContactService, CreateCompanyAndContactListener],
exports: [CreateCompanyAndContactService],

View File

@@ -18,9 +18,9 @@ import { MessageParticipantRepository } from 'src/modules/messaging/repositories
import { WorkspaceDataSourceService } from 'src/engine/workspace-datasource/workspace-datasource.service';
import { MessageParticipantService } from 'src/modules/messaging/services/message-participant/message-participant.service';
import { MessageParticipantObjectMetadata } from 'src/modules/messaging/standard-objects/message-participant.object-metadata';
import { CalendarEventAttendeeService } from 'src/modules/calendar/services/calendar-event-attendee/calendar-event-attendee.service';
import { CalendarEventAttendeeRepository } from 'src/modules/calendar/repositories/calendar-event-attendee.repository';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantService } from 'src/modules/calendar/services/calendar-event-participant/calendar-event-participant.service';
import { CalendarEventParticipantRepository } from 'src/modules/calendar/repositories/calendar-event-participant.repository';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { filterOutContactsFromCompanyOrWorkspace } from 'src/modules/connected-account/auto-companies-and-contacts-creation/utils/filter-out-contacts-from-company-or-workspace.util';
@Injectable()
@@ -36,9 +36,9 @@ export class CreateCompanyAndContactService {
private readonly messageParticipantRepository: MessageParticipantRepository,
private readonly workspaceDataSourceService: WorkspaceDataSourceService,
private readonly messageParticipantService: MessageParticipantService,
@InjectObjectMetadataRepository(CalendarEventAttendeeObjectMetadata)
private readonly calendarEventAttendeeRepository: CalendarEventAttendeeRepository,
private readonly calendarEventAttendeeService: CalendarEventAttendeeService,
@InjectObjectMetadataRepository(CalendarEventParticipantObjectMetadata)
private readonly calendarEventParticipantRepository: CalendarEventParticipantRepository,
private readonly calendarEventParticipantService: CalendarEventParticipantService,
) {}
async createCompaniesAndContacts(
@@ -162,14 +162,14 @@ export class CreateCompanyAndContactService {
transactionManager,
);
const calendarEventAttendeesWithoutPersonIdAndWorkspaceMemberId =
await this.calendarEventAttendeeRepository.getWithoutPersonIdAndWorkspaceMemberId(
const calendarEventParticipantsWithoutPersonIdAndWorkspaceMemberId =
await this.calendarEventParticipantRepository.getWithoutPersonIdAndWorkspaceMemberId(
workspaceId,
transactionManager,
);
await this.calendarEventAttendeeService.updateCalendarEventAttendeesAfterContactCreation(
calendarEventAttendeesWithoutPersonIdAndWorkspaceMemberId,
await this.calendarEventParticipantService.updateCalendarEventParticipantsAfterContactCreation(
calendarEventParticipantsWithoutPersonIdAndWorkspaceMemberId,
workspaceId,
transactionManager,
);

View File

@@ -16,7 +16,7 @@ import { RelationMetadata } from 'src/engine/workspace-manager/workspace-sync-me
import { ActivityTargetObjectMetadata } from 'src/modules/activity/standard-objects/activity-target.object-metadata';
import { AttachmentObjectMetadata } from 'src/modules/attachment/standard-objects/attachment.object-metadata';
import { BaseObjectMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects/base.object-metadata';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CompanyObjectMetadata } from 'src/modules/company/standard-objects/company.object-metadata';
import { FavoriteObjectMetadata } from 'src/modules/favorite/standard-objects/favorite.object-metadata';
import { MessageParticipantObjectMetadata } from 'src/modules/messaging/standard-objects/message-participant.object-metadata';
@@ -206,22 +206,22 @@ export class PersonObjectMetadata extends BaseObjectMetadata {
messageParticipants: MessageParticipantObjectMetadata[];
@FieldMetadata({
standardId: personStandardFieldIds.calendarEventAttendees,
standardId: personStandardFieldIds.calendarEventParticipants,
type: FieldMetadataType.RELATION,
label: 'Calendar Event Attendees',
description: 'Calendar Event Attendees',
label: 'Calendar Event Participants',
description: 'Calendar Event Participants',
icon: 'IconCalendar',
})
@RelationMetadata({
type: RelationMetadataType.ONE_TO_MANY,
inverseSideTarget: () => CalendarEventAttendeeObjectMetadata,
inverseSideTarget: () => CalendarEventParticipantObjectMetadata,
onDelete: RelationOnDeleteAction.SET_NULL,
})
@Gate({
featureFlag: 'IS_CALENDAR_ENABLED',
})
@IsSystem()
calendarEventAttendees: CalendarEventAttendeeObjectMetadata[];
calendarEventParticipants: CalendarEventParticipantObjectMetadata[];
@FieldMetadata({
standardId: personStandardFieldIds.events,

View File

@@ -15,7 +15,7 @@ import { ActivityObjectMetadata } from 'src/modules/activity/standard-objects/ac
import { AttachmentObjectMetadata } from 'src/modules/attachment/standard-objects/attachment.object-metadata';
import { BaseObjectMetadata } from 'src/engine/workspace-manager/workspace-sync-metadata/standard-objects/base.object-metadata';
import { BlocklistObjectMetadata } from 'src/modules/connected-account/standard-objects/blocklist.object-metadata';
import { CalendarEventAttendeeObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-attendee.object-metadata';
import { CalendarEventParticipantObjectMetadata } from 'src/modules/calendar/standard-objects/calendar-event-participant.object-metadata';
import { CommentObjectMetadata } from 'src/modules/activity/standard-objects/comment.object-metadata';
import { CompanyObjectMetadata } from 'src/modules/company/standard-objects/company.object-metadata';
import { ConnectedAccountObjectMetadata } from 'src/modules/connected-account/standard-objects/connected-account.object-metadata';
@@ -226,22 +226,22 @@ export class WorkspaceMemberObjectMetadata extends BaseObjectMetadata {
blocklist: BlocklistObjectMetadata[];
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.calendarEventAttendees,
standardId: workspaceMemberStandardFieldIds.calendarEventParticipants,
type: FieldMetadataType.RELATION,
label: 'Calendar Event Attendees',
description: 'Calendar Event Attendees',
label: 'Calendar Event Participants',
description: 'Calendar Event Participants',
icon: 'IconCalendar',
})
@RelationMetadata({
type: RelationMetadataType.ONE_TO_MANY,
inverseSideTarget: () => CalendarEventAttendeeObjectMetadata,
inverseSideTarget: () => CalendarEventParticipantObjectMetadata,
inverseSideFieldKey: 'workspaceMember',
onDelete: RelationOnDeleteAction.SET_NULL,
})
@Gate({
featureFlag: 'IS_CALENDAR_ENABLED',
})
calendarEventAttendees: CalendarEventAttendeeObjectMetadata[];
calendarEventParticipants: CalendarEventParticipantObjectMetadata[];
@FieldMetadata({
standardId: workspaceMemberStandardFieldIds.events,