import { Article } from '../../models/Article' import { checkAccessLevel, verifyAuth } from '../../utils/auth' export default defineEventHandler(async (event) => { const slug = getRouterParam(event, 'slug') if (!slug) { throw createError({ statusCode: 400, statusMessage: 'Slug is required' }) } // Find article const article = await Article.findOne({ slug }) .populate('author', 'username displayName avatar') .populate('contributors', 'username displayName avatar') if (!article) { throw createError({ statusCode: 404, statusMessage: 'Article not found' }) } // Check access const hasAccess = await checkAccessLevel( event, article.accessLevel, article.cohorts ) if (!hasAccess) { // For protected content, return limited preview if (article.accessLevel !== 'admin') { return { slug: article.slug, title: article.title, description: article.description.substring(0, 200) + '...', category: article.category, tags: article.tags, accessLevel: article.accessLevel, restricted: true, message: 'This content requires authentication' } } throw createError({ statusCode: 403, statusMessage: 'Access denied' }) } // Increment view count article.views += 1 await article.save() // Get user to check if they've liked const user = await verifyAuth(event) const userLiked = false // TODO: Implement likes tracking return { ...article.toObject(), userLiked, revisionCount: article.revisions.length, commentCount: article.comments.length, // Don't send full revisions and comments in main response revisions: undefined, comments: undefined } })