import { NextRequest, NextResponse } from 'next/server'; import { createDirectus, rest, authentication, staticToken, createItem, readItems } from '@directus/sdk'; import { config } from '@/lib/config'; async function getAuthenticatedClient() { const { url, token: rawToken } = config.infraCMS; const effectiveUrl = url; const token = rawToken?.trim(); if (!token) { throw new Error('INFRA_DIRECTUS_TOKEN is not configured'); } const client = createDirectus(effectiveUrl) .with(staticToken(token)) .with(rest()); return client; } export async function GET() { try { const client = await getAuthenticatedClient(); const items = await client.request(readItems('visual_feedback', { fields: ['*'], sort: ['-date_created'], })); return NextResponse.json(items); } catch (error: any) { const errMsg = error.errors?.[0]?.message || error.message || 'Unknown Directus Error'; console.error('Error fetching feedback:', { msg: errMsg, url: config.infraCMS.url, status: error.response?.status, errors: error.errors }); return NextResponse.json({ error: errMsg }, { status: 500 }); } } export async function POST(req: NextRequest) { try { const client = await getAuthenticatedClient(); const body = await req.json(); const { action, ...data } = body; if (action === 'reply') { const reply = await client.request(createItem('visual_feedback_comments', { feedback_id: data.feedbackId, user_name: data.userName, text: data.text, })); return NextResponse.json(reply); } const feedback = await client.request(createItem('visual_feedback', { project: 'klz-cables', url: data.url, selector: data.selector, x: data.x, y: data.y, type: data.type, text: data.text, user_name: data.userName, user_identity: data.userIdentity, })); return NextResponse.json(feedback); } catch (error: any) { const errMsg = error.errors?.[0]?.message || error.message || 'Unknown Directus Error'; console.error('Error saving feedback:', { msg: errMsg, url: config.infraCMS.url, status: error.response?.status, errors: error.errors }); return NextResponse.json({ error: errMsg }, { status: 500 }); } }