136 lines
6.9 KiB
Markdown
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**
|