chore: User page crash on bad metadata (#12858)

* chore: User page crash on bad metadata

* Sentry.captureException -> logger.error

---------

Co-authored-by: Keith Williams <keithwillcode@gmail.com>
This commit is contained in:
Alex van Andel 2023-12-19 17:17:39 +00:00 committed by GitHub
parent f0bd628713
commit 31b88c5537
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,6 +20,7 @@ import { getUsernameList } from "@calcom/lib/defaultEvents";
import { useLocale } from "@calcom/lib/hooks/useLocale"; import { useLocale } from "@calcom/lib/hooks/useLocale";
import { useRouterQuery } from "@calcom/lib/hooks/useRouterQuery"; import { useRouterQuery } from "@calcom/lib/hooks/useRouterQuery";
import useTheme from "@calcom/lib/hooks/useTheme"; import useTheme from "@calcom/lib/hooks/useTheme";
import logger from "@calcom/lib/logger";
import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML"; import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML";
import { stripMarkdown } from "@calcom/lib/stripMarkdown"; import { stripMarkdown } from "@calcom/lib/stripMarkdown";
import prisma from "@calcom/prisma"; import prisma from "@calcom/prisma";
@ -188,46 +189,55 @@ UserPage.isBookingPage = true;
UserPage.PageWrapper = PageWrapper; UserPage.PageWrapper = PageWrapper;
const getEventTypesWithHiddenFromDB = async (userId: number) => { const getEventTypesWithHiddenFromDB = async (userId: number) => {
return ( const eventTypes = await prisma.eventType.findMany({
await prisma.eventType.findMany({ where: {
where: { AND: [
AND: [ {
{ teamId: null,
teamId: null, },
}, {
{ OR: [
OR: [ {
{ userId,
userId, },
}, {
{ users: {
users: { some: {
some: { id: userId,
id: userId,
},
}, },
}, },
], },
}, ],
],
},
orderBy: [
{
position: "desc",
},
{
id: "asc",
}, },
], ],
select: { },
...baseEventTypeSelect, orderBy: [
metadata: true, {
position: "desc",
}, },
}) {
).map((eventType) => ({ id: "asc",
...eventType, },
metadata: EventTypeMetaDataSchema.parse(eventType.metadata), ],
})); select: {
...baseEventTypeSelect,
metadata: true,
},
});
// map and filter metadata, exclude eventType entirely when faulty metadata is found.
// report error to exception so we don't lose the error.
return eventTypes.reduce<typeof eventTypes>((eventTypes, eventType) => {
const parsedMetadata = EventTypeMetaDataSchema.safeParse(eventType.metadata);
if (!parsedMetadata.success) {
logger.error(parsedMetadata.error);
return eventTypes;
}
eventTypes.push({
...eventType,
metadata: parsedMetadata.data,
});
return eventTypes;
}, []);
}; };
export type UserPageProps = { export type UserPageProps = {