Skip to content

fix: excluir KB (e qualquer erro nao tratado) mostrava mensagem inutil - #13

Merged
janeiaraujo merged 1 commit into
mainfrom
fix/delete-kb-generic-error
Aug 3, 2026
Merged

fix: excluir KB (e qualquer erro nao tratado) mostrava mensagem inutil#13
janeiaraujo merged 1 commit into
mainfrom
fix/delete-kb-generic-error

Conversation

@janeiaraujo

Copy link
Copy Markdown
Owner

O problema relatado

Ao tentar excluir um KB: Falha ao excluir: Erro desconhecido.

Causa raiz (sistêmica, não só do delete)

O error handler global do Fastify (server.js) respondia:

{ "error": true, "message": "...", "statusCode": 500 }

error era um booleano, não a mensagem. O frontend inteiro lê error.response?.data?.error esperando uma string — são 53 pontos no código fazendo isso. Resultado: qualquer exceção não tratada em qualquer rota do backend virava "...: true" para quem usa o campo direto, ou "Erro desconhecido" para quem tem fallback (como o KBView.jsx) — nos dois casos escondendo a causa real.

O que mudou

  • server.js: error agora é a mensagem de fato, não true.
  • records.routes.js: a rota DELETE /:recordId não tinha nenhum try/catch — era a única rota de mutação de KB nesse arquivo sem isso. Também não conferia se o registro existia antes de responder sucesso, e não gerava audit log. Adicionei os três.
  • KBView.jsx: os 9 alert() de erro (excluir, aprovar, rejeitar, publicar, 5 variantes de exportar) caíam direto em "Erro desconhecido" sempre que data.error não vinha preenchido. Criei um getErrorMessage() com fallback em cadeia: data.errordata.message → status HTTP → error.message (nível de rede) → só por último o texto genérico. Fica diagnosticável mesmo quando o servidor não manda uma mensagem estruturada.

Test plan

  • npm run build (validado localmente, sem erros)
  • Excluir um KB de teste e confirmar que a exclusão funciona
  • Forçar um erro (ex.: tentar excluir com um usuário sem permissão) e conferir que a mensagem mostrada agora é a real, não mais "Erro desconhecido"

Causa raiz, sistemica: o error handler global do Fastify respondia
{ error: true, message, statusCode } - o campo error era um booleano,
nao a mensagem. Todo o frontend le error.response?.data?.error
esperando uma string (53 pontos no codigo). Resultado: qualquer
excecao nao tratada em QUALQUER rota vira "...: true" pra quem le o
campo direto, ou "Erro desconhecido" pra quem tem fallback - nos dois
casos, escondendo a causa real do erro.

Corrigido o campo `error` para ser a mensagem de fato.

Tambem: a rota DELETE /records/:id nao tinha try/catch nenhum (unica
rota de mutacao de KB sem isso), nao verificava se o registro existia
antes de considerar sucesso, e nao registrava audit log - diferente do
padrao usado nas outras rotas do mesmo arquivo. Adicionado tudo isso.

E no KBView.jsx, os 9 alerts de erro (excluir, aprovar, rejeitar,
publicar, exportar) caiam direto em "Erro desconhecido" sempre que
data.error nao vinha preenchido. Agora tentam data.error, depois
data.message, depois o status HTTP, e so por ultimo o generico -
diagnosticavel mesmo quando o servidor nao manda uma mensagem.
Copilot AI review requested due to automatic review settings August 3, 2026 15:07

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Corrige a forma como erros do backend são serializados e exibidos no frontend, evitando a mensagem genérica “Erro desconhecido” e tornando falhas (incluindo exceções não tratadas) mais diagnosticáveis durante ações de KB (ex.: excluir, publicar, exportar).

Changes:

  • Ajusta o error handler global do Fastify para retornar error como mensagem (string) em vez de boolean.
  • Fortalece a rota DELETE /:recordId de records com try/catch, validação de existência e criação de audit log.
  • Centraliza a extração de mensagem de erro no KBView.jsx com fallback em cadeia para cobrir casos sem response/sem payload esperado.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 5 comments.

File Description
frontend/src/pages/kb/KBView.jsx Adiciona helper de fallback para mensagens de erro e aplica nos fluxos de ação da tela de KB.
backend/src/server.js Corrige o payload padrão do error handler global para compatibilizar com o consumo do frontend.
backend/src/modules/records/records.routes.js Melhora o delete de KB com tratamento de erro, 404 quando não encontrado e audit log.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +22 to +26
// A API sempre manda { error: '<mensagem>' } em erros tratados, mas uma
// excecao nao tratada no servidor, ou uma falha de rede (sem response
// nenhum, ex.: CORS, timeout, servidor fora do ar) nao tem esse campo. Sem
// esses fallbacks, tudo isso virava um "Erro desconhecido" que escondia a
// causa real - inclusive de quem for depurar o problema depois.
Comment thread backend/src/server.js
Comment on lines +255 to +259
// `error` precisa ser a mensagem (string): todo o frontend le
// `error.response?.data?.error` esperando texto. Mandar `error: true`
// (booleano) fazia qualquer excecao nao tratada, em qualquer rota,
// aparecer como "...: true" para quem usa esse campo - ou, quando o
// fallback e usado, mascarava a causa real como "Erro desconhecido".
Comment on lines +721 to +723
if (deleteResult.deletedCount === 0) {
return reply.status(404).send({ error: 'KB não encontrado' });
}
await db.collection('audit_logs').insertOne({
tenant_id: request.tenantId,
user_id: request.currentUser._id,
action: 'kb.deleted',
Comment on lines +744 to +747
} catch (error) {
fastify.log.error({ err: error }, 'Falha ao excluir KB');
return reply.status(500).send({ error: 'Falha ao excluir KB', details: error.message });
}
@janeiaraujo
janeiaraujo merged commit bf6cc55 into main Aug 3, 2026
1 check passed
@janeiaraujo
janeiaraujo deleted the fix/delete-kb-generic-error branch August 3, 2026 18:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants