chore: App router migration - Add method to BookingRepository & Extract /videos/**/* into /modules and /lib (#16466)
* meeting-ended: refactor and extract client code into /modules * meeting-not-started: refactor and extract client code into /modules * meeting-not-found: fix getData * BookingRepository: add a new method * video: refactor and extract client code into /modules * refactor * refactor getServerSideProps * use findBookingByUid for more getServerSideProps functions * rename findBookingByUid -> findBookingByUidWithOptionalSelect * add safety
This commit is contained in:
@@ -4,8 +4,10 @@ import { WithLayout } from "app/layoutHOC";
|
||||
|
||||
import { APP_NAME } from "@calcom/lib/constants";
|
||||
|
||||
import { getServerSideProps } from "@lib/video/[uid]/getServerSideProps";
|
||||
|
||||
import type { PageProps } from "~/videos/views/videos-single-view";
|
||||
import VideosSingleView from "~/videos/views/videos-single-view";
|
||||
import { getServerSideProps, type PageProps } from "~/videos/views/videos-single-view.getServerSideProps";
|
||||
|
||||
export const generateMetadata = async () =>
|
||||
await _generateMetadata(
|
||||
|
||||
@@ -2,8 +2,10 @@ import { withAppDirSsr } from "app/WithAppDirSsr";
|
||||
import { _generateMetadata } from "app/_utils";
|
||||
import { WithLayout } from "app/layoutHOC";
|
||||
|
||||
import { getServerSideProps } from "@lib/video/meeting-ended/[uid]/getServerSideProps";
|
||||
|
||||
import type { PageProps } from "~/videos/views/videos-meeting-ended-single-view";
|
||||
import MeetingEnded from "~/videos/views/videos-meeting-ended-single-view";
|
||||
import { getServerSideProps } from "~/videos/views/videos-meeting-ended-single-view.getServerSideProps";
|
||||
|
||||
export const generateMetadata = async () =>
|
||||
await _generateMetadata(
|
||||
@@ -11,6 +13,6 @@ export const generateMetadata = async () =>
|
||||
() => "Meeting Unavailable"
|
||||
);
|
||||
|
||||
const getData = withAppDirSsr(getServerSideProps);
|
||||
const getData = withAppDirSsr<PageProps>(getServerSideProps);
|
||||
|
||||
export default WithLayout({ getData, Page: MeetingEnded, getLayout: null })<"P">;
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
import { withAppDirSsr } from "app/WithAppDirSsr";
|
||||
import type { PageProps } from "app/_types";
|
||||
import type { PageProps as _PageProps } from "app/_types";
|
||||
import { _generateMetadata } from "app/_utils";
|
||||
import { WithLayout } from "app/layoutHOC";
|
||||
|
||||
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
|
||||
import { BookingRepository } from "@calcom/lib/server/repository/booking";
|
||||
|
||||
import { getServerSideProps } from "@lib/video/meeting-not-started/[uid]/getServerSideProps";
|
||||
|
||||
import type { PageProps } from "~/videos/views/videos-meeting-not-started-single-view";
|
||||
import MeetingNotStarted from "~/videos/views/videos-meeting-not-started-single-view";
|
||||
import { getServerSideProps } from "~/videos/views/videos-meeting-not-started-single-view.getServerSideProps";
|
||||
|
||||
export const generateMetadata = async ({ params }: PageProps) => {
|
||||
const booking = await prisma.booking.findUnique({
|
||||
where: {
|
||||
uid: typeof params?.uid === "string" ? params.uid : "",
|
||||
},
|
||||
select: bookingMinimalSelect,
|
||||
export const generateMetadata = async ({ params, searchParams }: _PageProps) => {
|
||||
const p = { ...params, ...searchParams };
|
||||
const booking = await BookingRepository.findBookingByUidWithOptionalSelect({
|
||||
bookingUid: typeof p?.uid === "string" ? p.uid : "",
|
||||
});
|
||||
|
||||
return await _generateMetadata(
|
||||
@@ -22,6 +22,6 @@ export const generateMetadata = async ({ params }: PageProps) => {
|
||||
);
|
||||
};
|
||||
|
||||
const getData = withAppDirSsr(getServerSideProps);
|
||||
const getData = withAppDirSsr<PageProps>(getServerSideProps);
|
||||
|
||||
export default WithLayout({ getData, Page: MeetingNotStarted, getLayout: null })<"P">;
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
import { _generateMetadata } from "app/_utils";
|
||||
import { WithLayout } from "app/layoutHOC";
|
||||
import type { GetServerSidePropsContext } from "next";
|
||||
|
||||
import { ssrInit } from "@server/lib/ssr";
|
||||
|
||||
import NoMeetingFound from "~/videos/views/videos-no-meeting-found-single-view";
|
||||
|
||||
@@ -12,13 +9,4 @@ export const generateMetadata = async () =>
|
||||
(t) => t("no_meeting_found")
|
||||
);
|
||||
|
||||
// ssr was added by Intuita, legacy page does not have it
|
||||
const getData = async (context: GetServerSidePropsContext) => {
|
||||
const ssr = await ssrInit(context);
|
||||
|
||||
return {
|
||||
dehydratedState: ssr.dehydrate(),
|
||||
};
|
||||
};
|
||||
|
||||
export default WithLayout({ getData, Page: NoMeetingFound, getLayout: null })<"P">;
|
||||
export default WithLayout({ Page: NoMeetingFound, getLayout: null })<"P">;
|
||||
|
||||
+4
-10
@@ -7,15 +7,12 @@ import {
|
||||
} from "@calcom/app-store/dailyvideo/lib/VideoApiAdapter";
|
||||
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
|
||||
import { getCalVideoReference } from "@calcom/features/get-cal-video-reference";
|
||||
import { BookingRepository } from "@calcom/lib/server/repository/booking";
|
||||
import { UserRepository } from "@calcom/lib/server/repository/user";
|
||||
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
|
||||
|
||||
import { type inferSSRProps } from "@lib/types/inferSSRProps";
|
||||
import prisma from "@calcom/prisma";
|
||||
|
||||
import { ssrInit } from "@server/lib/ssr";
|
||||
|
||||
export type PageProps = inferSSRProps<typeof getServerSideProps>;
|
||||
|
||||
const md = new MarkdownIt("default", { html: true, breaks: true, linkify: true });
|
||||
|
||||
export async function getServerSideProps(context: GetServerSidePropsContext) {
|
||||
@@ -23,12 +20,9 @@ export async function getServerSideProps(context: GetServerSidePropsContext) {
|
||||
|
||||
const ssr = await ssrInit(context);
|
||||
|
||||
const booking = await prisma.booking.findUnique({
|
||||
where: {
|
||||
uid: context.query.uid as string,
|
||||
},
|
||||
const booking = await BookingRepository.findBookingByUidWithOptionalSelect({
|
||||
bookingUid: context.query.uid as string,
|
||||
select: {
|
||||
...bookingMinimalSelect,
|
||||
uid: true,
|
||||
description: true,
|
||||
isRecorded: true,
|
||||
+3
-6
@@ -1,17 +1,14 @@
|
||||
import type { GetServerSidePropsContext } from "next";
|
||||
|
||||
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
|
||||
import { BookingRepository } from "@calcom/lib/server/repository/booking";
|
||||
|
||||
import { type inferSSRProps } from "@lib/types/inferSSRProps";
|
||||
|
||||
export type PageProps = inferSSRProps<typeof getServerSideProps>;
|
||||
export async function getServerSideProps(context: GetServerSidePropsContext) {
|
||||
const booking = await prisma.booking.findUnique({
|
||||
where: {
|
||||
uid: context.query.uid as string,
|
||||
},
|
||||
const booking = await BookingRepository.findBookingByUidWithOptionalSelect({
|
||||
bookingUid: context.query.uid as string,
|
||||
select: {
|
||||
...bookingMinimalSelect,
|
||||
uid: true,
|
||||
user: {
|
||||
select: {
|
||||
+3
-9
@@ -1,17 +1,11 @@
|
||||
import type { GetServerSidePropsContext } from "next";
|
||||
|
||||
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
|
||||
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
|
||||
|
||||
export type PageProps = inferSSRProps<typeof getServerSideProps>;
|
||||
import { BookingRepository } from "@calcom/lib/server/repository/booking";
|
||||
|
||||
// change the type
|
||||
export async function getServerSideProps(context: GetServerSidePropsContext) {
|
||||
const booking = await prisma.booking.findUnique({
|
||||
where: {
|
||||
uid: context.query.uid as string,
|
||||
},
|
||||
select: bookingMinimalSelect,
|
||||
const booking = await BookingRepository.findBookingByUidWithOptionalSelect({
|
||||
bookingUid: context.query.uid as string,
|
||||
});
|
||||
|
||||
if (!booking) {
|
||||
@@ -3,10 +3,12 @@
|
||||
import dayjs from "@calcom/dayjs";
|
||||
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
||||
import { detectBrowserTimeFormat } from "@calcom/lib/timeFormat";
|
||||
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
|
||||
import { Button, HeadSeo, Icon } from "@calcom/ui";
|
||||
|
||||
import { type PageProps } from "./videos-meeting-ended-single-view.getServerSideProps";
|
||||
import type { getServerSideProps } from "@lib/video/meeting-ended/[uid]/getServerSideProps";
|
||||
|
||||
export type PageProps = inferSSRProps<typeof getServerSideProps>;
|
||||
export default function MeetingUnavailable(props: PageProps) {
|
||||
const { t } = useLocale();
|
||||
|
||||
|
||||
@@ -3,9 +3,12 @@
|
||||
import dayjs from "@calcom/dayjs";
|
||||
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
||||
import { detectBrowserTimeFormat } from "@calcom/lib/timeFormat";
|
||||
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
|
||||
import { Button, HeadSeo, Icon, EmptyScreen } from "@calcom/ui";
|
||||
|
||||
import { type PageProps } from "./videos-meeting-not-started-single-view.getServerSideProps";
|
||||
import type { getServerSideProps } from "@lib/video/meeting-not-started/[uid]/getServerSideProps";
|
||||
|
||||
export type PageProps = inferSSRProps<typeof getServerSideProps>;
|
||||
|
||||
export default function MeetingNotStarted(props: PageProps) {
|
||||
const { t } = useLocale();
|
||||
|
||||
@@ -13,11 +13,14 @@ import { TRANSCRIPTION_STOPPED_ICON, RECORDING_DEFAULT_ICON } from "@calcom/lib/
|
||||
import { formatToLocalizedDate, formatToLocalizedTime } from "@calcom/lib/date-fns";
|
||||
import { useLocale } from "@calcom/lib/hooks/useLocale";
|
||||
import { markdownToSafeHTML } from "@calcom/lib/markdownToSafeHTML";
|
||||
import type { inferSSRProps } from "@calcom/types/inferSSRProps";
|
||||
import { Icon } from "@calcom/ui";
|
||||
|
||||
import type { getServerSideProps } from "@lib/video/[uid]/getServerSideProps";
|
||||
|
||||
import { CalAiTranscribe } from "~/videos/ai/ai-transcribe";
|
||||
|
||||
import { type PageProps } from "./videos-single-view.getServerSideProps";
|
||||
export type PageProps = inferSSRProps<typeof getServerSideProps>;
|
||||
|
||||
export default function JoinCall(props: PageProps) {
|
||||
const { t } = useLocale();
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import PageWrapper, { type CalPageWrapper } from "@components/PageWrapper";
|
||||
import PageWrapper from "@components/PageWrapper";
|
||||
|
||||
import VideosSingleView from "~/videos/views/videos-single-view";
|
||||
import VideosSingleView, { type PageProps } from "~/videos/views/videos-single-view";
|
||||
|
||||
export { getServerSideProps, type PageProps } from "~/videos/views/videos-single-view.getServerSideProps";
|
||||
export { getServerSideProps } from "@lib/video/[uid]/getServerSideProps";
|
||||
|
||||
const VideosSinglePage = VideosSingleView as unknown as CalPageWrapper;
|
||||
const VideosSinglePage = (props: PageProps) => <VideosSingleView {...props} />;
|
||||
|
||||
VideosSinglePage.PageWrapper = PageWrapper;
|
||||
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
import PageWrapper, { type CalPageWrapper } from "@components/PageWrapper";
|
||||
import PageWrapper from "@components/PageWrapper";
|
||||
|
||||
import MeetingEnded from "~/videos/views/videos-meeting-ended-single-view";
|
||||
import MeetingEnded, { type PageProps } from "~/videos/views/videos-meeting-ended-single-view";
|
||||
|
||||
export {
|
||||
getServerSideProps,
|
||||
type PageProps,
|
||||
} from "~/videos/views/videos-meeting-ended-single-view.getServerSideProps";
|
||||
export { getServerSideProps } from "@lib/video/meeting-ended/[uid]/getServerSideProps";
|
||||
|
||||
const MeetingEndedPage = MeetingEnded as unknown as CalPageWrapper;
|
||||
const MeetingEndedPage = (props: PageProps) => <MeetingEnded {...props} />;
|
||||
|
||||
MeetingEndedPage.PageWrapper = PageWrapper;
|
||||
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
import PageWrapper, { type CalPageWrapper } from "@components/PageWrapper";
|
||||
import PageWrapper from "@components/PageWrapper";
|
||||
|
||||
import MeetingNotStarted from "~/videos/views/videos-meeting-not-started-single-view";
|
||||
import MeetingNotStarted, { type PageProps } from "~/videos/views/videos-meeting-not-started-single-view";
|
||||
|
||||
export {
|
||||
getServerSideProps,
|
||||
type PageProps,
|
||||
} from "~/videos/views/videos-meeting-not-started-single-view.getServerSideProps";
|
||||
export { getServerSideProps } from "@lib/video/meeting-not-started/[uid]/getServerSideProps";
|
||||
|
||||
const MeetingNotStartedPage = MeetingNotStarted as unknown as CalPageWrapper;
|
||||
const MeetingNotStartedPage = (props: PageProps) => <MeetingNotStarted {...props} />;
|
||||
|
||||
MeetingNotStartedPage.PageWrapper = PageWrapper;
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import PageWrapper, { type CalPageWrapper } from "@components/PageWrapper";
|
||||
import PageWrapper from "@components/PageWrapper";
|
||||
|
||||
import NoMeetingFound from "~/videos/views/videos-no-meeting-found-single-view";
|
||||
|
||||
const NoMeetingFoundPage = NoMeetingFound as unknown as CalPageWrapper;
|
||||
const NoMeetingFoundPage = () => <NoMeetingFound />;
|
||||
|
||||
NoMeetingFoundPage.PageWrapper = PageWrapper;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import type { Prisma } from "@prisma/client";
|
||||
|
||||
import prisma from "@calcom/prisma";
|
||||
import prisma, { bookingMinimalSelect } from "@calcom/prisma";
|
||||
import { BookingStatus } from "@calcom/prisma/enums";
|
||||
|
||||
import { UserRepository } from "./user";
|
||||
@@ -113,6 +113,21 @@ export class BookingRepository {
|
||||
return allBookings;
|
||||
}
|
||||
|
||||
static async findBookingByUidWithOptionalSelect({
|
||||
bookingUid,
|
||||
select,
|
||||
}: {
|
||||
bookingUid: string;
|
||||
select?: Prisma.BookingSelect;
|
||||
}) {
|
||||
return await prisma.booking.findUnique({
|
||||
where: {
|
||||
uid: bookingUid,
|
||||
},
|
||||
select: { ...bookingMinimalSelect, ...select },
|
||||
});
|
||||
}
|
||||
|
||||
static async findBookingByUidAndUserId({ bookingUid, userId }: { bookingUid: string; userId: number }) {
|
||||
return await prisma.booking.findFirst({
|
||||
where: {
|
||||
|
||||
Reference in New Issue
Block a user