From 7dbab2e07a0c4749f8277da53d2e9db144623718 Mon Sep 17 00:00:00 2001 From: Paribesh01 Date: Tue, 4 Feb 2025 17:22:03 +0530 Subject: [PATCH 1/4] feat: ISR in home page --- apps/web/components/utils.tsx | 131 ++++++++++++++++++---------------- 1 file changed, 70 insertions(+), 61 deletions(-) diff --git a/apps/web/components/utils.tsx b/apps/web/components/utils.tsx index f55a567f..63e7448e 100644 --- a/apps/web/components/utils.tsx +++ b/apps/web/components/utils.tsx @@ -2,6 +2,7 @@ import { MCQQuestion, Prisma, Problem, Track, TrackProblems } from "@prisma/client"; import db from "@repo/db/client"; import { cache } from "../../../packages/db/Cache"; +import { revalidateTag, unstable_cache } from "next/cache"; interface Tracks extends Track { problems: { problem: Problem }[]; @@ -119,12 +120,15 @@ export async function createTrackProblems(data: TrackProblems) { export async function getTrack(trackId: string) { const value: Tracks = await cache.get("Track", [trackId.toString()]); + if (value) { + console.log("returning from cache", "get tracks"); return { ...value, problems: value.problems.map((problem: { problem: Problem }) => ({ ...problem.problem })), }; } + console.log("not in cache", "get tracks"); try { const track = await db.track.findUnique({ where: { @@ -156,52 +160,55 @@ export async function getTrack(trackId: string) { } } -export async function getAllTracks() { - const value = await cache.get("getAllTracks", []); - if (value) { - const data: AllTracks[] = value.map((track: Tracks) => ({ - ...track, - problems: track.problems.map((problem: { problem: Problem }) => ({ ...problem.problem })), - })); - return data; - } - try { - const tracks = await db.track.findMany({ - where: { - hidden: false, - }, - include: { - problems: { - select: { - problemId: true, - problem: true, +export const getAllTracks = unstable_cache( + async () => { + console.log("-----------------------------------------------"); + console.log("-----------------------------------------------"); + console.log("-----------------------------------------------"); + console.log("-----------------------------------------------"); + console.log("-----------------------------------------------"); + console.log("-----------------------------------------------"); + console.log("-----------------------------------------------"); + try { + const tracks = await db.track.findMany({ + where: { + hidden: false, + }, + include: { + problems: { + select: { + problemId: true, + problem: true, + }, + orderBy: [ + { + sortingOrder: "desc", + }, + ], }, - orderBy: [ - { - sortingOrder: "desc", + categories: { + select: { + category: true, }, - ], - }, - categories: { - select: { - category: true, }, }, - }, - orderBy: { - createdAt: "asc", - }, - }); - await cache.set("getAllTracks", [], tracks); - return tracks.map((track: any) => ({ - ...track, - problems: track.problems.map((problem: any) => ({ ...problem.problem })), - })); - } catch (e) { - console.error(e); - return []; - } -} + orderBy: { + createdAt: "asc", + }, + }); + await cache.set("getAllTracks", [], tracks); + return tracks.map((track: any) => ({ + ...track, + problems: track.problems.map((problem: any) => ({ ...problem.problem })), + })); + } catch (e) { + console.error(e); + return []; + } + }, + ["tracks"], + { revalidate: parseInt(process.env.CACHE_EXPIRE || "1800", 10), tags: ["tracks"] } +); export async function createTrack(data: { id: string; @@ -251,6 +258,8 @@ export async function createTrack(data: { }); }); } + revalidateTag("tracks"); + revalidateTag("categories"); return track; } catch (e) { return new Error("Failed to create track"); @@ -314,25 +323,25 @@ export async function updateTrack( } } -export async function getAllCategories() { - const value = await cache.get("getAllCategories", []); - if (value) { - return value; - } - try { - const categories = await db.categories.findMany({ - select: { - id: true, - category: true, - }, - distinct: ["category"], - }); - await cache.set("getAllCategories", [], categories); - return categories; - } catch (e) { - return []; - } -} +export const getAllCategories = unstable_cache( + async () => { + try { + const categories = await db.categories.findMany({ + select: { + id: true, + category: true, + }, + distinct: ["category"], + }); + await cache.set("getAllCategories", [], categories); + return categories; + } catch (e) { + return []; + } + }, + ["categories"], + { revalidate: parseInt(process.env.CACHE_EXPIRE || "1800", 10), tags: ["categories"] } +); export async function getAllMCQs() { const value = await cache.get("getAllMCQs", []); From 03e937b0d901385a36167221d8f68e9e986a51e8 Mon Sep 17 00:00:00 2001 From: Paribesh01 Date: Tue, 4 Feb 2025 17:24:18 +0530 Subject: [PATCH 2/4] fix: minor changes --- apps/web/components/utils.tsx | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/apps/web/components/utils.tsx b/apps/web/components/utils.tsx index 63e7448e..02461560 100644 --- a/apps/web/components/utils.tsx +++ b/apps/web/components/utils.tsx @@ -120,15 +120,12 @@ export async function createTrackProblems(data: TrackProblems) { export async function getTrack(trackId: string) { const value: Tracks = await cache.get("Track", [trackId.toString()]); - if (value) { - console.log("returning from cache", "get tracks"); return { ...value, problems: value.problems.map((problem: { problem: Problem }) => ({ ...problem.problem })), }; } - console.log("not in cache", "get tracks"); try { const track = await db.track.findUnique({ where: { @@ -162,13 +159,6 @@ export async function getTrack(trackId: string) { export const getAllTracks = unstable_cache( async () => { - console.log("-----------------------------------------------"); - console.log("-----------------------------------------------"); - console.log("-----------------------------------------------"); - console.log("-----------------------------------------------"); - console.log("-----------------------------------------------"); - console.log("-----------------------------------------------"); - console.log("-----------------------------------------------"); try { const tracks = await db.track.findMany({ where: { From 1cf21387e1494a287f61b98b8ae71fe164c8425b Mon Sep 17 00:00:00 2001 From: Paribesh01 Date: Tue, 4 Feb 2025 18:02:59 +0530 Subject: [PATCH 3/4] fix: remove cache expiry --- apps/web/components/utils.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/web/components/utils.tsx b/apps/web/components/utils.tsx index 02461560..f03289af 100644 --- a/apps/web/components/utils.tsx +++ b/apps/web/components/utils.tsx @@ -197,7 +197,7 @@ export const getAllTracks = unstable_cache( } }, ["tracks"], - { revalidate: parseInt(process.env.CACHE_EXPIRE || "1800", 10), tags: ["tracks"] } + { tags: ["tracks"] } ); export async function createTrack(data: { @@ -330,7 +330,7 @@ export const getAllCategories = unstable_cache( } }, ["categories"], - { revalidate: parseInt(process.env.CACHE_EXPIRE || "1800", 10), tags: ["categories"] } + { tags: ["categories"] } ); export async function getAllMCQs() { From e0f4069ff5f90affcb68efc35c45d85e2aff0f88 Mon Sep 17 00:00:00 2001 From: Paribesh01 Date: Wed, 5 Feb 2025 13:01:13 +0530 Subject: [PATCH 4/4] fix: minor change --- apps/web/components/utils.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/web/components/utils.tsx b/apps/web/components/utils.tsx index f03289af..521baebd 100644 --- a/apps/web/components/utils.tsx +++ b/apps/web/components/utils.tsx @@ -2,7 +2,7 @@ import { MCQQuestion, Prisma, Problem, Track, TrackProblems } from "@prisma/client"; import db from "@repo/db/client"; import { cache } from "../../../packages/db/Cache"; -import { revalidateTag, unstable_cache } from "next/cache"; +import { revalidateTag, unstable_cache as nextCache } from "next/cache"; interface Tracks extends Track { problems: { problem: Problem }[]; @@ -157,7 +157,7 @@ export async function getTrack(trackId: string) { } } -export const getAllTracks = unstable_cache( +export const getAllTracks = nextCache( async () => { try { const tracks = await db.track.findMany({ @@ -313,7 +313,7 @@ export async function updateTrack( } } -export const getAllCategories = unstable_cache( +export const getAllCategories = nextCache( async () => { try { const categories = await db.categories.findMany({