import { Router } from 'express'; import { pool } from '../db.js'; import { config } from '../config.js'; import { requireAuth, canAccessDomain } from '../middleware/auth.js'; import { SyncService } from '../services/sync.js'; import { audit } from '../services/audit.js'; export const domainsRouter = Router(); domainsRouter.use(requireAuth); const sync = new SyncService(); domainsRouter.post('/resync', async (req, res) => { const result = await sync.syncFromDms(); await audit(req.user!.email, 'domains.resync', 'node', config.nodeName, result, req.ip); res.json(result); }); domainsRouter.get('/', async (req, res) => { if (req.query.resync === 'true') await sync.syncFromDms(); const result = await pool.query( `SELECT d.*, COUNT(m.email_address) FILTER (WHERE m.status='active')::int AS active_mailboxes, COALESCE(SUM(m.used_bytes) FILTER (WHERE m.status='active'),0)::bigint AS used_bytes FROM domains d LEFT JOIN mailboxes m ON m.domain=d.domain WHERE d.current_node=$1 GROUP BY d.id ORDER BY d.domain`, [config.nodeName], ); const rows = result.rows.filter((r) => canAccessDomain(req.user!, r.domain)); res.json(rows); });