'use strict' /** * nwTeamsController.js — Proxy de sectors/teams do WA-Inbox * * GET /api/admin/nw-teams * Retorna a árvore de setores + equipes cadastrados no WA-Inbox, * usando a integration_key do par já configurado em plugin_configs. * * PATCH /api/admin/accounts/:id * Estende o updateAccount para aceitar nw_team_id e nw_sector_id. * (implementado diretamente em equipeController.js) */ const { queryOne, execute } = require('../database/postgres') // Cache em memória: evita hammering no WA-Inbox a cada request let _cache = null let _cacheAt = 0 const CACHE_TTL_MS = 60_000 async function getNwConfig(tenantId) { const rows = await require('../database/postgres').query( `SELECT key, value FROM plugin_configs WHERE plugin_id = 'newwhats'` ) const cfg = {} for (const r of rows) cfg[r.key] = r.value return cfg } async function listNwTeams(req, res) { try { const now = Date.now() if (_cache && now - _cacheAt < CACHE_TTL_MS) { return res.json(_cache) } const cfg = await getNwConfig() if (!cfg.newwhats_url || !cfg.integration_key) { return res.json([]) } const baseUrl = cfg.newwhats_url.replace(/\/$/, '') const headers = { 'x-nw-key': cfg.integration_key, 'Content-Type': 'application/json' } // Busca setores const sectorsResp = await fetch(`${baseUrl}/api/sectors`, { headers }) if (!sectorsResp.ok) { console.warn('[nwTeams] falha ao buscar sectors:', sectorsResp.status) return res.json([]) } const sectors = await sectorsResp.json() // Busca teams de cada setor em paralelo const tree = await Promise.all( sectors.map(async (sector) => { try { const teamsResp = await fetch(`${baseUrl}/api/sectors/${sector.id}/teams`, { headers }) const teams = teamsResp.ok ? await teamsResp.json() : [] return { ...sector, teams } } catch { return { ...sector, teams: [] } } }) ) _cache = tree _cacheAt = now res.json(tree) } catch (e) { console.error('[nwTeams] listNwTeams:', e) res.status(500).json({ error: 'Erro ao buscar teams do WA-Inbox' }) } } // Invalida o cache (chamado quando um sector/team é criado/editado no WA-Inbox) function invalidateCache() { _cache = null _cacheAt = 0 } module.exports = { listNwTeams, invalidateCache }