Files
dbmaker/docs/PROTECAO_EXCLUSAO.md

6.7 KiB

Proteção contra Exclusão de Dados - Soft Delete

Problema Identificado

Quando um template ou tópico era deletado, os databooks que o utilizavam perdiam suas informações devido ao comportamento CASCADE do banco de dados.

Solução: Soft Delete (Exclusão Lógica)

Ao invés de deletar fisicamente templates e tópicos, o sistema implementa soft delete - marcando-os como inativos. Isso garante que:

  • Databooks existentes continuam funcionando normalmente
  • Novos databooks não podem usar templates/tópicos inativos
  • É possível reativar templates/tópicos posteriormente
  • Histórico completo é preservado

Implementação

1. Soft Delete em Nível de Aplicação

Templates (src/pages/Templates.tsx)

  • Botão "Deletar" na verdade inativa o template (ativo = false)
  • Templates inativos não aparecem na criação de novos databooks
  • Databooks existentes continuam usando o template normalmente
  • Interface mostra claramente que é uma inativação, não exclusão

Tópicos (src/pages/TopicosGestao.tsx)

  • Botão "Deletar" marca o tópico como inativo (ativo = false)
  • Tópicos inativos não aparecem na seleção de novos templates
  • Databooks existentes mantêm acesso aos tópicos inativos
  • Botão "Mostrar Inativos" permite visualizar e reativar tópicos
  • Botão de reativação restaura tópicos inativos

2. Soft Delete em Nível de Banco de Dados

Migration 007_add_archived_status.sql

Campos Adicionados:

  • ativo BOOLEAN DEFAULT TRUE em templates_topicos e templates_customizados
  • inativado_em TIMESTAMP para rastreamento de quando foi inativado

Status "Arquivado":

  • Adicionado novo status arquivado para projetos
  • Permite marcar databooks como arquivados sem deletá-los

Triggers de Soft Delete:

  1. soft_delete_template()

    • Intercepta comandos DELETE em templates
    • Ao invés de deletar, marca como inativo (ativo = FALSE)
    • Registra timestamp da inativação
    • Retorna NULL para cancelar a exclusão física
  2. soft_delete_topico()

    • Intercepta comandos DELETE em tópicos
    • Marca como inativo ao invés de deletar
    • Preserva todos os dados e relacionamentos
    • Impede exclusão física permanentemente

3. Comportamento de Queries

Criação de Novos Databooks:

-- Busca apenas templates ativos
SELECT * FROM templates_customizados WHERE ativo = TRUE

-- Busca apenas tópicos ativos
SELECT * FROM templates_topicos WHERE ativo = TRUE

Databooks Existentes:

-- Busca template mesmo se inativo (sem filtro de ativo)
SELECT * FROM templates_customizados WHERE id = ?

-- Busca tópicos mesmo se inativos
SELECT * FROM templates_topicos WHERE id IN (...)

Status de Databooks

Status Descrição Impede Exclusão?
rascunho Databook em criação Sim
em_andamento Databook sendo preenchido Sim
revisao Databook em revisão Sim
finalizado Databook concluído Sim
cancelado Databook cancelado Não
arquivado Databook arquivado Não

Fluxo de Inativação (Soft Delete)

Templates

  1. Usuário clica em "Deletar Template" (ícone de lixeira)
  2. Modal aparece com título "Inativar Template"
  3. Mensagem explica que:
    • Template será ocultado de novas criações
    • Databooks existentes continuarão funcionando
    • É possível reativar posteriormente
  4. Usuário confirma
  5. Sistema executa DELETE (que é interceptado)
  6. Trigger marca template como inativo
  7. Template desaparece da lista de criação
  8. Databooks existentes continuam acessando normalmente

Tópicos

  1. Usuário clica em "Deletar Tópico" (ícone de lixeira)
  2. Modal aparece com título "Inativar Tópico"
  3. Mensagem explica o comportamento de soft delete
  4. Usuário confirma
  5. Sistema executa DELETE (que é interceptado)
  6. Trigger marca tópico como inativo
  7. Tópico desaparece da lista padrão
  8. Botão "Mostrar Inativos" permite visualizar
  9. Botão de reativação (ícone +) restaura o tópico

Reativação

  1. Usuário clica em "Mostrar Inativos"
  2. Tópicos/templates inativos aparecem com badge "Inativo"
  3. Botão de reativação (ícone +) fica disponível
  4. Ao clicar, tópico/template volta a ficar ativo
  5. Volta a aparecer na criação de novos databooks

Mensagens ao Usuário

Modal de Inativação de Template

Título: Inativar Template

Tem certeza que deseja inativar o template [Nome do Template]?

[Caixa azul]
Importante: O template será ocultado e não aparecerá mais na criação de novos databooks, 
mas continuará disponível para todos os databooks existentes que já o utilizam.

Você poderá reativar este template posteriormente se necessário.

[Botões: Cancelar | Inativar]

Modal de Inativação de Tópico

Título: Inativar Tópico

Tem certeza que deseja inativar o tópico [Número] - [Título]?

[Caixa azul]
Importante: O tópico será ocultado e não aparecerá mais na criação de novos databooks, 
mas continuará disponível para todos os databooks existentes que já o utilizam.

Você poderá reativar este tópico posteriormente se necessário.

[Botões: Cancelar | Inativar]

Toast de Sucesso

✓ Tópico/Template inativado com sucesso
✓ Tópico/Template reativado com sucesso

Vantagens do Soft Delete

  1. Segurança Total:

    • Impossível perder dados de databooks existentes
    • Nenhum CASCADE pode afetar projetos em andamento
  2. Flexibilidade:

    • Fácil reverter decisões de "exclusão"
    • Reativar tópicos/templates quando necessário
  3. Auditoria:

    • Histórico completo preservado
    • Timestamp de quando foi inativado
    • Possível rastrear quem inativou (futuro)
  4. Experiência do Usuário:

    • Mensagens claras sobre o que acontecerá
    • Sem surpresas ou perda de dados
    • Controle total sobre visibilidade

Recomendações de Uso

  1. Inativar ao invés de Deletar:

    • Use a função de inativação para templates/tópicos obsoletos
    • Mantenha histórico completo do sistema
  2. Revisar Inativos Periodicamente:

    • Use "Mostrar Inativos" para revisar itens ocultos
    • Reative se necessário ou mantenha inativo
  3. Planejamento de Templates:

    • Crie templates genéricos e reutilizáveis
    • Evite criar templates muito específicos
  4. Arquivar Databooks Concluídos:

    • Use status "arquivado" para projetos finalizados
    • Mantém organização sem perder dados

Implementação Futura

  • Interface para arquivar databooks em lote
  • Relatório de uso de templates e tópicos
  • Rastreamento de quem inativou/reativou
  • Filtros avançados para inativos
  • Exclusão física permanente (apenas admin, após confirmação tripla)