80 lines
2.6 KiB
TypeScript
80 lines
2.6 KiB
TypeScript
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 });
|
|
}
|
|
}
|