mirror of
https://github.com/lingble/twenty.git
synced 2025-11-02 13:47:55 +00:00
4702 rename calendareventattendee to calendareventparticipant (#4761)
Closes #4702
This commit is contained in:
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -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'
|
||||
* },
|
||||
* });
|
||||
*/
|
||||
|
||||
@@ -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"
|
||||
/>
|
||||
))}
|
||||
|
||||
@@ -10,7 +10,7 @@ import { sortDesc } from '~/utils/sort';
|
||||
|
||||
type CalendarEventGeneric = Omit<
|
||||
CalendarEvent,
|
||||
'attendees' | 'externalCreatedAt'
|
||||
'participants' | 'externalCreatedAt'
|
||||
>;
|
||||
|
||||
export const useCalendarEvents = <T extends CalendarEventGeneric>(
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const timelineCalendarEventAttendeeFragment = gql`
|
||||
fragment TimelineCalendarEventAttendeeFragment on TimelineCalendarEventAttendee {
|
||||
personId
|
||||
workspaceMemberId
|
||||
firstName
|
||||
lastName
|
||||
displayName
|
||||
avatarUrl
|
||||
handle
|
||||
}
|
||||
`;
|
||||
@@ -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}
|
||||
`;
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
import { gql } from '@apollo/client';
|
||||
|
||||
export const timelineCalendarEventParticipantFragment = gql`
|
||||
fragment TimelineCalendarEventParticipantFragment on TimelineCalendarEventParticipant {
|
||||
personId
|
||||
workspaceMemberId
|
||||
firstName
|
||||
lastName
|
||||
displayName
|
||||
avatarUrl
|
||||
handle
|
||||
}
|
||||
`;
|
||||
@@ -14,7 +14,7 @@ export type CalendarEvent = {
|
||||
startsAt: string;
|
||||
title?: string;
|
||||
visibility: 'METADATA' | 'SHARE_EVERYTHING';
|
||||
attendees?: {
|
||||
participants?: {
|
||||
displayName: string;
|
||||
workspaceMemberId?: string;
|
||||
}[];
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -42,7 +42,7 @@ const renewTokenMutation = async (
|
||||
>({
|
||||
mutation: RenewTokenDocument,
|
||||
variables: {
|
||||
refreshToken: refreshToken,
|
||||
appToken: refreshToken,
|
||||
},
|
||||
fetchPolicy: 'network-only',
|
||||
});
|
||||
|
||||
@@ -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 || '',
|
||||
|
||||
@@ -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' },
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
},
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
)
|
||||
|
||||
@@ -37,7 +37,6 @@ export enum FieldMetadataType {
|
||||
RELATION = 'RELATION',
|
||||
POSITION = 'POSITION',
|
||||
ADDRESS = 'ADDRESS',
|
||||
JSON = 'JSON',
|
||||
RAW_JSON = 'RAW_JSON',
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
};
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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,
|
||||
];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 {}
|
||||
@@ -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,
|
||||
@@ -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,
|
||||
],
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
@@ -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[];
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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 ?? '',
|
||||
|
||||
@@ -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],
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user