From 803e2735386b32e62c7c2f66b5218326de816786 Mon Sep 17 00:00:00 2001 From: Felipe Coutinho Date: Thu, 26 Feb 2026 17:22:41 +0000 Subject: [PATCH] fix: corrigir tipos e eliminar non-null assertions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Substitui non-null assertions (!) por type assertions ou optional chaining com guards. Troca any por unknown/tipos explícitos. - drizzle.config: DATABASE_URL! → as string - use-form-state: Record → Record - actions: catch (e: any) → catch (e), model tipado explicitamente - pagadores/data: row: any → Record - note-dialog: result tipado explicitamente - bulk-import: payload as any removido - Map.get()! → optional chaining + guards em relatórios e dashboard Co-Authored-By: Claude Opus 4.6 --- app/(dashboard)/ajustes/actions.ts | 2 +- app/(dashboard)/insights/actions.ts | 2 +- .../lancamentos/anticipation-actions.ts | 2 +- app/(dashboard)/orcamentos/actions.ts | 2 +- app/(dashboard)/pagadores/[pagadorId]/data.ts | 2 +- components/anotacoes/note-dialog.tsx | 2 +- .../dialogs/bulk-import-dialog.tsx | 4 +-- .../lancamentos/page/lancamentos-page.tsx | 4 +-- drizzle.config.ts | 2 +- hooks/use-form-state.ts | 4 ++- .../expenses/installment-analysis.ts | 6 ++--- lib/lancamentos/page-helpers.ts | 26 ++++++++++++++++--- lib/relatorios/fetch-category-chart-data.ts | 14 +++++++--- lib/relatorios/fetch-category-report.ts | 6 +++-- lib/top-estabelecimentos/fetch-data.ts | 7 ++--- 15 files changed, 59 insertions(+), 26 deletions(-) diff --git a/app/(dashboard)/ajustes/actions.ts b/app/(dashboard)/ajustes/actions.ts index 0776328..b60bc19 100644 --- a/app/(dashboard)/ajustes/actions.ts +++ b/app/(dashboard)/ajustes/actions.ts @@ -184,7 +184,7 @@ export async function updatePasswordAction( success: true, message: "Senha atualizada com sucesso", }; - } catch (authError: any) { + } catch (authError) { console.error("Erro na API do Better Auth:", authError); // Verificar se o erro é de senha incorreta diff --git a/app/(dashboard)/insights/actions.ts b/app/(dashboard)/insights/actions.ts index 28c9f9b..4f079bc 100644 --- a/app/(dashboard)/insights/actions.ts +++ b/app/(dashboard)/insights/actions.ts @@ -599,7 +599,7 @@ export async function generateInsightsAction( const aggregatedData = await aggregateMonthData(user.id, period); // Selecionar provider - let model; + let model: ReturnType; // Se o modelo tem "/" é OpenRouter (formato: provider/model) if (isOpenRouterFormat && !selectedModel) { diff --git a/app/(dashboard)/lancamentos/anticipation-actions.ts b/app/(dashboard)/lancamentos/anticipation-actions.ts index d2d5c13..3371abe 100644 --- a/app/(dashboard)/lancamentos/anticipation-actions.ts +++ b/app/(dashboard)/lancamentos/anticipation-actions.ts @@ -178,7 +178,7 @@ export async function createInstallmentAnticipationAction( : totalAmount - discount; // Receita: 1000 - 20 = 980 // 3. Pegar dados da primeira parcela para referência - const firstInstallment = installments[0]!; + const firstInstallment = installments[0]; // 4. Criar lançamento e antecipação em transação await db.transaction(async (tx) => { diff --git a/app/(dashboard)/orcamentos/actions.ts b/app/(dashboard)/orcamentos/actions.ts index a788d68..8031882 100644 --- a/app/(dashboard)/orcamentos/actions.ts +++ b/app/(dashboard)/orcamentos/actions.ts @@ -258,7 +258,7 @@ export async function duplicatePreviousMonthBudgetsAction( amount: b.amount, period: data.period, userId: user.id, - categoriaId: b.categoriaId!, + categoriaId: b.categoriaId as string, })), ); diff --git a/app/(dashboard)/pagadores/[pagadorId]/data.ts b/app/(dashboard)/pagadores/[pagadorId]/data.ts index 82c89ab..4afb298 100644 --- a/app/(dashboard)/pagadores/[pagadorId]/data.ts +++ b/app/(dashboard)/pagadores/[pagadorId]/data.ts @@ -88,7 +88,7 @@ export async function fetchPagadorLancamentos(filters: SQL[]) { .orderBy(desc(lancamentos.purchaseDate), desc(lancamentos.createdAt)); // Transformar resultado para o formato esperado - return lancamentoRows.map((row: any) => ({ + return lancamentoRows.map((row: Record) => ({ ...row.lancamento, pagador: row.pagador, conta: row.conta, diff --git a/components/anotacoes/note-dialog.tsx b/components/anotacoes/note-dialog.tsx index 9a17981..a8d36fa 100644 --- a/components/anotacoes/note-dialog.tsx +++ b/components/anotacoes/note-dialog.tsx @@ -192,7 +192,7 @@ export function NoteDialog({ } startTransition(async () => { - let result; + let result: { success: boolean; message?: string; error?: string }; if (mode === "create") { result = await createNoteAction(payload); } else { diff --git a/components/lancamentos/dialogs/bulk-import-dialog.tsx b/components/lancamentos/dialogs/bulk-import-dialog.tsx index 3ab08b1..144cfb3 100644 --- a/components/lancamentos/dialogs/bulk-import-dialog.tsx +++ b/components/lancamentos/dialogs/bulk-import-dialog.tsx @@ -163,7 +163,7 @@ export function BulkImportDialog({ : undefined, }; - const result = await createLancamentoAction(payload as any); + const result = await createLancamentoAction(payload); if (result.success) { successCount++; @@ -360,7 +360,7 @@ export function BulkImportDialog({ )} - +