fix(clinics): 3 bugs de unicidade e wipe corrigidos
continuous-integration/webhook Deploy concluído (VPS4)

1. admin-clinics.js — bloqueia cadastro de clinic_name + pc_name duplicados:
   Antes só validava email único. Agora verifica se já existe dispositivo com
   a mesma combinação clinic_name + pc_name (case-insensitive). Sem isso, dois
   PCs com mesmo nome na mesma clínica sobrescreveriam arquivos um do outro
   no Wasabi (caminho idêntico).

2. admin-clinics.js — wipe usava client_name ao invés de clinic_name no banco:
   'DELETE FROM images WHERE client_name = clinic_name' deletava o conjunto
   errado de imagens (client_name é o nome do PC, não da clínica). Corrigido
   para 'WHERE clinic_name = $1'. Wasabi continua usando sanitize(clinic_name)/
   como prefixo (correto).

3. server.js — verificação de duplicata no connect incluía clinicName:
   O check usava só clientName (pc_name), causando falso positivo: dois PCs
   de clínicas diferentes com o mesmo nome (ex: ambos "PC-SALA-1") — o segundo
   era desconectado. Agora verifica clinicName + clientName juntos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-05-31 15:57:37 +02:00
parent 32ac1f119f
commit b6a1d3d68e
2 changed files with 38 additions and 16 deletions
+8 -5
View File
@@ -865,11 +865,14 @@ io.on('connection', (socket) => {
// Se autenticado via machine_token, o pc_name do cadastro é autoritativo
const clientName = (socket.user?.pcName || data.name || 'PC não identificado').trim();
const clientId = data.clientId || '';
// 1. Validar unicidade em relação aos clientes já conectados
const duplicate = connectedClients.find(c =>
c.name.toLowerCase() === clientName.toLowerCase() &&
const clientId = data.clientId || '';
const clinicName = socket.user?.clinicName || (data.clinicName || '').trim() || 'Clínica não identificada';
// 1. Validar unicidade: mesmo PC da mesma clínica já conectado (clientId diferente)
// Usa clinicName + clientName para não bloquear PCs homônimos de clínicas diferentes.
const duplicate = connectedClients.find(c =>
c.name.toLowerCase() === clientName.toLowerCase() &&
c.clinicName.toLowerCase() === clinicName.toLowerCase() &&
c.clientId !== clientId
);