Initial commit DBMaker - Oficiais e Funcionando
This commit is contained in:
208
docs/PROTECAO_EXCLUSAO.md
Normal file
208
docs/PROTECAO_EXCLUSAO.md
Normal file
@@ -0,0 +1,208 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user