COURTRIX / src /server /errors.ts
Ali-Developments's picture
Upload 125 files
ad79323 verified
Raw
History Blame Contribute Delete
1.42 kB
import { Prisma } from "@prisma/client";
import { NextResponse } from "next/server";
import { ZodError } from "zod";
export class AppError extends Error {
status: number;
details?: unknown;
constructor(message: string, status = 400, details?: unknown) {
super(message);
this.name = "AppError";
this.status = status;
this.details = details;
}
}
export function isPrismaUniqueConstraintError(
error: unknown,
field?: string,
): boolean {
if (!(error instanceof Prisma.PrismaClientKnownRequestError)) {
return false;
}
if (error.code !== "P2002") {
return false;
}
if (!field) {
return true;
}
const target = error.meta?.target;
return Array.isArray(target) ? target.includes(field) : false;
}
export function createRouteErrorResponse(
error: unknown,
fallbackMessage = "حصل خطأ، حاول تاني بعد شوية.",
) {
if (error instanceof ZodError) {
return NextResponse.json(
{
message: "البيانات اللي دخلتها محتاجة مراجعة.",
errors: error.flatten(),
},
{ status: 400 },
);
}
if (error instanceof AppError) {
return NextResponse.json(
{
message: error.message,
details: error.details,
},
{ status: error.status },
);
}
console.error(error);
return NextResponse.json({ message: fallbackMessage }, { status: 500 });
}