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 { Request, Response, NextFunction, Handler } from "express";
import { RequestHandler } from "express";
import { scrapeAnimeAboutInfo } from "../parsers";
import { AnimeAboutInfoQueryParams } from "../models/controllers";
// /anime/info?id=${anime-id}
const getAnimeAboutInfo: Handler = async (
req: Request,
res: Response,
next: NextFunction
) => {
const getAnimeAboutInfo: RequestHandler<
unknown,
Awaited<ReturnType<typeof scrapeAnimeAboutInfo>>,
unknown,
AnimeAboutInfoQueryParams
> = async (req, res, next) => {
try {
const id = req.query.id ? decodeURIComponent(req.query.id as string) : null;
if (id === null)
throw createHttpError.BadRequest("Anime unique id required");
const animeId = req.query.id
? decodeURIComponent(req.query.id as string)
: 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);
} catch (err: any) {
+21 -14
View File
@@ -1,30 +1,37 @@
import { scrapeAnimeCategory } from "../parsers";
import createHttpError from "http-errors";
import { AnimeCategories } from "../models";
import { Request, Response, NextFunction, Handler } from "express";
import { RequestHandler } from "express";
import { AnimeCategories } from "../models/anime";
import { scrapeAnimeCategory } from "../parsers";
import {
CategoryAnimePathParams,
CategoryAnimeQueryParams,
} from "../models/controllers";
// /anime/:category?page=${page}
const getAnimeCategory: Handler = async (
req: Request,
res: Response,
next: NextFunction
) => {
const getAnimeCategory: RequestHandler<
CategoryAnimePathParams,
Awaited<ReturnType<typeof scrapeAnimeCategory>>,
unknown,
CategoryAnimeQueryParams
> = async (req, res, next) => {
try {
const category: AnimeCategories = decodeURIComponent(
req.params.category
) as AnimeCategories;
const category = req.params.category
? decodeURIComponent(req.params.category)
: null;
const page: number = req.query.page
? Number(decodeURIComponent(req.query?.page as string))
: 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);
} catch (err: any) {
// console.error(err);
console.error(err);
next(err);
}
};
+12 -7
View File
@@ -1,13 +1,18 @@
import { scrapeGenreAnime } from "../parsers";
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}
const getGenreAnime: Handler = async (
req: Request,
res: Response,
next: NextFunction
) => {
const getGenreAnime: RequestHandler<
GenreAnimePathParams,
Awaited<ReturnType<typeof scrapeGenreAnime>>,
unknown,
GenreAnimeQueryParams
> = async (req, res, next) => {
try {
const name: string | null = req.params.name
? decodeURIComponent(req.params.name as string)
+13 -12
View File
@@ -1,31 +1,32 @@
import { scrapeAnimeSearch } from "../parsers";
import createHttpError from "http-errors";
import { AnimeCategories } from "../models";
import { Request, Response, NextFunction, Handler } from "express";
import { RequestHandler } from "express";
import { scrapeAnimeSearch } from "../parsers";
import { AnimeSearchQueryParams } from "../models/controllers";
// /anime/search?q=${query}&page=${page}
const getAnimeSearch: Handler = async (
req: Request,
res: Response,
next: NextFunction
) => {
const getAnimeSearch: RequestHandler<
unknown,
Awaited<ReturnType<typeof scrapeAnimeSearch>>,
unknown,
AnimeSearchQueryParams
> = async (req, res, next) => {
try {
const q: string | null = req.query.q
const query: string | null = req.query.q
? decodeURIComponent(req.query.q as string)
: null;
const page: number = req.query.page
? Number(decodeURIComponent(req.query?.page as string))
: 1;
if (q === null) {
if (query === null) {
throw createHttpError.BadGateway("Search keyword required");
}
const data = await scrapeAnimeSearch(q, page);
const data = await scrapeAnimeSearch(query, page);
res.status(200).json(data);
} catch (err: any) {
// console.error(err);
console.error(err);
next(err);
}
};
+6 -7
View File
@@ -1,12 +1,11 @@
import { RequestHandler } from "express";
import { scrapeHomePage } from "../parsers";
import { Request, Response, NextFunction, Handler } from "express";
// /anime/home
const getHomePage: Handler = async (
req: Request,
res: Response,
next: NextFunction
) => {
const getHomePageInfo: RequestHandler<
unknown,
Awaited<ReturnType<typeof scrapeHomePage>>
> = async (req, res, next) => {
try {
const data = await scrapeHomePage();
res.status(200).json(data);
@@ -16,4 +15,4 @@ const getHomePage: Handler = async (
}
};
export default getHomePage;
export default getHomePageInfo;