Revert "perf: Refactor getPublicEvent to fetch org data using DB index key (#21850)"

This reverts commit a37f1d9798.
This commit is contained in:
Alex van Andel
2025-06-24 16:37:36 +01:00
parent 6dad0e7679
commit 218ec9140c
8 changed files with 51 additions and 79 deletions
@@ -424,10 +424,7 @@ export class EventTypesAtomService {
isTeamEvent,
orgSlug,
this.dbRead.prisma as unknown as PrismaClient,
true,
undefined,
false,
orgId
true
);
if (!event) {
@@ -23,7 +23,7 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
const { link, slug } = paramsSchema.parse(context.params);
const { rescheduleUid, duration: queryDuration } = context.query;
const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req);
const orgSlug = isValidOrgDomain ? currentOrgDomain : null;
const org = isValidOrgDomain ? currentOrgDomain : null;
const hashedLink = await prisma.hashedLink.findUnique({
where: {
@@ -86,7 +86,7 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
return notFound;
}
if (!orgSlug) {
if (!org) {
const redirect = await getTemporaryOrgRedirect({
slugs: [username],
redirectType: RedirectType.User,
@@ -103,7 +103,7 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
const [user] = await UserRepository.findUsersByUsername({
usernameList: [name],
orgSlug: orgSlug,
orgSlug: org,
});
if (!user) {
@@ -128,9 +128,8 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
username: name,
eventSlug: slug,
isTeamEvent,
orgSlug,
org,
fromRedirectOfNonOrgLink: context.query.orgRedirection === "true",
orgId: session?.user?.org?.id ?? session?.user?.profile?.organizationId ?? undefined,
},
session?.user?.id
);
@@ -43,8 +43,8 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
} as const;
}
const orgSlug = isValidOrgDomain ? currentOrgDomain : null;
if (!orgSlug) {
const org = isValidOrgDomain ? currentOrgDomain : null;
if (!org) {
return {
notFound: true,
} as const;
@@ -55,9 +55,8 @@ export const getServerSideProps = async (context: GetServerSidePropsContext) =>
username: teamSlug,
eventSlug: meetingSlug,
isTeamEvent: true,
orgSlug,
org,
fromRedirectOfNonOrgLink: context.query.orgRedirection === "true",
orgId: session?.user?.org?.id ?? session?.user?.profile?.organizationId ?? undefined,
},
session?.user?.id
);
@@ -121,8 +121,8 @@ async function getDynamicGroupPageProps(context: GetServerSidePropsContext) {
const { rescheduleUid, bookingUid } = context.query;
const allowRescheduleForCancelledBooking = context.query.allowRescheduleForCancelledBooking === "true";
const { currentOrgDomain, isValidOrgDomain } = orgDomainConfig(context.req, context.params?.orgSlug);
const orgSlug = isValidOrgDomain ? currentOrgDomain : null;
if (!orgSlug) {
const org = isValidOrgDomain ? currentOrgDomain : null;
if (!org) {
const redirect = await getTemporaryOrgRedirect({
slugs: usernames,
redirectType: RedirectType.User,
@@ -155,9 +155,8 @@ async function getDynamicGroupPageProps(context: GetServerSidePropsContext) {
{
username: usernames.join("+"),
eventSlug: slug,
orgSlug,
org,
fromRedirectOfNonOrgLink: context.query.orgRedirection === "true",
orgId: session?.user?.org?.id ?? session?.user?.profile?.organizationId ?? undefined,
},
session?.user?.id
);
@@ -242,7 +241,7 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
} as const;
}
const orgSlug = isValidOrgDomain ? currentOrgDomain : null;
const org = isValidOrgDomain ? currentOrgDomain : null;
// We use this to both prefetch the query on the server,
// as well as to check if the event exist, so we can show a 404 otherwise.
@@ -250,7 +249,7 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
{
username,
eventSlug: slug,
orgSlug,
org,
fromRedirectOfNonOrgLink: context.query.orgRedirection === "true",
},
session?.user?.id
@@ -262,7 +261,7 @@ async function getUserPageProps(context: GetServerSidePropsContext) {
} as const;
}
const allowSEOIndexing = orgSlug
const allowSEOIndexing = org
? user?.profile?.organization?.organizationSettings?.allowSEOIndexing
? user?.allowSEOIndexing
: false
@@ -19,7 +19,7 @@ export type useScheduleForEventReturnType = ReturnType<typeof useScheduleForEven
* of combining multiple conditional hooks.
*/
export const useEvent = (props?: { fromRedirectOfNonOrgLink?: boolean; disabled?: boolean }) => {
const [username, eventSlug, isTeamEvent, orgSlug] = useBookerStore(
const [username, eventSlug, isTeamEvent, org] = useBookerStore(
(state) => [state.username, state.eventSlug, state.isTeamEvent, state.org],
shallow
);
@@ -29,7 +29,7 @@ export const useEvent = (props?: { fromRedirectOfNonOrgLink?: boolean; disabled?
username: username ?? "",
eventSlug: eventSlug ?? "",
isTeamEvent,
orgSlug: orgSlug ?? null,
org: org ?? null,
fromRedirectOfNonOrgLink: props?.fromRedirectOfNonOrgLink,
},
{
@@ -227,20 +227,19 @@ export const getPublicEvent = async (
username: string,
eventSlug: string,
isTeamEvent: boolean | undefined,
orgSlug: string | null,
org: string | null,
prisma: PrismaClient,
fromRedirectOfNonOrgLink: boolean,
currentUserId?: number,
fetchAllUsers = false,
orgId?: number
fetchAllUsers = false
) => {
const usernameList = getUsernameList(username);
const orgQuery = orgSlug ? getSlugOrRequestedSlug(orgSlug) : null;
const orgQuery = org ? getSlugOrRequestedSlug(org) : null;
// In case of dynamic group event, we fetch user's data and use the default event.
if (usernameList.length > 1) {
const usersInOrgContext = await UserRepository.findUsersByUsername({
usernameList,
orgSlug: orgSlug,
orgSlug: org,
});
const users = usersInOrgContext;
@@ -268,27 +267,18 @@ export const getPublicEvent = async (
const disableBookingTitle = !defaultEvent.isDynamic;
const unPublishedOrgUser = users.find((user) => user.profile?.organization?.slug === null);
const orgDetails: Pick<Team, "logoUrl" | "name"> | undefined = orgId
? await prisma.team.findUniqueOrThrow({
where: {
id: orgId,
},
select: {
logoUrl: true,
name: true,
},
})
: orgSlug
? await prisma.team.findFirstOrThrow({
where: {
slug: orgSlug,
},
select: {
logoUrl: true,
name: true,
},
})
: undefined;
let orgDetails: Pick<Team, "logoUrl" | "name"> | undefined;
if (org) {
orgDetails = await prisma.team.findFirstOrThrow({
where: {
slug: org,
},
select: {
logoUrl: true,
name: true,
},
});
}
return {
...defaultEvent,
@@ -319,14 +309,14 @@ export const getPublicEvent = async (
? {
image: getPlaceholderAvatar(orgDetails?.logoUrl, orgDetails?.name),
name: orgDetails?.name,
username: orgSlug,
username: org,
}
: {}),
},
entity: {
considerUnpublished: !fromRedirectOfNonOrgLink && unPublishedOrgUser !== undefined,
fromRedirectOfNonOrgLink,
orgSlug: orgSlug,
orgSlug: org,
name: unPublishedOrgUser?.profile?.organization?.name ?? null,
teamSlug: null,
logoUrl: null,
@@ -447,28 +437,19 @@ export const getPublicEvent = async (
eventWithUserProfiles.schedule = eventOwnerDefaultSchedule;
}
const orgDetails: Pick<Team, "logoUrl" | "name"> | undefined | null = orgId
? await prisma.team.findUnique({
where: {
id: orgId,
},
select: {
logoUrl: true,
name: true,
},
})
: orgSlug
? await prisma.team.findFirst({
where: {
slug: orgSlug,
parentId: null,
},
select: {
logoUrl: true,
name: true,
},
})
: undefined;
let orgDetails: Pick<Team, "logoUrl" | "name"> | undefined | null;
if (org) {
orgDetails = await prisma.team.findFirst({
where: {
slug: org,
parentId: null,
},
select: {
logoUrl: true,
name: true,
},
});
}
let showInstantEventConnectNowModal = eventWithUserProfiles.isInstantEvent;
@@ -526,7 +507,7 @@ export const getPublicEvent = async (
(eventWithUserProfiles.team?.slug === null ||
eventWithUserProfiles.owner?.profile?.organization?.slug === null ||
eventWithUserProfiles.team?.parent?.slug === null),
orgSlug: orgSlug,
orgSlug: org,
teamSlug: (eventWithUserProfiles.team?.slug || teamMetadata?.requestedSlug) ?? null,
name:
(eventWithUserProfiles.owner?.profile?.organization?.name ||
+2 -4
View File
@@ -8,12 +8,10 @@ export class EventRepository {
input.username,
input.eventSlug,
input.isTeamEvent,
input.orgSlug,
input.org,
prisma,
input.fromRedirectOfNonOrgLink,
userId,
false,
input.orgId
userId
);
return event;
}
@@ -4,8 +4,7 @@ export const ZEventInputSchema = z.object({
username: z.string(),
eventSlug: z.string(),
isTeamEvent: z.boolean().optional(),
orgSlug: z.string().nullable(),
orgId: z.number().optional(),
org: z.string().nullable(),
/**
* Informs that the event request has been sent from a page that was reached by a redirect from non-org link(i.e. app.cal.com/username redirected to acme.cal.com/username)
* Based on this decision like whether to allow unpublished organization's event to be served or not can be made.