Spaces:
Runtime error
Runtime error
| 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 }); | |
| } | |