feat: create route to fetch episodes for a title

Summary:

Test Plan:
This commit is contained in:
2024-05-24 17:07:06 -04:00
parent c5cce2543c
commit 75bb7615f5
11 changed files with 533 additions and 6 deletions

View File

@@ -0,0 +1,63 @@
import { OpenAPIHono, createRoute, z } from "@hono/zod-openapi";
import { fetchFromMultipleSources } from "~/libs/fetchFromMultipleSources";
import {
AniListIdQuerySchema,
ErrorResponse,
ErrorResponseSchema,
SuccessResponseSchema,
} from "~/types/schema";
import { getEpisodesFromAnify } from "./anify";
import { EpisodesResponse } from "./episode";
const EpisodesResponseSchema = SuccessResponseSchema(EpisodesResponse);
const route = createRoute({
tags: ["aniplay", "episodes"],
summary: "Fetch episodes for a title",
method: "get",
path: "/{aniListId}",
request: {
params: z.object({ aniListId: AniListIdQuerySchema }),
},
responses: {
200: {
content: {
"application/json": {
schema: EpisodesResponseSchema,
},
},
description: "Returns a list of episodes",
},
404: {
content: {
"application/json": {
schema: ErrorResponseSchema,
},
},
description: "Returns an empty list because episodes not found",
},
},
});
const app = new OpenAPIHono<HonoEnv>();
app.openapi(route, async (c) => {
const aniListId = Number(c.req.param("aniListId"));
const episodes = await fetchFromMultipleSources([
() => getEpisodesFromAnify(JSON.parse(c.env.ENABLE_ANIFY), aniListId),
]);
if (!episodes) {
return c.json(ErrorResponse, { status: 404 });
}
return c.json({
success: true,
result: episodes,
});
});
export default app;