From c75ac141ada9d7c8e109486b3c6b58b543ede537 Mon Sep 17 00:00:00 2001 From: Efrain Rochin Aramburo Date: Wed, 8 Feb 2023 12:22:14 -0700 Subject: [PATCH] Add api endpoint that revalidates the current month and 3 more ahead --- .../revalidate-calendar-cache/[username].ts | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 apps/web/pages/api/revalidate-calendar-cache/[username].ts diff --git a/apps/web/pages/api/revalidate-calendar-cache/[username].ts b/apps/web/pages/api/revalidate-calendar-cache/[username].ts new file mode 100644 index 0000000000..a5e200c893 --- /dev/null +++ b/apps/web/pages/api/revalidate-calendar-cache/[username].ts @@ -0,0 +1,41 @@ +import { NextApiRequest, NextApiResponse } from "next"; +import { z } from "zod"; + +import dayjs from "@calcom/dayjs"; + +const querySchema = z.object({ + username: z.string(), +}); + +export const revalidateCalendarCache = ( + revalidate: NextApiResponse["revalidate"], + username: string, + monthsToRevalidate = 4 +): Promise => { + return Promise.all( + new Array(monthsToRevalidate).fill(0).map((_, index): Promise => { + const date = dayjs().add(index, "month").format("YYYY-MM"); + const url = `/${username}/calendar-cache/${date}`; + console.log("revalidating", url); + return revalidate(url); + }) + ); +}; + +/** + * This endpoint revalidates users calendar cache several months ahead + * Can be used as webhook + * @param req + * @param res + * @returns + */ + +export default async function handler(req: NextApiRequest, res: NextApiResponse) { + const { username } = querySchema.parse(req.query); + try { + await revalidateCalendarCache(res.revalidate, username); + return res.status(200).json({ revalidated: true }); + } catch (err) { + return res.status(500).send({ message: "Error revalidating" }); + } +}