import { NextRequest, NextResponse } from 'next/server'; import { PrismaClient } from '@prisma/client'; import { cookies } from 'next/headers'; import jwt from 'jsonwebtoken'; const prisma = new PrismaClient(); // Middleware de autenticação async function authenticate(request: NextRequest) { const cookieStore = await cookies(); const token = cookieStore.get('auth_token')?.value; if (!token) { return null; } try { const decoded = jwt.verify(token, process.env.JWT_SECRET!) as { userId: string }; const user = await prisma.user.findUnique({ where: { id: decoded.userId }, select: { id: true, email: true, name: true } }); return user; } catch (error) { return null; } } // GET /api/pages - Listar todas as páginas (público) export async function GET(request: NextRequest) { try { const { searchParams } = new URL(request.url); const slug = searchParams.get('slug'); const locale = searchParams.get('locale') || 'pt'; if (slug) { // Buscar página específica com locale const page = await prisma.pageContent.findUnique({ where: { slug_locale: { slug, locale } } }); if (!page) { // Fallback para PT se não encontrar if (locale !== 'pt') { const ptPage = await prisma.pageContent.findUnique({ where: { slug_locale: { slug, locale: 'pt' } } }); if (ptPage) { return NextResponse.json({ ...ptPage, fallback: true }); } } return NextResponse.json({ error: 'Página não encontrada' }, { status: 404 }); } return NextResponse.json(page); } // Listar todas as páginas (só PT para admin) const pages = await prisma.pageContent.findMany({ where: { locale: 'pt' }, orderBy: { slug: 'asc' } }); return NextResponse.json(pages); } catch (error) { console.error('Erro ao buscar páginas:', error); return NextResponse.json({ error: 'Erro ao buscar páginas' }, { status: 500 }); } } // POST /api/pages - Criar ou atualizar página (admin apenas) export async function POST(request: NextRequest) { try { const user = await authenticate(request); if (!user) { return NextResponse.json({ error: 'Não autorizado' }, { status: 401 }); } const body = await request.json(); const { slug, content } = body; if (!slug || !content) { return NextResponse.json({ error: 'Slug e conteúdo são obrigatórios' }, { status: 400 }); } // Upsert: criar ou atualizar se já existir (versão PT) const page = await prisma.pageContent.upsert({ where: { slug_locale: { slug, locale: 'pt' } }, update: { content }, create: { slug, locale: 'pt', content } }); return NextResponse.json({ success: true, page }); } catch (error) { console.error('Erro ao salvar página:', error); return NextResponse.json({ error: 'Erro ao salvar página' }, { status: 500 }); } }