fix(cache): make cache keys for review more distinctive

This commit is contained in:
zyachel 2024-03-31 17:21:35 +05:30
parent 1041de5439
commit 324c138ec4
5 changed files with 20 additions and 16 deletions

View File

@ -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<string, string>;
const queryStr = cleanQueryStr(queryObj, titleReviewsQueryKeys);
const data = await getOrSetApiCache(
titleReviewsCursoredKey(titleId, paginationKey),
titleReviewsKey(titleId, queryStr, paginationKey),
cursoredReviews,
titleId,
paginationKey,

View File

@ -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<string, string>;
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;

View File

@ -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<typeof getServerSideProps>;
@ -51,7 +51,7 @@ export const getServerSideProps: GetServerSideProps<Data, Params> = async ctx =>
try {
const data = await getOrSetApiCache(
titleKey(titleId),
titleReviewsKey(titleId, queryStr, paginationKey),
cursoredReviews,
titleId,
paginationKey,

View File

@ -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<Props['data']> }) =>
setAllData(prev => ({
list: prev.list.concat(newData.data.list),
cursor: newData.data.cursor ?? null,
@ -73,7 +73,7 @@ export const getServerSideProps: GetServerSideProps<Data, Params> = async ctx =>
const queryStr = cleanQueryStr(queryParams, titleReviewFiltersQueryKeys);
try {
const data = await getOrSetApiCache(
titleReviewsKey(titleId, queryStr),
titleReviewsKey(titleId, queryStr, null),
titleReviews,
titleId,
queryStr

View File

@ -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}`;