fix: revelar erro real do Supabase no histórico de campanhas

Erros do Supabase (PostgrestError) não são Error, então o catch caía no
fallback genérico "Erro ao listar campanhas salvas" e escondia a causa
(tabela ausente, projeto pausado, key inválida). Agora extrai
message/code/details/hint.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Marcio Bevervanso 2026-06-16 11:07:02 -03:00
parent 8bd7377706
commit 6a97012058

View file

@ -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 }
);
}