Skip to content

Commit

Permalink
Support querying anime by name or ID
Browse files Browse the repository at this point in the history
  • Loading branch information
rocktimsaikia committed Aug 30, 2024
1 parent 05920e3 commit 9f79b92
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 15 deletions.
56 changes: 44 additions & 12 deletions server/src/controllers/anime.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,32 @@ import { prisma } from "~/libs/prisma";
import { sendErrorResponse, sendSuccessResponse } from "./utils";

export const getAnimeInformation = async (req: Request, res: Response) => {
const animeId = req.params?.id;
const identifier = req.params?.identifier;

if (!animeId) {
if (!identifier) {
return sendErrorResponse(res, { code: 400, message: "Not a valid 'animeId'" });
}

const anime = await prisma.anime.findUnique({
where: { id: Number.parseInt(animeId) },
include: { animeCharacters: true },
});
let anime = null;
const isNumeric = /^\d+$/.test(identifier);

if (isNumeric) {
// Query via ID
anime = await prisma.anime.findUnique({
where: { id: Number.parseInt(identifier) },
include: { animeCharacters: true },
});
} else {
// Query via name
anime = await prisma.anime.findFirst({
where: {
name: {
contains: identifier,
},
},
include: { animeCharacters: true },
});
}

if (!anime) {
return sendErrorResponse(res, { code: 404, message: "No matching anime found" });
Expand All @@ -35,16 +51,32 @@ export const getAnimeInformation = async (req: Request, res: Response) => {
};

export const getAnimeSummary = async (req: Request, res: Response) => {
const animeId = req.params?.id;
const identifier = req.params?.identifier;

if (!animeId) {
if (!identifier) {
return sendErrorResponse(res, { code: 400, message: "Not a valid 'animeId'" });
}

const anime = await prisma.anime.findUnique({
where: { id: Number.parseInt(animeId) },
include: { animeCharacters: true },
});
let anime = null;
const isNumeric = /^\d+$/.test(identifier);

if (isNumeric) {
// Query via ID
anime = await prisma.anime.findUnique({
where: { id: Number.parseInt(identifier) },
include: { animeCharacters: true },
});
} else {
// Query via name
anime = await prisma.anime.findFirst({
where: {
name: {
contains: identifier,
},
},
include: { animeCharacters: true },
});
}

if (!anime) {
return sendErrorResponse(res, { code: 404, message: "No matching anime found" });
Expand Down
6 changes: 3 additions & 3 deletions server/src/routes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ router.get("/health", (_req, res) => {
router.get("/quotes/random", getOneRandomQuote);
router.get("/quotes", getQuotes);

// Anime routes
router.get("/anime/:id", getAnimeInformation);
router.get("/anime/:id/summary", getAnimeInformation);
// Anime router
router.get("/anime/:identifier", getAnimeInformation);
router.get("/anime/:identifier/summary", getAnimeInformation);

export default router;

0 comments on commit 9f79b92

Please sign in to comment.