import { NextRequest, NextResponse } from "next/server"; import { getPosts, getPostsPaginated, createPost, deletePost } from "@/lib/store"; import { requireAuth, parseBody } from "@/lib/http"; import { createPostSchema } from "@/lib/validation"; export async function GET(request: NextRequest) { const deny = await requireAuth(); if (deny) return deny; const { searchParams } = new URL(request.url); // 如果有分页参数,使用分页查询 if (searchParams.has("page") || searchParams.has("search") || searchParams.has("status") || searchParams.has("sortBy")) { const result = await getPostsPaginated({ page: Number(searchParams.get("page")) || 1, pageSize: Number(searchParams.get("pageSize")) || 20, status: searchParams.get("status") as "draft" | "published" | undefined, search: searchParams.get("search") || undefined, sortBy: (searchParams.get("sortBy") as "date" | "createdAt" | "title" | "readingTime") || "createdAt", sortDir: (searchParams.get("sortDir") as "asc" | "desc") || "desc", }); return NextResponse.json(result); } // 兼容旧接口:无参数时返回全量 return NextResponse.json(await getPosts()); } export async function POST(request: NextRequest) { const deny = await requireAuth(); if (deny) return deny; const parsed = await parseBody(request, createPostSchema); if (!parsed.ok) return parsed.response; const post = await createPost(parsed.data); return NextResponse.json(post, { status: 201 }); } export async function DELETE(request: NextRequest) { const deny = await requireAuth(); if (deny) return deny; const { searchParams } = new URL(request.url); const id = searchParams.get("id"); if (!id) return NextResponse.json({ error: "缺少 id" }, { status: 400 }); return NextResponse.json({ ok: await deletePost(id) }); }