Files
AnimeTV-Backend/src/helpers/error/handler/index.ts
2025-07-17 00:05:35 +07:00

61 lines
1.7 KiB
TypeScript

import { Context } from "elysia";
import { Prisma } from "@prisma/client";
import { returnErrorResponse } from "../../callback/httpResponse";
import { AppError } from "../instances/app";
import { PrismaErrorCodeList } from "../../../utils/databases/prisma/error/codeList";
import z from "zod";
export const mainErrorHandler = (set: Context["set"], error: unknown) => {
if (error instanceof AppError) {
return returnErrorResponse(
set,
error.statusCode,
error.message,
error.details
);
}
if (error instanceof Prisma.PrismaClientKnownRequestError) {
const errorInfo = PrismaErrorCodeList[error.code];
if (errorInfo)
return returnErrorResponse(
set,
errorInfo.status,
errorInfo.message,
error.meta ?? {}
);
}
if (error instanceof Prisma.PrismaClientUnknownRequestError) {
return returnErrorResponse(set, 500, "Unknown database error");
}
if (error instanceof Prisma.PrismaClientRustPanicError) {
return returnErrorResponse(
set,
500,
"Database engine crashed unexpectedly"
);
}
if (error instanceof Prisma.PrismaClientInitializationError) {
return returnErrorResponse(set, 503, `Can't reach database server.`, error);
}
if (error instanceof Prisma.PrismaClientValidationError) {
return returnErrorResponse(
set,
400,
"Invalid input to query",
error.message
);
}
if (error instanceof z.ZodError) {
return returnErrorResponse(set, 422, error.issues[0].message, error.issues);
}
return returnErrorResponse(set, 500, "Internal server error", error);
};