feat(controllerTypes): added request handler types

This commit is contained in:
Ritesh Ghosh
2023-08-07 14:58:25 +05:30
parent 205619be55
commit 84a79810c3
5 changed files with 69 additions and 51 deletions
+17 -11
View File
@@ -1,19 +1,25 @@
import { scrapeAnimeAboutInfo } from "../parsers";
import createHttpError from "http-errors"; import createHttpError from "http-errors";
import { Request, Response, NextFunction, Handler } from "express"; import { RequestHandler } from "express";
import { scrapeAnimeAboutInfo } from "../parsers";
import { AnimeAboutInfoQueryParams } from "../models/controllers";
// /anime/info?id=${anime-id} // /anime/info?id=${anime-id}
const getAnimeAboutInfo: Handler = async ( const getAnimeAboutInfo: RequestHandler<
req: Request, unknown,
res: Response, Awaited<ReturnType<typeof scrapeAnimeAboutInfo>>,
next: NextFunction unknown,
) => { AnimeAboutInfoQueryParams
> = async (req, res, next) => {
try { try {
const id = req.query.id ? decodeURIComponent(req.query.id as string) : null; const animeId = req.query.id
if (id === null) ? decodeURIComponent(req.query.id as string)
throw createHttpError.BadRequest("Anime unique id required"); : null;
const data = await scrapeAnimeAboutInfo(id); if (animeId === null) {
throw createHttpError.BadRequest("Anime unique id required");
}
const data = await scrapeAnimeAboutInfo(animeId);
res.status(200).json(data); res.status(200).json(data);
} catch (err: any) { } catch (err: any) {
+21 -14
View File
@@ -1,30 +1,37 @@
import { scrapeAnimeCategory } from "../parsers";
import createHttpError from "http-errors"; import createHttpError from "http-errors";
import { AnimeCategories } from "../models"; import { RequestHandler } from "express";
import { Request, Response, NextFunction, Handler } from "express"; import { AnimeCategories } from "../models/anime";
import { scrapeAnimeCategory } from "../parsers";
import {
CategoryAnimePathParams,
CategoryAnimeQueryParams,
} from "../models/controllers";
// /anime/:category?page=${page} // /anime/:category?page=${page}
const getAnimeCategory: Handler = async ( const getAnimeCategory: RequestHandler<
req: Request, CategoryAnimePathParams,
res: Response, Awaited<ReturnType<typeof scrapeAnimeCategory>>,
next: NextFunction unknown,
) => { CategoryAnimeQueryParams
> = async (req, res, next) => {
try { try {
const category: AnimeCategories = decodeURIComponent( const category = req.params.category
req.params.category ? decodeURIComponent(req.params.category)
) as AnimeCategories; : null;
const page: number = req.query.page const page: number = req.query.page
? Number(decodeURIComponent(req.query?.page as string)) ? Number(decodeURIComponent(req.query?.page as string))
: 1; : 1;
if (!category) throw createHttpError.BadRequest("category required"); if (category === null) {
throw createHttpError.BadRequest("category required");
}
const data = await scrapeAnimeCategory(category, page); const data = await scrapeAnimeCategory(category as AnimeCategories, page);
res.status(200).json(data); res.status(200).json(data);
} catch (err: any) { } catch (err: any) {
// console.error(err); console.error(err);
next(err); next(err);
} }
}; };
+12 -7
View File
@@ -1,13 +1,18 @@
import { scrapeGenreAnime } from "../parsers";
import createHttpError from "http-errors"; import createHttpError from "http-errors";
import { Request, Response, NextFunction, Handler } from "express"; import { RequestHandler } from "express";
import { scrapeGenreAnime } from "../parsers";
import {
GenreAnimePathParams,
GenreAnimeQueryParams,
} from "../models/controllers";
// /anime/genre/${name}?page=${page} // /anime/genre/${name}?page=${page}
const getGenreAnime: Handler = async ( const getGenreAnime: RequestHandler<
req: Request, GenreAnimePathParams,
res: Response, Awaited<ReturnType<typeof scrapeGenreAnime>>,
next: NextFunction unknown,
) => { GenreAnimeQueryParams
> = async (req, res, next) => {
try { try {
const name: string | null = req.params.name const name: string | null = req.params.name
? decodeURIComponent(req.params.name as string) ? decodeURIComponent(req.params.name as string)
+13 -12
View File
@@ -1,31 +1,32 @@
import { scrapeAnimeSearch } from "../parsers";
import createHttpError from "http-errors"; import createHttpError from "http-errors";
import { AnimeCategories } from "../models"; import { RequestHandler } from "express";
import { Request, Response, NextFunction, Handler } from "express"; import { scrapeAnimeSearch } from "../parsers";
import { AnimeSearchQueryParams } from "../models/controllers";
// /anime/search?q=${query}&page=${page} // /anime/search?q=${query}&page=${page}
const getAnimeSearch: Handler = async ( const getAnimeSearch: RequestHandler<
req: Request, unknown,
res: Response, Awaited<ReturnType<typeof scrapeAnimeSearch>>,
next: NextFunction unknown,
) => { AnimeSearchQueryParams
> = async (req, res, next) => {
try { try {
const q: string | null = req.query.q const query: string | null = req.query.q
? decodeURIComponent(req.query.q as string) ? decodeURIComponent(req.query.q as string)
: null; : null;
const page: number = req.query.page const page: number = req.query.page
? Number(decodeURIComponent(req.query?.page as string)) ? Number(decodeURIComponent(req.query?.page as string))
: 1; : 1;
if (q === null) { if (query === null) {
throw createHttpError.BadGateway("Search keyword required"); throw createHttpError.BadGateway("Search keyword required");
} }
const data = await scrapeAnimeSearch(q, page); const data = await scrapeAnimeSearch(query, page);
res.status(200).json(data); res.status(200).json(data);
} catch (err: any) { } catch (err: any) {
// console.error(err); console.error(err);
next(err); next(err);
} }
}; };
+6 -7
View File
@@ -1,12 +1,11 @@
import { RequestHandler } from "express";
import { scrapeHomePage } from "../parsers"; import { scrapeHomePage } from "../parsers";
import { Request, Response, NextFunction, Handler } from "express";
// /anime/home // /anime/home
const getHomePage: Handler = async ( const getHomePageInfo: RequestHandler<
req: Request, unknown,
res: Response, Awaited<ReturnType<typeof scrapeHomePage>>
next: NextFunction > = async (req, res, next) => {
) => {
try { try {
const data = await scrapeHomePage(); const data = await scrapeHomePage();
res.status(200).json(data); res.status(200).json(data);
@@ -16,4 +15,4 @@ const getHomePage: Handler = async (
} }
}; };
export default getHomePage; export default getHomePageInfo;