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:
parent
f0bd628713
commit
31b88c5537
|
@ -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 = {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user