Condicoes e Transformacao de Dados
Aula 3 de 6
IF / Loop / Switch Nodes
Nodes de controle de fluxo permitem rotear dados baseado em condicoes.
echo "=== IF Node ==="
echo ""
echo "Funcao: Roteia dados baseado em condicao"
echo ""
echo "Configuracao:"
echo " Condition: Value1 Operator Value2"
echo " Operadores: =, !=, >, <, >=, <=, contains, startsWith"
echo ""
echo "Saidas:"
echo " true (output 1) - dados que atendem condicao"
echo " false (output 2) - dados que nao atendem"
echo "=== Switch Node ==="
echo ""
echo "Funcao: Roteia dados para multiplos caminhos"
echo ""
echo "Configuracao:"
echo " Mode: Expression / Mapping"
echo " Routing: Value -> Output N"
echo ""
echo "Exemplo: Prioridade de ticket"
echo " 'baixa' -> Output 1 (email auto)"
echo " 'media' -> Output 2 (notificar suporte)"
echo " 'alta' -> Output 3 (notificar supervisor)"
echo " 'critica' -> Output 4 (notificar diretor)"
echo "=== SplitInBatches ==="
echo ""
echo "Funcao: Processa dados em lotes"
echo ""
echo "Configuracao:"
echo " Batch Size: numero de items por lote"
echo ""
echo "Uso tipico:"
echo " - Processar 10k registros em lotes de 100"
echo " - Evitar timeout em APIs externas"
echo " - Respeitar rate limits"
Code Node (JavaScript/Python)
echo "=== Code Node ==="
echo ""
echo "Linguagens suportadas: JavaScript (padrao) e Python"
echo ""
echo "Estrutura do Item:"
echo " item.json - dados estruturados (objeto)"
echo " item.binary - dados binarios (imagens, PDFs)"
echo ""
echo "Entrada:"
echo " $input.all() - todos os items do node anterior"
echo " $input.first() - primeiro item apenas"
echo " $input.item - item atual (em loop)"
echo ""
echo "Saida: Array de objetos com propriedade 'json'"
echo "=== Exemplos JavaScript ==="
echo ""
echo "Transformar dados:"
echo "return items.map(item => ({"
echo " json: {"
echo " nome: item.json.name.toUpperCase(),"
echo " email: item.json.email.toLowerCase()"
echo " }"
echo "}));"
echo ""
echo "Filtrar items:"
echo "return items.filter(item =>"
echo " item.json.age >= 18"
echo ").map(item => ({ json: item.json }));"
echo ""
echo "Enriquecer com dados externos:"
echo "const response = await fetch('https://api.exemplo.com/dados');"
echo "const data = await response.json();"
echo "return items.map(item => ({"
echo " json: { ...item.json, ...data }"
echo "}));"
echo "=== Exemplos Python ==="
echo ""
echo "from datetime import datetime"
echo ""
echo "result = []"
echo "for item in items:"
echo " data = item['json']"
echo " data['processed_at'] = datetime.now().isoformat()"
echo " result.append({'json': data})"
echo ""
echo "return result"
Set Node
echo "=== Set Node ==="
echo ""
echo "Funcao: Adicionar, modificar ou remover campos"
echo ""
echo "Modos:"
echo " - Manual Mapping: Definir campos manualmente"
echo " - JSON to JSON: Transformar estrutura JSON"
echo " - Raw: Expressao customizada"
echo ""
echo "Operacoes:"
echo " - Set: Adicionar/substituir valor"
echo " - Delete: Remover campo"
echo " - Move: Mover campo de lugar"
echo ""
echo "Exemplo:"
echo " Input: { name: \"Joao\", idade: 30 }"
echo " Set: { status: \"ativo\" }"
echo " Output: { name: \"Joao\", idade: 30, status: \"ativo\" }"
Item Lists
echo "=== Item Lists (Transform) ==="
echo ""
echo "Nodes uteis para processamento de listas:"
echo ""
echo "Aggregate: Agrupa items em um unico item"
echo " Ex: [{a:1}, {a:2}] -> [{values: [{a:1}, {a:2}]}]"
echo ""
echo "Sort: Ordena items por campo"
echo " Ex: Sort by 'name' ascending"
echo ""
echo "Limit: Limita numero de items"
echo " Ex: Primeiros 10 items"
echo ""
echo "Remove Duplicates: Remove items duplicados"
echo " Ex: Remove duplicados por 'email'"
echo ""
echo "Summarize: Agregacoes (sum, avg, count, min, max)"
echo " Ex: Soma de 'valor' por 'categoria'"
Lab: Pipeline de Dados Condicional
cat > pipeline_condicional.sh << 'EOF'
echo "=== Lab: Pipeline de Processamento de Pedidos ==="
echo "Workflow: Processar Pedidos"
echo ""
echo "1. Trigger: Webhook POST /pedidos"
echo " Body: { pedidos: [{ id,valor,pais }] }"
echo ""
echo "2. Code Node: Validar payload"
echo " if (!body.pedidos) throw 'Payload invalido'"
echo " return items"
echo ""
echo "3. IF Node: Valor > 1000?"
echo " Verdadeiro -> Output 1 (prioritario)"
echo " Falso -> Output 2 (normal)"
echo ""
echo "4. [Output 1] Slack Node: Notificar vendas"
echo " 'Pedido R\$ {valor} recebido - prioritario'"
echo ""
echo "5. [Output 2] Gmail Node: Email confirmacao"
echo " 'Pedido recebido em processamento'"
echo ""
echo "6. Set Node: Marcar status"
echo " status = processado"
echo ""
echo "7. HTTP Request: Enviar para ERP"
echo " POST https://api.erp.com/pedidos"
echo ""
echo "Flow completo:"
echo " Webhook -> Code (valida) -> IF"
echo " |-> (true) Slack ->"
echo " |-> (false) Gmail ->"
echo " Set -> HTTP Request -> Fim"
EOF
Dominar IF, Code e Set nodes significa dominar 80% dos casos de automacao. A logica condicional e o cerebro de qualquer workflow.