Files
avbeat-com/src/app/api/forum/threads/[id]/route.ts

45 lines
1.4 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server';
import { createClient } from '@/lib/supabase/server';
import { attachAuthorUsernames, buildAuthorUsernameMap } from '@/lib/forum/authorUsernames';
export async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
try {
const { id } = await params;
const supabase = await createClient();
// Fetch thread
const { data: thread, error: threadError } = await supabase
.from('forum_threads')
.select('*, forum_categories(id, name, slug)')
.eq('id', id)
.single();
if (threadError) throw threadError;
// Increment view count
await supabase
.from('forum_threads')
.update({ view_count: (thread.view_count || 0) + 1 })
.eq('id', id);
// Fetch replies
const { data: replies, error: repliesError } = await supabase
.from('forum_replies')
.select('*')
.eq('thread_id', id)
.order('created_at', { ascending: true });
if (repliesError) throw repliesError;
const usernameMap = await buildAuthorUsernameMap(supabase);
const [threadWithUsername] = attachAuthorUsernames([thread], usernameMap);
return NextResponse.json({
thread: threadWithUsername,
replies: attachAuthorUsernames(replies, usernameMap),
});
} catch (err: any) {
return NextResponse.json({ error: err.message }, { status: 500 });
}
}