const express = require("express"); const router = express.Router(); const { getOrderById } = require("../services/tray_service"); /** * Webhook de notificações de pedidos da Tray * URL: POST /webhooks/tray/orders */ router.post("/tray/orders", async (req, res) => { try { const payload = req.body; console.log("📩 Webhook Tray recebido:", JSON.stringify(payload, null, 2)); // Aqui depende de como a Tray manda o payload: // vamos supor que venha algo como: // { order_id: 123, status: 'paid', ... } const orderId = payload.order_id || payload.id || null; if (!orderId) { console.warn("Webhook Tray sem order_id identificável"); // Mesmo assim respondemos 200 pra não gerar reenvio infinito return res.status(200).json({ received: true, ignored: true }); } // (Opcional) Buscar detalhes do pedido na Tray pra ter certeza do status atual try { const orderData = await getOrderById(orderId); console.log("🔍 Detalhes do pedido na Tray:", JSON.stringify(orderData, null, 2)); // Aqui você decide o que fazer: // - Se status for pago -> mandar e-mail // - Gravar log em arquivo // - No futuro: salvar em banco, liberar curso, etc. } catch (err) { console.error("Erro ao buscar pedido na Tray:", err.response?.data || err.message); // Mesmo assim, respondemos 200 pra não ficar em loop de reenvio } // Sempre responde 200 pra dizer "recebido" return res.status(200).json({ received: true }); } catch (err) { console.error("Erro no webhook /webhooks/tray/orders:", err); // Em webhook, na maioria dos casos ainda é melhor responder 200 // para não causar reenvios em massa return res.status(200).json({ received: true, error: "internal error" }); } }); module.exports = router;