import { type NextRequest, NextResponse } from "next/server"; import { requireAdminUser } from "@/lib/auth/middleware"; import { createSubscriptionTier, getAllSubscriptionTiers, } from "@/lib/prisma/queries/subscription-tiers"; import { secureLogger } from "@/lib/secure-logger"; import { createSubscriptionTierSchema } from "@/lib/validation-schemas"; export async function GET(request: NextRequest) { const auth = await requireAdminUser(request); if (auth instanceof NextResponse) { return auth; } try { const tiers = await getAllSubscriptionTiers(true); return NextResponse.json( { success: true, tiers, }, { status: 200 }, ); } catch (error) { secureLogger.error("❌ Erro ao listar subscription tiers", { error: error instanceof Error ? error.message : "Erro desconhecido", }); return NextResponse.json( { success: false, error: "Erro ao listar planos de assinatura", }, { status: 500 }, ); } } export async function POST(request: NextRequest) { const auth = await requireAdminUser(request); if (auth instanceof NextResponse) { return auth; } try { const body = await request.json(); const parsed = createSubscriptionTierSchema.parse(body); const tier = await createSubscriptionTier({ name: parsed.name, slug: parsed.slug, description: parsed.description ?? null, level: parsed.level ?? 0, price_monthly: parsed.priceMonthly ?? null, price_yearly: parsed.priceYearly ?? null, is_active: parsed.isActive ?? true, features: parsed.features?.map((feature, index) => ({ feature_key: feature.featureKey, label: feature.label, description: feature.description ?? null, sort_order: feature.sortOrder ?? index, })), }); return NextResponse.json( { success: true, tier, }, { status: 201 }, ); } catch (error) { if (error instanceof NextResponse) { throw error; } if (error instanceof Error && "issues" in error) { return NextResponse.json( { success: false, error: "Dados inválidos", details: (error as any).issues, }, { status: 400 }, ); } secureLogger.error("❌ Erro ao criar subscription tier", { error: error instanceof Error ? error.message : "Erro desconhecido", }); return NextResponse.json( { success: false, error: "Erro ao criar plano de assinatura", }, { status: 500 }, ); } }