mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
* add eslint config * migrate autoLock to features * migrate teamService to features * migrate userCreationService * migrate insights services to features * migrate ProfileRepository * update imports * migrate filter segmen tests * migrate filter segment repository * migrate getBusyTimes * migrate getLocaleFromRequest * refactor csvUtils * make filename clearer * migrate getLuckyUser integration test * migrate autoLock test to features * wip * refactors * migrate useBookerUrl * migrate more * wip * Migrate eventTypeRepository * membership repository * update imports * update imports * migrate * move organization repository * update imports * update imports * wip * wip * wip * wip * wip * wip * wip * wip * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix tests * fix type checks * fix * fix * migrate * update imports * fix tests * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix * fix
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
import type { GetServerSidePropsContext } from "next";
|
|
import { z } from "zod";
|
|
|
|
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
|
|
import { getClientSecretFromPayment } from "@calcom/features/ee/payments/pages/getClientSecretFromPayment";
|
|
import { shouldHideBrandingForEvent } from "@calcom/features/profile/lib/hideBranding";
|
|
import prisma from "@calcom/prisma";
|
|
import { BookingStatus } from "@calcom/prisma/enums";
|
|
import { paymentDataSelect } from "@calcom/prisma/selects/payment";
|
|
import { EventTypeMetaDataSchema } from "@calcom/prisma/zod-utils";
|
|
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
|
|
|
|
export type PaymentPageProps = inferSSRProps<typeof getServerSideProps>;
|
|
|
|
const querySchema = z.object({
|
|
uid: z.string(),
|
|
});
|
|
|
|
export const getServerSideProps = async (context: GetServerSidePropsContext) => {
|
|
const { uid } = querySchema.parse(context.query);
|
|
const session = await getServerSession({ req: context.req });
|
|
|
|
const rawPayment = await prisma.payment.findUnique({
|
|
where: {
|
|
uid,
|
|
},
|
|
select: paymentDataSelect,
|
|
});
|
|
|
|
if (!rawPayment) return { notFound: true } as const;
|
|
|
|
const { data, booking: _booking, ...restPayment } = rawPayment;
|
|
|
|
const payment = {
|
|
...restPayment,
|
|
data: data as Record<string, unknown>,
|
|
};
|
|
|
|
if (!_booking) return { notFound: true } as const;
|
|
|
|
const { startTime, endTime, eventType, ...restBooking } = _booking;
|
|
const booking = {
|
|
...restBooking,
|
|
startTime: startTime.toString(),
|
|
endTime: endTime.toString(),
|
|
};
|
|
|
|
if (!eventType) return { notFound: true } as const;
|
|
|
|
if (eventType.users.length === 0 && !!!eventType.team) return { notFound: true } as const;
|
|
|
|
const [user] = eventType?.users.length
|
|
? eventType.users
|
|
: [{ name: null, theme: null, hideBranding: null, username: null }];
|
|
const profile = {
|
|
name: eventType.team?.name || user?.name || null,
|
|
theme: (!eventType.team?.name && user?.theme) || null,
|
|
hideBranding: await shouldHideBrandingForEvent({
|
|
eventTypeId: eventType.id,
|
|
team: eventType.team,
|
|
owner: eventType.users[0] ?? null,
|
|
organizationId: session?.user?.profile?.organizationId ?? session?.user?.org?.id ?? null,
|
|
}),
|
|
};
|
|
|
|
if (
|
|
([BookingStatus.CANCELLED, BookingStatus.REJECTED] as BookingStatus[]).includes(
|
|
booking.status as BookingStatus
|
|
)
|
|
) {
|
|
return {
|
|
redirect: {
|
|
destination: `/booking/${booking.uid}`,
|
|
permanent: false,
|
|
},
|
|
};
|
|
}
|
|
|
|
return {
|
|
props: {
|
|
user,
|
|
eventType: {
|
|
...eventType,
|
|
metadata: EventTypeMetaDataSchema.parse(eventType.metadata),
|
|
},
|
|
booking,
|
|
payment,
|
|
clientSecret: getClientSecretFromPayment(payment),
|
|
profile,
|
|
},
|
|
};
|
|
};
|