Files
rx.scoreodonto.com/TAREFAS.md
T
VPS 4 Builder e683558b6c
continuous-integration/webhook Deploy concluido (rx.scoreodonto.com)
fix: unifica sistema de modais no admin-clinics e usa JWT_SECRET global no client-auth
2026-05-27 02:39:45 +02:00

136 lines
6.9 KiB
Markdown

# 🦷 Lista de Tarefas — rx.scoreodonto.com
> Última atualização: 27/05/2026
---
## 🔴 CRÍTICO — Produção em risco
- [x] **[SERVER] JWT_SECRET fixo no docker-compose.yml**
- Atualmente usa fallback hardcoded `'sua-chave-secreta-alterar-em-producao'` no `auth.js`
- O valor correto **existe no `.env` da VPS4** mas **não está no `docker-compose.yml`** da VPS1
- Impacto: toda vez que o container reinicia, todos os tokens JWT de usuários web expiram
- Fix: adicionar `- JWT_SECRET=<valor>` na seção `environment:` do `docker-compose.yml`
- [x] **[SERVER] `enabled = 1` — sintaxe MySQL em queries PostgreSQL**
- Arquivos afetados:
- `server.js` linhas 750 e 874
- `routes/images.js` linhas 142 e 308
- Em PostgreSQL, booleanos são `true/false`, não `1/0`
- Pode retornar resultados errados ou quebrar queries silenciosamente
- Fix: substituir `enabled = 1` por `enabled = true` em todas as ocorrências
- [x] **[SERVER] CORS aberto com `*` em produção**
- `ALLOWED_ORIGINS` não está definido no `docker-compose.yml`
- Resultado: Socket.IO aceita conexões de qualquer origem
- Fix: adicionar `- ALLOWED_ORIGINS=https://rx.scoreodonto.com` no `docker-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-config` retorna estrutura vazia (não quebra, mas Wasabi não funciona)
- [x] **[SERVER] Rota `/api/admin/clinics` — verificar middleware de admin**
- O `admin-clinics.html` usa 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.css` para usar `.modal` + `.modal-content` padrão do `style.css`
- [x] **[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_SECRET` usado no `client-auth.js` é o mesmo do `auth.js`
- [ ] **[CLIENT] Testar reconexão automática após queda de rede**
- O servidor aceita reconexão do mesmo `clientId` e derruba o socket antigo corretamente
- Verificar se o client Electron reconecta automaticamente com o `machine_token` sem intervenção do usuário
- [ ] **[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
---
## 🟡 MELHORIA — UX e qualidade
- [ ] **[SERVER] Substituir `window.confirm()` por modal de confirmação estilizado**
- Atualmente `deleteUser()`, `deletePatient()` e `resetImageToOriginal()` usam `confirm()` nativo do browser
- Visual feio, inconsistente e bloqueante
- Fix: criar componente de modal de confirmação reutilizável no `app.js`
- [ ] **[SERVER] Atualizar versão no `INSTRUCOES-SERVIDOR-VPS.txt`**
- O arquivo ainda diz `v2.0.0` em vários lugares
- Sistema está em `v2.1.2` (última versão em produção)
- [ ] **[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: auto` já está no CSS mas o container pai precisa ter altura máxima definida
- [ ] **[SERVER] Página de reset (`/reset`) — verificar proteção**
- A rota `/reset` está mapeada na sidebar sem verificação de admin no frontend
- Garantir que o backend exige `is_admin = true` antes de executar o factory reset
- [ ] **[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-config` salva as credenciais no banco
- Mas o `server.js` e `routes/images.js` ainda salvam tudo localmente em disco
- Precisaria integrar `storage.js` (movido para `bkp/scripts/`) ao fluxo de upload
- [ ] **[SERVER] Rate limiting nas rotas de autenticação**
- `POST /api/auth/login` nã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.log` puro
- Migrar para logger estruturado (ex: `pino`) com níveis (info, warn, error) para facilitar diagnóstico
- [ ] **[SERVER] Backup automático do PostgreSQL**
- Não há rotina de dump do banco configurada
- Configurar `pg_dump` agendado 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`
- [ ] **[CLIENT] Auto-update do client Electron**
- Atualmente a atualização é manual (gerar novo `.exe` e instalar)
- Implementar verificação de versão ao iniciar e notificação de nova versão disponível
- [ ] **[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)
- [x] Migração MySQL/SQLite → PostgreSQL + DragonflyDB completa
- [x] Sidebar com menus agrupados por área (principal / administrativa)
- [x] Controle de acesso por nível (is_admin) com ocultação de elementos via CSS
- [x] Correção de travamento de cliques ao abrir modais (style.display vs classList)
- [x] Correção 401 Unauthorized em `/api/socket/status` (restrito a admin)
- [x] Padronização de todos os modais: 90% largura, 98vh altura
- [x] Criação da rota `GET/POST /api/system/storage-config` (404 corrigido)
- [x] Modal "Gerenciamento de Usuários" corrigido (inline styles removidos)
- [x] Separação clara de "Enviar Imagens" (upload) vs "Sincronização" (dispositivos)
- [x] Tabela `system_config` adicionada ao schema do PostgreSQL
- [x] Limpeza do `dental-server/` — 39 arquivos movidos para `bkp/`
- [x] Versão atual: **v2.1.2**