From 324c138ec49cd24e932f9b1f8569c22ca25ebc13 Mon Sep 17 00:00:00 2001 From: zyachel Date: Sun, 31 Mar 2024 17:21:35 +0530 Subject: [PATCH] fix(cache): make cache keys for review more distinctive --- .../api/title/[titleId]/reviews/[paginationKey].ts | 4 ++-- src/pages/api/title/[titleId]/reviews/index.ts | 7 ++++++- .../[titleId]/reviews/[paginationKey]/index.tsx | 12 ++++++------ src/pages/title/[titleId]/reviews/index.tsx | 8 ++++---- src/utils/constants/keys.ts | 5 ++--- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/pages/api/title/[titleId]/reviews/[paginationKey].ts b/src/pages/api/title/[titleId]/reviews/[paginationKey].ts index 60c695a..23035a7 100644 --- a/src/pages/api/title/[titleId]/reviews/[paginationKey].ts +++ b/src/pages/api/title/[titleId]/reviews/[paginationKey].ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import type { TitleReviewsCursored } from 'src/interfaces/shared/titleReviews'; import { cursoredReviews } from 'src/utils/fetchers/titleReviews'; import getOrSetApiCache from 'src/utils/getOrSetApiCache'; -import { titleReviewsCursoredKey } from 'src/utils/constants/keys'; +import { titleReviewsKey } from 'src/utils/constants/keys'; import { AppError, cleanQueryStr } from 'src/utils/helpers'; import { keys as titleReviewsQueryKeys } from 'src/utils/constants/titleReviewsFilters'; @@ -19,7 +19,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< const queryObj = req.query as Record; const queryStr = cleanQueryStr(queryObj, titleReviewsQueryKeys); const data = await getOrSetApiCache( - titleReviewsCursoredKey(titleId, paginationKey), + titleReviewsKey(titleId, queryStr, paginationKey), cursoredReviews, titleId, paginationKey, diff --git a/src/pages/api/title/[titleId]/reviews/index.ts b/src/pages/api/title/[titleId]/reviews/index.ts index fa2319b..23a5259 100644 --- a/src/pages/api/title/[titleId]/reviews/index.ts +++ b/src/pages/api/title/[titleId]/reviews/index.ts @@ -15,7 +15,12 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< const titleId = req.query.titleId as string; const queryObj = req.query as Record; const queryStr = cleanQueryStr(queryObj, keys); - const data = await getOrSetApiCache(titleReviewsKey(titleId), reviews, titleId, queryStr); + const data = await getOrSetApiCache( + titleReviewsKey(titleId, queryStr, null), + reviews, + titleId, + queryStr + ); res.status(200).json({ status: true, data }); } catch (error: any) { const { message = 'Not found', statusCode = 404 } = error; diff --git a/src/pages/title/[titleId]/reviews/[paginationKey]/index.tsx b/src/pages/title/[titleId]/reviews/[paginationKey]/index.tsx index 180610d..32bb094 100644 --- a/src/pages/title/[titleId]/reviews/[paginationKey]/index.tsx +++ b/src/pages/title/[titleId]/reviews/[paginationKey]/index.tsx @@ -2,14 +2,14 @@ import { GetServerSideProps, InferGetServerSidePropsType } from 'next'; import Meta from 'src/components/meta/Meta'; import Layout from 'src/components/layout'; import ErrorInfo from 'src/components/error/ErrorInfo'; -import { BasicCard, Filters, Pagination, Reviews, TitleCard } from 'src/components/titleReviews'; +import { BasicCard, Filters, Pagination, Reviews } from 'src/components/titleReviews'; import { AppError } from 'src/interfaces/shared/error'; import getOrSetApiCache from 'src/utils/getOrSetApiCache'; -import titleReviews, { cursoredReviews } from 'src/utils/fetchers/titleReviews'; -import { cleanQueryStr, getProxiedIMDbImgUrl } from 'src/utils/helpers'; -import { titleKey, titleReviewsKey } from 'src/utils/constants/keys'; +import { cursoredReviews } from 'src/utils/fetchers/titleReviews'; +import { cleanQueryStr } from 'src/utils/helpers'; +import { titleReviewsKey } from 'src/utils/constants/keys'; import styles from 'src/styles/modules/pages/titleReviews/titleReviews.module.scss'; -import TitleReviews, { TitleReviewsCursored } from 'src/interfaces/shared/titleReviews'; +import { TitleReviewsCursored } from 'src/interfaces/shared/titleReviews'; import { keys as titleReviewsQueryKeys } from 'src/utils/constants/titleReviewsFilters'; type Props = InferGetServerSidePropsType; @@ -51,7 +51,7 @@ export const getServerSideProps: GetServerSideProps = async ctx => try { const data = await getOrSetApiCache( - titleKey(titleId), + titleReviewsKey(titleId, queryStr, paginationKey), cursoredReviews, titleId, paginationKey, diff --git a/src/pages/title/[titleId]/reviews/index.tsx b/src/pages/title/[titleId]/reviews/index.tsx index 1944118..eb08fbf 100644 --- a/src/pages/title/[titleId]/reviews/index.tsx +++ b/src/pages/title/[titleId]/reviews/index.tsx @@ -5,9 +5,9 @@ import ErrorInfo from 'src/components/error/ErrorInfo'; import { Filters, Pagination, Reviews, TitleCard } from 'src/components/titleReviews'; import { AppError } from 'src/interfaces/shared/error'; import getOrSetApiCache from 'src/utils/getOrSetApiCache'; -import titleReviews, { cursoredReviews } from 'src/utils/fetchers/titleReviews'; +import titleReviews from 'src/utils/fetchers/titleReviews'; import { cleanQueryStr, getProxiedIMDbImgUrl } from 'src/utils/helpers'; -import { titleKey, titleReviewsKey } from 'src/utils/constants/keys'; +import { titleReviewsKey } from 'src/utils/constants/keys'; import styles from 'src/styles/modules/pages/titleReviews/titleReviews.module.scss'; import TitleReviews from 'src/interfaces/shared/titleReviews'; import { keys as titleReviewFiltersQueryKeys } from 'src/utils/constants/titleReviewsFilters'; @@ -31,7 +31,7 @@ const ReviewsPage = ({ data, error, originalPath }: Props) => { if (!res.ok) throw new Error('something went wrong'); return res.json(); }) - .then(newData => + .then((newData: { data: NonNullable }) => setAllData(prev => ({ list: prev.list.concat(newData.data.list), cursor: newData.data.cursor ?? null, @@ -73,7 +73,7 @@ export const getServerSideProps: GetServerSideProps = async ctx => const queryStr = cleanQueryStr(queryParams, titleReviewFiltersQueryKeys); try { const data = await getOrSetApiCache( - titleReviewsKey(titleId, queryStr), + titleReviewsKey(titleId, queryStr, null), titleReviews, titleId, queryStr diff --git a/src/utils/constants/keys.ts b/src/utils/constants/keys.ts index 9cff9cd..25ebafb 100644 --- a/src/utils/constants/keys.ts +++ b/src/utils/constants/keys.ts @@ -1,7 +1,6 @@ export const titleKey = (titleId: string) => `title:${titleId}`; -export const titleReviewsKey = (titleId: string, query = '') => `title:${titleId}|${query}`; -export const titleReviewsCursoredKey = (titleId: string, paginationKey: string) => - `title:${titleId}|${paginationKey}`; +export const titleReviewsKey = (titleId: string, queryStr: string, paginationKey: string | null) => + `title/reviews:${titleId}?${queryStr}&paginationKey=${paginationKey}`; export const nameKey = (nameId: string) => `name:${nameId}`; export const listKey = (listId: string, pageNum = '1') => `list:${listId}?page=${pageNum}`; export const findKey = (query: string) => `find:${query}`;