From 361108246ed1c8e487f1e146eafe56632372d646 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Mon, 19 Jun 2023 17:53:31 +0200 Subject: [PATCH] Created secondary function to read the owner from users array (#9638) --- .../features/eventtypes/lib/getPublicEvent.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/features/eventtypes/lib/getPublicEvent.ts b/packages/features/eventtypes/lib/getPublicEvent.ts index 2a83790b30..3cf964b87e 100644 --- a/packages/features/eventtypes/lib/getPublicEvent.ts +++ b/packages/features/eventtypes/lib/getPublicEvent.ts @@ -167,6 +167,11 @@ export const getPublicEvent = async (username: string, eventSlug: string, prisma const eventMetaData = EventTypeMetaDataSchema.parse(event.metadata || {}); + const users = getUsersFromEvent(event) || (await getOwnerFromUsersArray(prisma, event.id)); + if (users === null) { + throw new Error("Event has no owner"); + } + return { ...event, bookerLayouts: bookerLayoutsSchema.parse(eventMetaData?.bookerLayouts || null), @@ -178,7 +183,7 @@ export const getPublicEvent = async (username: string, eventSlug: string, prisma recurringEvent: isRecurringEvent(event.recurringEvent) ? parseRecurringEvent(event.recurringEvent) : null, // Sets user data on profile object for easier access profile: getProfileFromEvent(event), - users: getUsersFromEvent(event), + users, }; }; @@ -234,13 +239,22 @@ function getUsersFromEvent(event: Event) { if (team) { return (hosts || []).map(mapHostsToUsers); } - - if (!owner) throw new Error("Event has no owner"); - + if (!owner) { + return null; + } const { username, name, weekStart } = owner; return [{ username, name, weekStart }]; } +async function getOwnerFromUsersArray(prisma: PrismaClient, eventTypeId: number) { + const { users } = await prisma.eventType.findUniqueOrThrow({ + where: { id: eventTypeId }, + select: { users: { select: { username: true, name: true, weekStart: true } } }, + }); + if (!users.length) return null; + return [users[0]]; +} + function mapHostsToUsers(host: { user: Pick }) { return { username: host.user.username,