6.9 KiB
🦷 Lista de Tarefas — rx.scoreodonto.com
Última atualização: 27/05/2026
🔴 CRÍTICO — Produção em risco
-
[SERVER] JWT_SECRET fixo no docker-compose.yml
- Atualmente usa fallback hardcoded
'sua-chave-secreta-alterar-em-producao'noauth.js - O valor correto existe no
.envda VPS4 mas não está nodocker-compose.ymlda VPS1 - Impacto: toda vez que o container reinicia, todos os tokens JWT de usuários web expiram
- Fix: adicionar
- JWT_SECRET=<valor>na seçãoenvironment:dodocker-compose.yml
- Atualmente usa fallback hardcoded
-
[SERVER]
enabled = 1— sintaxe MySQL em queries PostgreSQL- Arquivos afetados:
server.jslinhas 750 e 874routes/images.jslinhas 142 e 308
- Em PostgreSQL, booleanos são
true/false, não1/0 - Pode retornar resultados errados ou quebrar queries silenciosamente
- Fix: substituir
enabled = 1porenabled = trueem todas as ocorrências
- Arquivos afetados:
-
[SERVER] CORS aberto com
*em produçãoALLOWED_ORIGINSnão está definido nodocker-compose.yml- Resultado: Socket.IO aceita conexões de qualquer origem
- Fix: adicionar
- ALLOWED_ORIGINS=https://rx.scoreodonto.comnodocker-compose.yml
🟠 IMPORTANTE — Funcionalidade afetada
-
[SERVER] Tabela
system_config— migração em produção (VPS1)- A tabela foi adicionada ao
database.js(cria no boot automaticamente) - Mas a VPS1 só vai criar a tabela após o próximo deploy + restart do container
- Verificar após próximo deploy:
docker exec rx_scoreodonto_app node -e "require('./database').initDatabase()" - Até lá, o endpoint
GET /api/system/storage-configretorna estrutura vazia (não quebra, mas Wasabi não funciona)
- A tabela foi adicionada ao
-
[SERVER] Rota
/api/admin/clinics— verificar middleware de admin- O
admin-clinics.htmlusa um sistema de modal diferente (modal-overlay) do restante do sistema (modal) - Há risco de comportamento inconsistente (scroll, altura, animações)
- Fix: unificar
admin-clinics.csspara usar.modal+.modal-contentpadrão dostyle.css
- O
-
[SERVER] Autenticação via
machine_token— validar fluxo completo- O client Windows autentica com
machine_token(UUID gerado em/admin-clinics.html) - O fluxo de autenticação passa por
routes/client-auth.js(JWT gerado com chave diferente do JWT de usuários web?) - Verificar se o
JWT_SECRETusado noclient-auth.jsé o mesmo doauth.js
- O client Windows autentica com
-
[CLIENT] Testar reconexão automática após queda de rede
- O servidor aceita reconexão do mesmo
clientIde derruba o socket antigo corretamente - Verificar se o client Electron reconecta automaticamente com o
machine_tokensem intervenção do usuário
- O servidor aceita reconexão do mesmo
-
[CLIENT] Confirmar que imagens não são reenviadas em duplicata após reconexão
- O servidor já tem deduplicação por
original_filename, mas precisa de teste prático
- O servidor já tem deduplicação por
🟡 MELHORIA — UX e qualidade
-
[SERVER] Substituir
window.confirm()por modal de confirmação estilizado- Atualmente
deleteUser(),deletePatient()eresetImageToOriginal()usamconfirm()nativo do browser - Visual feio, inconsistente e bloqueante
- Fix: criar componente de modal de confirmação reutilizável no
app.js
- Atualmente
-
[SERVER] Atualizar versão no
INSTRUCOES-SERVIDOR-VPS.txt- O arquivo ainda diz
v2.0.0em vários lugares - Sistema está em
v2.1.2(última versão em produção)
- O arquivo ainda diz
-
[SERVER] Gerenciamento de usuários — adicionar edição de usuário
- Atualmente só é possível cadastrar e excluir
- Falta: alterar senha, promover/revogar admin, editar e-mail
-
[SERVER] Modal "Gerenciamento de Usuários" — tabela sem paginação
- Se houver muitos usuários, a lista não tem scroll ou paginação
flex: 1; overflow-y: autojá está no CSS mas o container pai precisa ter altura máxima definida
-
[SERVER] Página de reset (
/reset) — verificar proteção- A rota
/resetestá mapeada na sidebar sem verificação de admin no frontend - Garantir que o backend exige
is_admin = trueantes de executar o factory reset
- A rota
-
[CLIENT] Indicador visual de status de conexão na bandeja do sistema
- O client não tem feedback claro de que está conectado/desconectado do servidor
- Implementar ícone de status (verde = conectado, vermelho = sem conexão)
-
[CLIENT] Log de imagens enviadas visível na interface do client
- O usuário não consegue ver se a imagem foi enviada com sucesso sem olhar o servidor
- Mostrar histórico local das últimas N imagens enviadas com status
🔵 BACKLOG — Futuro
-
[SERVER] Implementar uso real do Wasabi (storage-config salvo, mas não aplicado)
- A rota
GET/POST /api/system/storage-configsalva as credenciais no banco - Mas o
server.jseroutes/images.jsainda salvam tudo localmente em disco - Precisaria integrar
storage.js(movido parabkp/scripts/) ao fluxo de upload
- A rota
-
[SERVER] Rate limiting nas rotas de autenticação
POST /api/auth/loginnão tem proteção contra brute force- Implementar limite de tentativas (ex: 5 por minuto por IP) via middleware
-
[SERVER] Logs estruturados
- Atualmente usa
console.logpuro - Migrar para logger estruturado (ex:
pino) com níveis (info, warn, error) para facilitar diagnóstico
- Atualmente usa
-
[SERVER] Backup automático do PostgreSQL
- Não há rotina de dump do banco configurada
- Configurar
pg_dumpagendado no cron da VPS3
-
[SERVER] Expiração de tokens JWT configurável
- Atualmente hardcoded em
auth.js - Mover para variável de ambiente
JWT_EXPIRES_IN
- Atualmente hardcoded em
-
[CLIENT] Auto-update do client Electron
- Atualmente a atualização é manual (gerar novo
.exee instalar) - Implementar verificação de versão ao iniciar e notificação de nova versão disponível
- Atualmente a atualização é manual (gerar novo
-
[CLIENT] Suporte a múltiplos sensores/câmeras no mesmo PC
- Atualmente o client monitora uma única pasta
- Adicionar suporte a múltiplas pastas configuráveis
✅ Concluído nesta sessão (27/05/2026)
- Migração MySQL/SQLite → PostgreSQL + DragonflyDB completa
- Sidebar com menus agrupados por área (principal / administrativa)
- Controle de acesso por nível (is_admin) com ocultação de elementos via CSS
- Correção de travamento de cliques ao abrir modais (style.display vs classList)
- Correção 401 Unauthorized em
/api/socket/status(restrito a admin) - Padronização de todos os modais: 90% largura, 98vh altura
- Criação da rota
GET/POST /api/system/storage-config(404 corrigido) - Modal "Gerenciamento de Usuários" corrigido (inline styles removidos)
- Separação clara de "Enviar Imagens" (upload) vs "Sincronização" (dispositivos)
- Tabela
system_configadicionada ao schema do PostgreSQL - Limpeza do
dental-server/— 39 arquivos movidos parabkp/ - Versão atual: v2.1.2