import { NextResponse } from "next/server"; import { revalidateTag, revalidatePath } from "next/cache"; /** * باطل‌سازی on-demand کش ISR بلاگ. * * `clinicpro` (App\Blog\Service\BlogCacheInvalidator) بعد از هر * create/update/delete/review این مسیر را صدا می‌زند تا تغییر پنل ادمین بدون * انتظار یک‌ساعتهٔ `revalidate: 3600` روی سایت بیاید. * * قرارداد: POST { tags: string[] } با هدر `X-Revalidate-Secret`. */ export async function POST(request) { const secret = process.env.REVALIDATE_SECRET; if (!secret || request.headers.get("x-revalidate-secret") !== secret) { return NextResponse.json({ revalidated: false }, { status: 401 }); } const body = await request.json().catch(() => null); const tags = body?.tags; if (!Array.isArray(tags) || tags.length === 0) { return NextResponse.json( { revalidated: false, error: "tags required" }, { status: 400 } ); } tags.forEach((tag) => revalidateTag(String(tag))); // فهرست مقالات صفحهٔ خودش را با tag نمی‌گیرد، پس مسیرش جدا باطل می‌شود. if (tags.includes("blog-list")) revalidatePath("/blogs"); return NextResponse.json({ revalidated: true, tags }); }