fix(api): refactor all endpoints a bit
disallow methods other that GET properly type return types add type guards where needed make all endpoints return same response format for consistency
This commit is contained in:
parent
264442448f
commit
4dffbbc0ec
@ -1,37 +1,32 @@
|
|||||||
import { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import Find, { FindQueryParams } from 'src/interfaces/shared/search';
|
import Find, { type FindQueryParams } from 'src/interfaces/shared/search';
|
||||||
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
|
||||||
import basicSearch from 'src/utils/fetchers/basicSearch';
|
import basicSearch from 'src/utils/fetchers/basicSearch';
|
||||||
import { cleanQueryStr } from 'src/utils/helpers';
|
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
||||||
import { findKey } from 'src/utils/constants/keys';
|
import { findKey } from 'src/utils/constants/keys';
|
||||||
|
import { AppError, cleanQueryStr } from 'src/utils/helpers';
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
type ResponseData =
|
||||||
const queryObj = req.query as FindQueryParams;
|
| { status: true; data: { title: null | string; results: null | Find } }
|
||||||
|
| { status: false; message: string };
|
||||||
|
|
||||||
|
export default async function handler(req: NextApiRequest, res: NextApiResponse<ResponseData>) {
|
||||||
|
try {
|
||||||
|
if (req.method !== 'GET') throw new AppError('Invalid method', 400);
|
||||||
|
|
||||||
|
const queryObj = req.query as FindQueryParams | Record<string, never>;
|
||||||
const query = queryObj.q?.trim();
|
const query = queryObj.q?.trim();
|
||||||
|
|
||||||
if (!query) {
|
if (!query) {
|
||||||
res.status(200);
|
return res.status(200).json({ status: true, data: { title: null, results: null } });
|
||||||
res.json({
|
|
||||||
title: null,
|
|
||||||
results: null
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
const entries = Object.entries(queryObj);
|
const entries = Object.entries(queryObj);
|
||||||
const queryStr = cleanQueryStr(entries);
|
const queryStr = cleanQueryStr(entries);
|
||||||
const result = await getOrSetApiCache(findKey(queryStr), basicSearch, queryStr);
|
const results = await getOrSetApiCache(findKey(queryStr), basicSearch, queryStr);
|
||||||
res.status(200);
|
|
||||||
res.json({
|
res.status(200).json({ status: true, data: { title: query, results } });
|
||||||
title: query,
|
|
||||||
results: result
|
|
||||||
});
|
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
const { message, statusCode } = error;
|
const { message = 'Not found', statusCode = 404 } = error;
|
||||||
res.status(statusCode);
|
res.status(statusCode).json({ status: false, message });
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: message
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,23 @@
|
|||||||
import { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
import type List from 'src/interfaces/shared/list';
|
||||||
import list from 'src/utils/fetchers/list';
|
import list from 'src/utils/fetchers/list';
|
||||||
|
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
||||||
import { listKey } from 'src/utils/constants/keys';
|
import { listKey } from 'src/utils/constants/keys';
|
||||||
|
import { AppError } from 'src/utils/helpers';
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
type ResponseData = { status: true; data: List } | { status: false; message: string };
|
||||||
const listId = req.query.listId;
|
|
||||||
const pageNum = (req.query.page as string | undefined) ?? '1';
|
|
||||||
|
|
||||||
|
export default async function handler(req: NextApiRequest, res: NextApiResponse<ResponseData>) {
|
||||||
try {
|
try {
|
||||||
|
if (req.method !== 'GET') throw new AppError('Invalid method', 400);
|
||||||
|
|
||||||
|
const listId = req.query.listId as string;
|
||||||
|
const pageNum = req.query.page as string | undefined;
|
||||||
|
|
||||||
const data = await getOrSetApiCache(listKey(listId, pageNum), list, listId, pageNum);
|
const data = await getOrSetApiCache(listKey(listId, pageNum), list, listId, pageNum);
|
||||||
res.status(200);
|
res.status(200).json({ status: true, data });
|
||||||
res.json(data);
|
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
const { message, statusCode } = error;
|
const { message = 'Not found', statusCode = 404 } = error;
|
||||||
res.status(statusCode);
|
res.status(statusCode).json({ status: false, message });
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: message
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,22 @@
|
|||||||
import { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
import type Name from 'src/interfaces/shared/name';
|
||||||
import name from 'src/utils/fetchers/name';
|
import name from 'src/utils/fetchers/name';
|
||||||
|
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
||||||
import { nameKey } from 'src/utils/constants/keys';
|
import { nameKey } from 'src/utils/constants/keys';
|
||||||
|
import { AppError } from 'src/utils/helpers';
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
type ResponseData = { status: true; data: Name } | { status: false; message: string };
|
||||||
const nameId = req.query.nameId;
|
|
||||||
|
|
||||||
|
export default async function handler(req: NextApiRequest, res: NextApiResponse<ResponseData>) {
|
||||||
try {
|
try {
|
||||||
|
if (req.method !== 'GET') throw new AppError('Invalid method', 400);
|
||||||
|
|
||||||
|
const nameId = req.query.nameId as string;
|
||||||
|
|
||||||
const data = await getOrSetApiCache(nameKey(nameId), name, nameId);
|
const data = await getOrSetApiCache(nameKey(nameId), name, nameId);
|
||||||
res.status(200);
|
res.status(200).json({ status: true, data });
|
||||||
res.json(data);
|
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
const { message, statusCode } = error;
|
const { message = 'Not found', statusCode = 404 } = error;
|
||||||
res.status(statusCode);
|
res.status(statusCode).json({ status: false, message });
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: message
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,21 @@
|
|||||||
import { NextApiRequest, NextApiResponse } from 'next';
|
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||||
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
import type Title from 'src/interfaces/shared/title';
|
||||||
import title from 'src/utils/fetchers/title';
|
import title from 'src/utils/fetchers/title';
|
||||||
|
import getOrSetApiCache from 'src/utils/getOrSetApiCache';
|
||||||
import { titleKey } from 'src/utils/constants/keys';
|
import { titleKey } from 'src/utils/constants/keys';
|
||||||
|
import { AppError } from 'src/utils/helpers';
|
||||||
|
|
||||||
export default async function handler(req: NextApiRequest, res: NextApiResponse) {
|
type ResponseData = { status: true; data: Title } | { status: false; message: string };
|
||||||
const titleId = req.query.titleId;
|
|
||||||
|
|
||||||
|
export default async function handler(req: NextApiRequest, res: NextApiResponse<ResponseData>) {
|
||||||
try {
|
try {
|
||||||
|
if (req.method !== 'GET') throw new AppError('Invalid method', 400);
|
||||||
|
|
||||||
|
const titleId = req.query.titleId as string;
|
||||||
const data = await getOrSetApiCache(titleKey(titleId), title, titleId);
|
const data = await getOrSetApiCache(titleKey(titleId), title, titleId);
|
||||||
res.status(200);
|
res.status(200).json({ status: true, data });
|
||||||
res.json(data);
|
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
const { message, statusCode } = error;
|
const { message = 'Not found', statusCode = 404 } = error;
|
||||||
res.status(statusCode);
|
res.status(statusCode).json({ status: false, message });
|
||||||
res.json({
|
|
||||||
success: false,
|
|
||||||
message: message
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user