const { pool } = require('../db'); const { formatOrderRow, normalizeOrderPayload } = require('../mappers/orderMapper'); const listOrders = async () => { const result = await pool.query('SELECT * FROM orders ORDER BY id DESC'); return result.rows.map(formatOrderRow); }; const upsertOrders = async (payload) => { const client = await pool.connect(); try { await client.query('BEGIN'); const insertQuery = ` INSERT INTO orders ( cliente_nome, data_pedido, data_pedido_date, valor_pedido, produto_id, produto_descricao, quantidade, valor_unitario, pedido_id, cliente_fone, cliente_nome_fantasia, id_vendedor, nome_vendedor, marketplace, canal_venda, numero_ecommerce ) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) ON CONFLICT (pedido_id, produto_id) DO UPDATE SET cliente_nome = EXCLUDED.cliente_nome, data_pedido = EXCLUDED.data_pedido, data_pedido_date = EXCLUDED.data_pedido_date, valor_pedido = EXCLUDED.valor_pedido, produto_descricao = EXCLUDED.produto_descricao, quantidade = EXCLUDED.quantidade, valor_unitario = EXCLUDED.valor_unitario, cliente_fone = COALESCE(NULLIF(EXCLUDED.cliente_fone, ''), orders.cliente_fone), cliente_nome_fantasia = COALESCE(NULLIF(EXCLUDED.cliente_nome_fantasia, ''), orders.cliente_nome_fantasia), id_vendedor = COALESCE(NULLIF(EXCLUDED.id_vendedor, ''), orders.id_vendedor), nome_vendedor = COALESCE(NULLIF(EXCLUDED.nome_vendedor, ''), orders.nome_vendedor), marketplace = COALESCE(NULLIF(EXCLUDED.marketplace, ''), orders.marketplace), canal_venda = COALESCE(NULLIF(EXCLUDED.canal_venda, ''), orders.canal_venda), numero_ecommerce = COALESCE(NULLIF(EXCLUDED.numero_ecommerce, ''), orders.numero_ecommerce), created_at = CURRENT_TIMESTAMP `; for (const item of payload) { await client.query(insertQuery, normalizeOrderPayload(item)); } await client.query('COMMIT'); } catch (error) { await client.query('ROLLBACK'); throw error; } finally { client.release(); } }; module.exports = { listOrders, upsertOrders };