# 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)
