{
  "id":"port14BoberdooIngestion","name":"Portfolio 14 - Boberdoo to BigQuery Lead Event Ingestion","active":false,
  "nodes":[
    {"parameters":{"httpMethod":"POST","path":"portfolio-boberdoo-event","responseMode":"responseNode","options":{}},"webhookId":"f1410000-0000-4000-8000-000000000098","id":"f1410000-0000-4000-8000-000000000001","name":"Boberdoo Event Webhook","type":"n8n-nodes-base.webhook","typeVersion":2.1,"position":[-720,0]},
    {"parameters":{"jsCode":"const i=$json.body??$json; const required=['eventId','leadId','eventType','eventAt','vertical','sourceCurrency']; const missing=required.filter(k=>i[k]===undefined||i[k]===null||i[k]===''); if(missing.length)return[{json:{valid:false,error:`Missing Boberdoo fields: ${missing.join(', ')}`}}]; if(!['created','sold','refunded'].includes(i.eventType))return[{json:{valid:false,error:'eventType must be created, sold, or refunded'}}]; return[{json:{valid:true,...i,idempotencyKey:`boberdoo:${i.eventId}`}}];"},"id":"f1410000-0000-4000-8000-000000000002","name":"Validate and Normalize","type":"n8n-nodes-base.code","typeVersion":2,"position":[-500,0]},
    {"parameters":{"conditions":{"options":{"caseSensitive":true,"typeValidation":"strict","version":2},"conditions":[{"id":"f1410000-0000-4000-8000-000000000003","leftValue":"={{ $json.valid }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}},"id":"f1410000-0000-4000-8000-000000000004","name":"Valid Event?","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[-280,0]},
    {"parameters":{"method":"POST","url":"http://127.0.0.1:8787/roi/lead-events","sendBody":true,"contentType":"raw","rawContentType":"application/json","body":"={{ JSON.stringify($json) }}","options":{"timeout":10000}},"id":"f1410000-0000-4000-8000-000000000005","name":"Insert BigQuery Event","type":"n8n-nodes-base.httpRequest","typeVersion":4.2,"position":[-40,-100],"retryOnFail":true,"maxTries":3,"waitBetweenTries":1000,"onError":"continueRegularOutput"},
    {"parameters":{"conditions":{"options":{"caseSensitive":true,"typeValidation":"strict","version":2},"conditions":[{"id":"f1410000-0000-4000-8000-000000000006","leftValue":"={{ Boolean($json.rowId) }}","rightValue":true,"operator":{"type":"boolean","operation":"true","singleValue":true}}],"combinator":"and"},"options":{}},"id":"f1410000-0000-4000-8000-000000000007","name":"Warehouse Write Succeeded?","type":"n8n-nodes-base.if","typeVersion":2.2,"position":[200,-100]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:true,status:'warehouse-event-written',event:$json}) }}","options":{"responseCode":201}},"id":"f1410000-0000-4000-8000-000000000008","name":"Acknowledge Event","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[440,-180]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:false,status:'warehouse-write-failed',retryable:true,error:$json.error?.message||$json.message||'BigQuery write failed'}) }}","options":{"responseCode":503}},"id":"f1410000-0000-4000-8000-000000000009","name":"Return Retryable Failure","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[440,0]},
    {"parameters":{"respondWith":"json","responseBody":"={{ JSON.stringify({ok:false,status:'invalid-boberdoo-event',error:$json.error}) }}","options":{"responseCode":400}},"id":"f1410000-0000-4000-8000-000000000010","name":"Return Invalid Event","type":"n8n-nodes-base.respondToWebhook","typeVersion":1.4,"position":[-40,160]}
  ],
  "connections":{"Boberdoo Event Webhook":{"main":[[{"node":"Validate and Normalize","type":"main","index":0}]]},"Validate and Normalize":{"main":[[{"node":"Valid Event?","type":"main","index":0}]]},"Valid Event?":{"main":[[{"node":"Insert BigQuery Event","type":"main","index":0}],[{"node":"Return Invalid Event","type":"main","index":0}]]},"Insert BigQuery Event":{"main":[[{"node":"Warehouse Write Succeeded?","type":"main","index":0}]]},"Warehouse Write Succeeded?":{"main":[[{"node":"Acknowledge Event","type":"main","index":0}],[{"node":"Return Retryable Failure","type":"main","index":0}]]}},
  "settings":{"executionOrder":"v1"},"pinData":{},"versionId":"f1410000-0000-4000-8000-000000000099","meta":{"templateCredsSetupCompleted":true},"tags":[]
}
