Files
DashDescomplicar/api/services/paperclip-db.ts
T
ealmeida 12f688ff7c feat: adicionar 5 novos painéis ao dashboard (MCPs, n8n, Paperclip, IA, Operações)
Expansão do dashboard de 3 para 8 páginas com dados reais do stack:
- MCPs: monitorização de 33 MCPs no gateway com ping e estado online/offline
- n8n: 14 workflows com último run, duração e falhas 24h
- Paperclip: 16 agentes operacionais, routines e issues (PostgreSQL)
- IA/Claude: visão das 3 camadas (189 skills, 72 agents, 39 MCPs, CARL)
- Operações: tickets Desk CRM por departamento + cobertura PROCs

16 ficheiros novos (3042 linhas), 3 existentes editados.
Nova dependência: pg (PostgreSQL client para Paperclip).
Audit: 0 vulnerabilidades (npm audit fix aplicado).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 20:58:48 +01:00

48 lines
1.3 KiB
TypeScript

/**
* Paperclip PostgreSQL Connection Pool
* @author Descomplicar® | @link descomplicar.pt | @copyright 2026
*/
import 'dotenv/config'
import pg from 'pg'
const { Pool } = pg
// Validação de credenciais — sem elas, pool não é criado (fallback gracioso)
const user = process.env.PAPERCLIP_DB_USER
const password = process.env.PAPERCLIP_DB_PASS
if (!user || !password) {
console.warn(
'[paperclip-db] PAPERCLIP_DB_USER ou PAPERCLIP_DB_PASS não definidos — ' +
'pool PostgreSQL não será criado. A página Paperclip usará dados de fallback.'
)
}
// Configuração do pool PostgreSQL
const pool: pg.Pool | null = (user && password)
? new Pool({
host: process.env.PAPERCLIP_DB_HOST || 'clip.descomplicar.pt',
port: parseInt(process.env.PAPERCLIP_DB_PORT || '54329', 10),
database: process.env.PAPERCLIP_DB_NAME || 'paperclip',
user,
password,
max: 5,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 10000,
})
: null
// Teste de conexão (apenas se pool configurado)
if (pool) {
pool.connect()
.then(client => {
console.log('[paperclip-db] PostgreSQL conectado com sucesso')
client.release()
})
.catch(err => {
console.error('[paperclip-db] Erro ao conectar ao PostgreSQL:', err.message)
})
}
export default pool