feat(rx): multi-tenant por clinica_id + página /clients de clientes ativos

- clinica_id (tenant do scoreodonto, clinicas.id) como eixo de isolamento em
  clinics_devices e images (+índices); clinic_name vira rótulo legível.
- Cadastro de device, socket (machine_token) e uploads (direct + legado) gravam clinica_id.
- Listagens (/images, /patients, /by-patient, /unique-clinics) filtram por clinica_id.
- /clients: lista clientes Windows ativos (inclui autenticados sem client-identify),
  tempo real + polling, exibe a clínica.
- send-image marcado como legado (client real usa Direct Upload).

Inclui trabalho de dev acumulado no working tree (não havia commits desde origin/main).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
VPS 4 Deploy Agent
2026-06-12 16:17:09 +02:00
parent d9182cff09
commit 31022c6a6f
55 changed files with 6773 additions and 1350 deletions
+18 -4
View File
@@ -6,14 +6,28 @@ export default defineConfig({
plugins: [react()],
// Em dev, faz proxy da API para o backend Express
server: {
cors: true,
hmr: {
host: 'dev.rx.scoreodonto.com',
clientPort: 443,
protocol: 'wss',
overlay: false
},
proxy: {
'/api': 'http://localhost:3000',
'/api': {
target: 'http://127.0.0.1:3000',
configure: (proxy) => {
proxy.on('proxyRes', (proxyRes) => {
proxyRes.headers['access-control-allow-origin'] = '*';
});
}
},
'/socket.io': {
target: 'http://localhost:3000',
target: 'http://127.0.0.1:3000',
ws: true
},
'/uploads': 'http://localhost:3000',
'/updates': 'http://localhost:3000'
'/uploads': 'http://127.0.0.1:3000',
'/updates': 'http://127.0.0.1:3000'
}
},
build: {