Zod for API Routes

This commit is contained in:
headlesdev
2025-05-21 23:32:21 +02:00
parent e7d56fa496
commit 065ff7190a
15 changed files with 169 additions and 119 deletions

View File

@@ -2,12 +2,19 @@ import { NextRequest, NextResponse } from "next/server";
import prisma from "@/app/prisma";
import Fuse from 'fuse.js';
import { Site } from "@/app/types";
import { z } from "zod/v4";
const schema = z.object({
currentPage: z.string().optional(),
itemPerPage: z.string().optional(),
search: z.string().optional(),
});
export async function GET(request: NextRequest) {
const { searchParams } = request.nextUrl;
const currentPage = Number(searchParams.get("currentPage")) || 1;
const itemPerPage = Number(searchParams.get("itemPerPage")) || 10;
const search = searchParams.get("search") || "";
const currentPage = Number(schema.parse({ currentPage: searchParams.get("currentPage") }).currentPage) || 1;
const itemPerPage = Number(schema.parse({ itemPerPage: searchParams.get("itemPerPage") }).itemPerPage) || 10;
const search = schema.parse({ search: searchParams.get("search") }).search || "";
try {
if (!search) {
@@ -77,7 +84,9 @@ export async function GET(request: NextRequest) {
itemPerPage
}, { status: 200 });
} catch (error: any) {
console.error("Search error:", error);
if(error instanceof z.ZodError) {
return NextResponse.json({ error: error.issues[0].message }, { status: 400 });
}
return NextResponse.json({ error: "Internal Server Error" }, { status: 500 });
}
}