import { revalidatePath } from 'next/cache' import { NextRequest, NextResponse } from 'next/server' import { createDirectus, rest, staticToken, readItem, readItems } from '@directus/sdk' export async function POST(req: NextRequest) { const body = await req.json() if (body.secret !== process.env.REVALIDATE_SECRET) { return NextResponse.json({ error: 'Invalid secret' }, { status: 401 }) } if (body.type === 'homepage') { revalidatePath('/') return NextResponse.json({ revalidated: true, path: '/' }) } if (body.type === 'all') { const directus = createDirectus(process.env.DIRECTUS_URL!) .with(staticToken(process.env.DIRECTUS_TOKEN!)) .with(rest()) revalidatePath('/') const [categories, articles] = await Promise.all([ directus.request(readItems('categories', { fields: ['slug'] })) as Promise<{ slug: string }[]>, directus.request(readItems('articles', { fields: ['slug', 'category.slug'], filter: { status: { _eq: 'published' } }, limit: 500, })) as Promise<{ slug: string; category: { slug: string } }[]>, ]) const paths = ['/'] for (const cat of categories) { revalidatePath(`/${cat.slug}`) paths.push(`/${cat.slug}`) } for (const article of articles) { const p = `/${article.category.slug}/${article.slug}` revalidatePath(p) paths.push(p) } return NextResponse.json({ revalidated: true, paths: paths.slice(0, 20), total: paths.length }) } const { article_id } = body if (!article_id) { return NextResponse.json({ error: 'Missing article_id' }, { status: 400 }) } const directus = createDirectus(process.env.DIRECTUS_URL!) .with(staticToken(process.env.DIRECTUS_TOKEN!)) .with(rest()) const article = (await directus.request( readItem('articles', article_id, { fields: ['slug', 'category.slug'], }) )) as { slug: string; category: { slug: string } } | null if (!article) { return NextResponse.json({ error: 'Article not found' }, { status: 404 }) } const categorySlug = article.category.slug const { slug } = article revalidatePath('/') revalidatePath(`/${categorySlug}`) revalidatePath(`/${categorySlug}/${slug}`) return NextResponse.json({ revalidated: true, paths: ['/', `/${categorySlug}`, `/${categorySlug}/${slug}`], }) }