/** * Утилиты для генерации конфигурации MikroTik * Устраняют дублирование кода генерации конфигурации * Поддерживает форматы: 'text' (как раньше) и 'json' (структурированные данные для API) */ const { buildNestedGatewayBlocks } = require('./helpers'); /** * Генерация конфигурации MikroTik из массива фильтров * @param {Array} filters - Массив фильтров с полями {community, gateway} * @param {object} options - { format: 'text'|'json' } * @returns {string|object} Сгенерированная конфигурация (строка или объект) */ function generateMikrotikConfig(filters, options = {}) { const { format = 'text' } = options; if (!Array.isArray(filters) || filters.length === 0) { if (format === 'json') return { gatewayGroups: {}, config: null }; return '// No filters to generate configuration'; } // Группировка фильтров по gateway const gatewayGroups = {}; filters.forEach(filter => { if (!gatewayGroups[filter.gateway]) { gatewayGroups[filter.gateway] = []; } gatewayGroups[filter.gateway].push(filter.community); }); if (format === 'json') { return { gatewayGroups, filterName: 'bgp-in-tmp', generatedAt: new Date().toISOString(), }; } let config = '// Frouting filter configuration for MikroTik 7.14+\n'; config += '// Generated automatically\n'; config += `// Date: ${new Date().toISOString()}\n\n`; config += '/routing filter bgp-in-tmp {\n'; config += buildNestedGatewayBlocks(gatewayGroups, 4); config += '}\n'; return config; } module.exports = { generateMikrotikConfig, };