From ebc1d7c5ef7fc553d7e1ae7261c23de37f85ee6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Thu, 21 May 2026 10:07:11 -0300 Subject: [PATCH] feat: add cliente_fone column for WhatsApp marketing and safely implement database idempotency --- backend/index.js | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/backend/index.js b/backend/index.js index 46df592..55f2de0 100644 --- a/backend/index.js +++ b/backend/index.js @@ -132,13 +132,24 @@ app.post('/api/data', authenticateAPIKey, async (req, res) => { const insertQuery = ` INSERT INTO orders ( cliente_nome, data_pedido, valor_pedido, - produto_id, produto_descricao, quantidade, valor_unitario, pedido_id - ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) + produto_id, produto_descricao, quantidade, valor_unitario, pedido_id, cliente_fone + ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) + ON CONFLICT (pedido_id, produto_id) DO UPDATE SET + cliente_nome = EXCLUDED.cliente_nome, + data_pedido = EXCLUDED.data_pedido, + valor_pedido = EXCLUDED.valor_pedido, + produto_descricao = EXCLUDED.produto_descricao, + quantidade = EXCLUDED.quantidade, + valor_unitario = EXCLUDED.valor_unitario, + cliente_fone = EXCLUDED.cliente_fone, + created_at = CURRENT_TIMESTAMP `; for (const item of payload) { // Handle potential missing fields gracefully - const orderId = item.id || item.ID_Pedido || (item.json && item.json.body && item.json.body.id) || ''; + const fallbackId = `${item.Nome_Cliente}_${item.Data_Pedido}_${item.Valor_Pedido}`; + const orderId = item.id || item.ID_Pedido || (item.json && item.json.body && item.json.body.id) || fallbackId; + const fone = item.Fone_Cliente || item.fone || item.celular || ''; const values = [ item.Nome_Cliente || 'Unknown', @@ -148,7 +159,8 @@ app.post('/api/data', authenticateAPIKey, async (req, res) => { item.Descricao_Produto || '', parseInt(item.Quantidade) || 0, parseFloat(item.Valor_Unitario) || 0, - String(orderId) + String(orderId), + String(fone) ]; await client.query(insertQuery, values); }