Limpeza de Dados para Produção
Última atualização: 2026-04-06
Versão: 3.0
1. Visão Geral
O banco possui 73 tabelas categorizadas em:
- PRESERVAR (24) — Estrutura, configuração, dados mestres criados por especialistas
- LIMPAR (49) — Dados transacionais, logs, dados de teste
2. Tabelas a PRESERVAR
Estrutura e Configuração do Sistema
| Tabela | Motivo |
|---|---|
papeis | Estrutura base de papéis do sistema |
planos | Planos de assinatura (configuração comercial) |
series_escolares | Lista fixa de séries escolares |
cron_status | Status operacional do CRON (resetar, não limpar) |
configuracoes_plataforma | Configurações globais do sistema |
feature_flags | Configuração de feature flags |
canary_groups | Grupos canary (configuração) |
feature_flag_canary | Vínculo feature flag ↔ canary group |
Dados Mestres Criados por Especialistas
| Tabela | Motivo |
|---|---|
olimpiadas | Cadastro de olimpíadas |
olimpiada_edicoes | Edições das olimpíadas |
olimpiada_links | Links das olimpíadas |
olimpiada_series_participantes | Séries que participam |
fases_olimpiada | Fases de cada olimpíada |
niveis_competicao | Níveis de competição |
niveis_competicao_series | Vínculo nível-série |
atividades_cronograma | Cronograma das olimpíadas |
cursos | Cursos criados |
cursos_videos | Vídeos dos cursos |
tutoriais | Tutoriais do sistema |
banners_login | Banners configurados |
headers_novidades | Headers de novidades |
template_hubs | Hubs de templates |
templates_mensagem | Templates de mensagem |
Total PRESERVAR: 24 tabelas (8 estrutura + 16 dados mestres — cron_status apenas resetado, não truncado)
3. Tabelas a LIMPAR
| Tabela | Descrição |
|---|---|
escolas | Escolas de teste |
endereco_escola | Endereços de escolas |
escola_assinaturas | Assinaturas de teste |
escola_faturas | Faturas de teste |
escola_olimpiadas | Adesões às olimpíadas |
escola_mural_config | Config do Mural Olímpico |
escola_anotacoes | Anotações de escolas |
usuarios | Usuários de teste |
usuario_papeis | Vínculos usuário-papel |
usuarios_escola_permissoes | Permissões extras |
usuarios_escola_sub_permissoes | Sub-permissões por papel |
user_presence | Presença online |
turmas | Turmas de teste |
alunos | Alunos de teste |
aluno_turma_historico | Histórico de turmas |
aluno_responsaveis | Vínculos aluno-responsável |
responsaveis | Responsáveis de teste |
solicitacoes_vinculo | Solicitações de vínculo |
inscricoes_olimpiada | Inscrições de teste |
resultados_aluno | Resultados de teste |
configuracoes_fase_nivel | Config de fase/nível por escola |
mural_publicacoes | Publicações do mural |
mural_liberacoes | Liberações de resultados |
mural_dados_publicados | Snapshots de resultados do mural |
mensagens_enviadas | Mensagens enviadas |
template_personalizacoes | Personalizações de template por escola |
eventos_manuais_escola | Eventos manuais |
tarefas | Tarefas da equipe |
notificacoes | Notificações |
logs_transacoes | Logs de auditoria |
login_otps | OTPs expirados |
portal_otps | OTPs do portal |
portal_login_tentativas | Tentativas de login |
portal_alert_cooldown | Cooldown de alertas portal |
portal_rate_metrics | Métricas de rate limit portal |
usuario_progresso_video | Progresso em vídeos |
video_comentarios | Comentários em vídeos |
video_materiais | Materiais de vídeos |
cadastro_tokens | Tokens de cadastro público |
importacao_alunos_sessoes | Sessões de importação de alunos |
importacao_resultados_sessoes | Sessões de importação de resultados |
incidentes_resolucoes | Resoluções de incidentes |
coordenador_cores | Cores de coordenadores |
sms_log | Log de mensagens WhatsApp enviadas |
token_blacklist | Tokens JWT invalidados |
senha_historico | Histórico de senhas |
canary_group_escolas | Vínculos canary group ↔ escola |
canary_group_usuarios | Vínculos canary group ↔ usuário |
twilio_billing_log | ⚠️ Legado — candidata a DROP via migration (Twilio removido) |
Total LIMPAR: 49 tabelas
4. Script SQL de Limpeza
sql
-- ===============================================
-- RESET DO BANCO PARA PRODUÇÃO
-- ⚠️ EXECUTE COM CUIDADO - IRREVERSÍVEL
-- ⚠️ Faça backup antes de executar.
-- Total: 49 tabelas truncadas
-- ===============================================
SET session_replication_role = replica;
-- ETAPA 1: Cache, Logs e Segurança
TRUNCATE TABLE logs_transacoes CASCADE;
TRUNCATE TABLE login_otps CASCADE;
TRUNCATE TABLE portal_otps CASCADE;
TRUNCATE TABLE portal_login_tentativas CASCADE;
TRUNCATE TABLE portal_alert_cooldown CASCADE;
TRUNCATE TABLE portal_rate_metrics CASCADE;
TRUNCATE TABLE user_presence CASCADE;
TRUNCATE TABLE cadastro_tokens CASCADE;
TRUNCATE TABLE token_blacklist CASCADE;
TRUNCATE TABLE senha_historico CASCADE;
TRUNCATE TABLE sms_log CASCADE;
TRUNCATE TABLE incidentes_resolucoes CASCADE;
TRUNCATE TABLE twilio_billing_log CASCADE;
-- ETAPA 2: Notificações e Tarefas
TRUNCATE TABLE notificacoes CASCADE;
TRUNCATE TABLE tarefas CASCADE;
-- ETAPA 3: Interações com Vídeos
TRUNCATE TABLE video_comentarios CASCADE;
TRUNCATE TABLE video_materiais CASCADE;
TRUNCATE TABLE usuario_progresso_video CASCADE;
-- ETAPA 4: Mural e Comunicação
TRUNCATE TABLE mural_publicacoes CASCADE;
TRUNCATE TABLE mural_liberacoes CASCADE;
TRUNCATE TABLE mural_dados_publicados CASCADE;
TRUNCATE TABLE mensagens_enviadas CASCADE;
TRUNCATE TABLE template_personalizacoes CASCADE;
-- ETAPA 5: Resultados e Inscrições
TRUNCATE TABLE resultados_aluno CASCADE;
TRUNCATE TABLE inscricoes_olimpiada CASCADE;
TRUNCATE TABLE configuracoes_fase_nivel CASCADE;
TRUNCATE TABLE importacao_resultados_sessoes CASCADE;
-- ETAPA 6: Alunos e Responsáveis
TRUNCATE TABLE aluno_responsaveis CASCADE;
TRUNCATE TABLE aluno_turma_historico CASCADE;
TRUNCATE TABLE alunos CASCADE;
TRUNCATE TABLE responsaveis CASCADE;
TRUNCATE TABLE solicitacoes_vinculo CASCADE;
TRUNCATE TABLE turmas CASCADE;
-- ETAPA 7: Eventos e Importações
TRUNCATE TABLE eventos_manuais_escola CASCADE;
TRUNCATE TABLE importacao_alunos_sessoes CASCADE;
TRUNCATE TABLE coordenador_cores CASCADE;
-- ETAPA 8: Financeiro e Config Escola
TRUNCATE TABLE escola_olimpiadas CASCADE;
TRUNCATE TABLE escola_mural_config CASCADE;
TRUNCATE TABLE escola_faturas CASCADE;
TRUNCATE TABLE escola_assinaturas CASCADE;
TRUNCATE TABLE escola_anotacoes CASCADE;
TRUNCATE TABLE endereco_escola CASCADE;
-- ETAPA 9: Canary (dados transacionais, preserva config)
TRUNCATE TABLE canary_group_escolas CASCADE;
TRUNCATE TABLE canary_group_usuarios CASCADE;
-- ETAPA 10: Usuários e Permissões
TRUNCATE TABLE usuarios_escola_sub_permissoes CASCADE;
TRUNCATE TABLE usuarios_escola_permissoes CASCADE;
TRUNCATE TABLE usuario_papeis CASCADE;
TRUNCATE TABLE usuarios CASCADE;
-- ETAPA 11: Escolas
TRUNCATE TABLE escolas CASCADE;
SET session_replication_role = DEFAULT;5. Reset do CRON Status
sql
UPDATE cron_status SET
ultima_execucao = NULL,
ultima_execucao_sucesso = NULL,
ultimo_erro = NULL,
ultimo_erro_em = NULL,
status = 'operacional',
tentativas_consecutivas = 0,
sms_critico_enviado_em = NULL,
proximo_retry = NULL;6. Query de Verificação Pós-Limpeza
sql
-- Tabelas transacionais devem estar vazias
SELECT 'escolas' as tabela, COUNT(*) as registros FROM escolas
UNION ALL SELECT 'usuarios', COUNT(*) FROM usuarios
UNION ALL SELECT 'alunos', COUNT(*) FROM alunos
UNION ALL SELECT 'turmas', COUNT(*) FROM turmas
UNION ALL SELECT 'responsaveis', COUNT(*) FROM responsaveis
UNION ALL SELECT 'inscricoes_olimpiada', COUNT(*) FROM inscricoes_olimpiada
UNION ALL SELECT 'resultados_aluno', COUNT(*) FROM resultados_aluno
UNION ALL SELECT 'escola_assinaturas', COUNT(*) FROM escola_assinaturas
UNION ALL SELECT 'escola_faturas', COUNT(*) FROM escola_faturas
UNION ALL SELECT 'logs_transacoes', COUNT(*) FROM logs_transacoes
UNION ALL SELECT 'notificacoes', COUNT(*) FROM notificacoes
UNION ALL SELECT 'mural_publicacoes', COUNT(*) FROM mural_publicacoes
UNION ALL SELECT 'mural_dados_publicados', COUNT(*) FROM mural_dados_publicados
UNION ALL SELECT 'cadastro_tokens', COUNT(*) FROM cadastro_tokens
UNION ALL SELECT 'importacao_alunos_sessoes', COUNT(*) FROM importacao_alunos_sessoes
UNION ALL SELECT 'importacao_resultados_sessoes', COUNT(*) FROM importacao_resultados_sessoes
UNION ALL SELECT 'sms_log', COUNT(*) FROM sms_log
UNION ALL SELECT 'token_blacklist', COUNT(*) FROM token_blacklist
UNION ALL SELECT 'portal_rate_metrics', COUNT(*) FROM portal_rate_metrics
ORDER BY tabela;
-- Dados mestres devem estar intactos
SELECT 'olimpiadas' as tabela, COUNT(*) as registros FROM olimpiadas
UNION ALL SELECT 'cursos', COUNT(*) FROM cursos
UNION ALL SELECT 'planos', COUNT(*) FROM planos
UNION ALL SELECT 'papeis', COUNT(*) FROM papeis
UNION ALL SELECT 'series_escolares', COUNT(*) FROM series_escolares
UNION ALL SELECT 'configuracoes_plataforma', COUNT(*) FROM configuracoes_plataforma
UNION ALL SELECT 'feature_flags', COUNT(*) FROM feature_flags
UNION ALL SELECT 'canary_groups', COUNT(*) FROM canary_groups
ORDER BY tabela;7. Passos Após a Limpeza
Criar Primeiro Administrador
sql
-- 1. Inserir usuário
INSERT INTO usuarios (id, codigo, tipo_codigo, nome_completo, email, telefone, escola_id, ativo)
VALUES (
gen_random_uuid(),
'00000000000', -- ⚠️ CPF real
'cpf',
'Administrador OLP', -- ⚠️ Nome real
'admin@olp.digital', -- ⚠️ Email real
'11999999999', -- ⚠️ Telefone real (para OTP)
NULL, true
);
-- 2. Obter ID
SELECT id FROM usuarios WHERE codigo = '00000000000';
-- 3. Vincular papel (substituir UUID)
INSERT INTO usuario_papeis (usuario_id, papel_id, escola_id, criado_em)
SELECT 'UUID_AQUI', id, NULL, now()
FROM papeis WHERE nome = 'administrador';(Opcional) Criar Especialista
sql
INSERT INTO usuarios (id, codigo, tipo_codigo, nome_completo, email, telefone, escola_id, ativo)
VALUES (gen_random_uuid(), '11111111111', 'cpf', 'Especialista OLP', 'esp@olp.digital', '11999999998', NULL, true);
INSERT INTO usuario_papeis (usuario_id, papel_id, escola_id, criado_em)
SELECT (SELECT id FROM usuarios WHERE codigo = '11111111111'), id, NULL, now()
FROM papeis WHERE nome = 'especialista';8. Storage Buckets
| Bucket | Ação |
|---|---|
banners-login | MANTER |
curso-thumbnails | MANTER |
tutoriais-thumbnails | MANTER |
mural-imagens | LIMPAR (Dashboard → Storage → selecionar tudo → Delete) |
9. Checklist de Execução
- [ ] Fazer backup completo (Dashboard → Settings → Backups)
- [ ] Executar Script SQL de Limpeza (11 etapas)
- [ ] Executar Reset do CRON Status
- [ ] Executar Query de Verificação Pós-Limpeza
- [ ] Confirmar dados mestres intactos
- [ ] Criar primeiro administrador
- [ ] Limpar bucket
mural-imagens - [ ] Testar login com novo administrador
- [ ] Verificar acesso ao painel administrativo
- [ ] Criar primeira escola real de produção