# 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:** ```sql -- 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:** ```sql -- 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)