import { NextRequest, NextResponse } from 'next/server' import TopicModel, { transformToTopic } from '@/models/topic' import { authMiddleware } from '@/lib/auth-middleware' // GET /api/topic/slug/[slug] - Get topic by slug (for public viewing) export async function GET( request: NextRequest, { params }: { params: Promise<{ slug: string }> } ) { try { const { slug } = await params if (!slug) { return NextResponse.json( { success: false, error: { message: 'Slug parameter is required', code: 'MISSING_SLUG' }, }, { status: 400 } ) } const topic = await TopicModel.findOne({ slug }).lean() if (!topic) { return NextResponse.json( { success: false, error: { message: 'Topic not found', code: 'NOT_FOUND' }, }, { status: 404 } ) } // Check if topic is draft and user is not the owner if (topic.isDraft) { const user = await authMiddleware(request) if (!user || user.id !== topic.authorId) { return NextResponse.json( { success: false, error: { message: 'Topic not found', code: 'NOT_FOUND' }, }, { status: 404 } ) } } const transformedTopic = transformToTopic(topic) if (!transformedTopic) { return NextResponse.json( { success: false, error: { message: 'Failed to process topic data', code: 'PROCESSING_ERROR' }, }, { status: 500 } ) } return NextResponse.json( { success: true, data: transformedTopic, }, { status: 200 } ) } catch (error) { console.error('Error fetching topic by slug:', error) return NextResponse.json( { success: false, error: { message: 'Failed to fetch topic', code: 'SERVER_ERROR' }, }, { status: 500 } ) } }