diff --git a/packages/features/ee/support/lib/intercom/useIntercom.ts b/packages/features/ee/support/lib/intercom/useIntercom.ts index b62522335a..48b8bde98b 100644 --- a/packages/features/ee/support/lib/intercom/useIntercom.ts +++ b/packages/features/ee/support/lib/intercom/useIntercom.ts @@ -5,6 +5,7 @@ import { z } from "zod"; import dayjs from "@calcom/dayjs"; import { WEBAPP_URL, WEBSITE_URL } from "@calcom/lib/constants"; +import hasKeyInMetadata from "@calcom/lib/hasKeyInMetadata"; import { useHasTeamPlan, useHasPaidPlan } from "@calcom/lib/hooks/useHasPaidPlan"; import { trpc } from "@calcom/trpc/react"; @@ -56,6 +57,13 @@ export const useIntercom = () => { metadata: data?.metadata, completed_onboarding: data.completedOnboarding, is_logged_in: !!data, + sum_of_bookings: data.sumOfBookings, + sum_of_calendars: data.sumOfCalendars, + sum_of_teams: data.sumOfTeams, + has_org: !data.organizationId, + sum_of_event_types: data.sumOfEventTypes, + sum_of_team_event_types: data.sumOfTeamEventTypes, + is_premium: hasKeyInMetadata(data, "isPremium") ? !!data.metadata.isPremium : false, }, }); }; diff --git a/packages/trpc/server/routers/loggedInViewer/me.handler.ts b/packages/trpc/server/routers/loggedInViewer/me.handler.ts index b7215107d1..400948f231 100644 --- a/packages/trpc/server/routers/loggedInViewer/me.handler.ts +++ b/packages/trpc/server/routers/loggedInViewer/me.handler.ts @@ -71,6 +71,37 @@ export const meHandler = async ({ ctx, input }: MeOptions) => { identityProviderEmail = account?.providerEmail || ""; } + const additionalUserInfo = await prisma.user.findFirst({ + where: { + id: user.id, + }, + select: { + bookings: { + select: { id: true }, + }, + selectedCalendars: true, + teams: { + select: { + team: { + select: { + id: true, + eventTypes: true, + }, + }, + }, + }, + eventTypes: { + select: { id: true }, + }, + }, + }); + let sumOfTeamEventTypes = 0; + for (const team of additionalUserInfo?.teams || []) { + for (const _eventType of team.team.eventTypes) { + sumOfTeamEventTypes++; + } + } + // Destructuring here only makes it more illegible // pick only the part we want to expose in the API return { @@ -113,6 +144,11 @@ export const meHandler = async ({ ctx, input }: MeOptions) => { profile: user.profile ?? null, profiles: allUserEnrichedProfiles, secondaryEmails, + sumOfBookings: additionalUserInfo?.bookings.length, + sumOfCalendars: additionalUserInfo?.selectedCalendars.length, + sumOfTeams: additionalUserInfo?.teams.length, + sumOfEventTypes: additionalUserInfo?.eventTypes.length, + sumOfTeamEventTypes, ...(passwordAdded ? { passwordAdded } : {}), }; };