import { NextRequest, NextResponse } from 'next/server'; import { prisma } from '@/lib/prisma'; export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); const page = parseInt(searchParams.get('page') || '1'); const limit = parseInt(searchParams.get('limit') || '50'); const category = searchParams.get('category'); const featured = searchParams.get('featured'); const published = searchParams.get('published'); const difficulty = searchParams.get('difficulty'); const search = searchParams.get('search'); const skip = (page - 1) * limit; const where: any = {}; if (category) where.category = category; if (featured !== null) where.featured = featured === 'true'; if (published !== null) where.published = published === 'true'; if (difficulty) where.difficulty = difficulty; if (search) { where.OR = [ { title: { contains: search, mode: 'insensitive' } }, { description: { contains: search, mode: 'insensitive' } }, { tags: { hasSome: [search] } }, { content: { contains: search, mode: 'insensitive' } } ]; } const [projects, total] = await Promise.all([ prisma.project.findMany({ where, orderBy: { createdAt: 'desc' }, skip, take: limit }), prisma.project.count({ where }) ]); return NextResponse.json({ projects, total, pages: Math.ceil(total / limit), currentPage: page }); } catch (error) { console.error('Error fetching projects:', error); return NextResponse.json( { error: 'Failed to fetch projects' }, { status: 500 } ); } } export async function POST(request: NextRequest) { try { const data = await request.json(); const project = await prisma.project.create({ data: { ...data, performance: data.performance || { lighthouse: 90, bundleSize: '50KB', loadTime: '1.5s' }, analytics: data.analytics || { views: 0, likes: 0, shares: 0 } } }); return NextResponse.json(project); } catch (error) { console.error('Error creating project:', error); return NextResponse.json( { error: 'Failed to create project' }, { status: 500 } ); } }