- Delete: CookieConsent.astro (old Astro component) - Delete: consent.ts, right-to-be-forgotten.ts (Astro API routes) - Update: route.ts is now proper Next.js route handler - Update: sitemap-template.md - replace Astro pages structure with Next.js app/ structure - Update: payload-nextjs-notes.md - fix MongoDB port reference - Note: seo-multi-channel auto_publish.py is for Astro sites (kept as-is)
39 lines
1.2 KiB
TypeScript
39 lines
1.2 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { getPayload } from 'payload'
|
|
import config from '@/payload.config'
|
|
|
|
/**
|
|
* DELETE /api/consent - Right to be forgotten (GDPR/PDPA)
|
|
*
|
|
* Deletes all consent records for a given session or user
|
|
*/
|
|
export async function DELETE(request: NextRequest) {
|
|
try {
|
|
const payloadConfig = await config
|
|
const payload = await getPayload({ config: payloadConfig })
|
|
|
|
const { searchParams } = new URL(request.url)
|
|
const sessionId = searchParams.get('sessionId')
|
|
|
|
if (!sessionId) {
|
|
return NextResponse.json({ error: 'sessionId is required' }, { status: 400 })
|
|
}
|
|
|
|
// Find and delete all consent logs for this session
|
|
const result = await payload.delete({
|
|
collection: 'consent-logs',
|
|
where: {
|
|
sessionId: { equals: sessionId },
|
|
},
|
|
})
|
|
|
|
return NextResponse.json({
|
|
success: true,
|
|
deleted: result.deletedDocs?.length || 0,
|
|
message: 'All consent records for this session have been deleted'
|
|
})
|
|
} catch (error) {
|
|
console.error('Right to be forgotten error:', error)
|
|
return NextResponse.json({ error: 'Failed to delete consent records' }, { status: 500 })
|
|
}
|
|
} |