feat: integrate feedback module
This commit is contained in:
79
app/api/feedback/route.ts
Normal file
79
app/api/feedback/route.ts
Normal file
@@ -0,0 +1,79 @@
|
||||
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 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user