45 lines
1.4 KiB
TypeScript
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 });
|
|
}
|
|
}
|