diff --git a/src/app/api/campaigns/draft/route.ts b/src/app/api/campaigns/draft/route.ts index cc330f9..c5b517b 100644 --- a/src/app/api/campaigns/draft/route.ts +++ b/src/app/api/campaigns/draft/route.ts @@ -1,6 +1,19 @@ import { NextRequest, NextResponse } from 'next/server'; import { getSupabaseServerClient } from '@/lib/supabase/server'; +// Erros do Supabase (PostgrestError) não são instâncias de Error — têm +// message/code/details/hint. Sem isso, o catch caía no fallback genérico e +// escondia a causa real (tabela ausente, projeto pausado, key inválida...). +function describeError(error: unknown, fallback: string): string { + if (error instanceof Error) return error.message; + if (error && typeof error === 'object') { + const e = error as { message?: string; code?: string; details?: string; hint?: string }; + const parts = [e.message, e.code ? `(code ${e.code})` : '', e.details, e.hint].filter(Boolean); + if (parts.length) return parts.join(' '); + } + return fallback; +} + const ALLOWED_FIELDS = [ 'product', 'audience', @@ -66,7 +79,7 @@ export async function POST(request: NextRequest) { } catch (error) { console.error('[Campaigns] Error saving draft:', error); return NextResponse.json( - { success: false, error: error instanceof Error ? error.message : 'Erro ao salvar rascunho da campanha.' }, + { success: false, error: describeError(error, 'Erro ao salvar rascunho da campanha.') }, { status: 500 } ); } @@ -86,7 +99,7 @@ export async function GET(request: NextRequest) { } catch (error) { console.error('[Campaigns] Error listing drafts:', error); return NextResponse.json( - { success: false, error: error instanceof Error ? error.message : 'Erro ao listar campanhas salvas.' }, + { success: false, error: describeError(error, 'Erro ao listar campanhas salvas.') }, { status: 500 } ); }