diff --git a/src/pages/api/webhooks/order-created.ts b/src/pages/api/webhooks/order-created.ts index bdec28b..cfe5e24 100644 --- a/src/pages/api/webhooks/order-created.ts +++ b/src/pages/api/webhooks/order-created.ts @@ -4,7 +4,9 @@ import { OrderCreatedWebhookPayloadFragment, } from "@/generated/graphql"; import { saleorApp } from "@/saleor-app"; -import { sendOrderConfirmationEmail, formatPrice } from "@/lib/resend"; + +// N8N webhook URL for Order Created +const N8N_WEBHOOK_URL = "https://n8n.nodecrew.me/webhook/saleor-order-created"; export const orderCreatedWebhook = new SaleorAsyncWebhook({ name: "Order Created in Saleor", @@ -15,73 +17,29 @@ export const orderCreatedWebhook = new SaleorAsyncWebhook { - const { payload, event, baseUrl, authData } = ctx; - const order = payload.order; - - if (!order) { - console.error("No order data in webhook payload"); - return res.status(200).end(); - } + const { payload, event, authData } = ctx; - console.log(`🎉 Order #${order.number} created for customer: ${order.userEmail} (${order.languageCode || "EN"})`); + console.log(`Order created: ${payload.order?.number} for ${payload.order?.userEmail}`); + console.log(`Forwarding to N8N: ${N8N_WEBHOOK_URL}`); - const items = ((order as any).lines || []).map((line: any) => ({ - id: line.id, - name: line.variant?.product?.name || "Unknown Product", - quantity: line.quantity, - price: formatPrice(line.totalPrice?.gross?.amount || 0, line.totalPrice?.gross?.currency || "USD"), - })); - - const orderData = { - orderId: order.id, - orderNumber: order.number || "Unknown", - customerEmail: order.userEmail || "", - customerName: (order as any).shippingAddress?.firstName - ? `${(order as any).shippingAddress.firstName} ${(order as any).shippingAddress.lastName || ""}`.trim() - : order.userEmail?.split("@")[0] || "Customer", - items, - total: formatPrice((order as any).total?.gross?.amount || 0, (order as any).total?.gross?.currency || "USD"), - shippingAddress: (order as any).shippingAddress - ? `${(order as any).shippingAddress.firstName || ""} ${(order as any).shippingAddress.lastName || ""}\n${(order as any).shippingAddress.streetAddress1 || ""}\n${(order as any).shippingAddress.postalCode || ""} ${(order as any).shippingAddress.city || ""}\n${(order as any).shippingAddress.country?.country || ""}${(order as any).shippingAddress.phone ? `\nPhone: ${(order as any).shippingAddress.phone}` : ""}` - : undefined, - billingAddress: (order as any).billingAddress - ? `${(order as any).billingAddress.firstName || ""} ${(order as any).billingAddress.lastName || ""}\n${(order as any).billingAddress.streetAddress1 || ""}\n${(order as any).billingAddress.postalCode || ""} ${(order as any).billingAddress.city || ""}\n${(order as any).billingAddress.country?.country || ""}${(order as any).billingAddress.phone ? `\nPhone: ${(order as any).billingAddress.phone}` : ""}` - : undefined, - phone: (order as any).shippingAddress?.phone, - }; - - // Send admin notification try { - const adminEmails = process.env.ADMIN_EMAILS?.split(",").map(e => e.trim()).filter(e => e) || []; - - if (adminEmails.length > 0) { - await sendOrderConfirmationEmail({ - to: adminEmails, - orderData, - isAdmin: true, - }); - console.log(`✅ Admin notification sent for order #${order.number} to: ${adminEmails.join(", ")}`); + // Forward to N8N + const response = await fetch(N8N_WEBHOOK_URL, { + method: "POST", + headers: { + "Content-Type": "application/json", + "x-saleor-event": "order.created", + }, + body: JSON.stringify(payload), + }); + + if (!response.ok) { + console.error(`N8N returned ${response.status}: ${await response.text()}`); } else { - console.log("⚠️ No admin emails configured, skipping admin notification"); + console.log(`Successfully forwarded to N8N: ${response.status}`); } } catch (error) { - console.error("❌ Failed to send admin email:", error); - } - - // Send customer confirmation - try { - if (order.userEmail) { - await sendOrderConfirmationEmail({ - to: order.userEmail, - orderData, - isAdmin: false, - }); - console.log(`✅ Customer confirmation sent for order #${order.number} to: ${order.userEmail}`); - } else { - console.log("⚠️ No customer email found, skipping customer notification"); - } - } catch (error) { - console.error("❌ Failed to send customer email:", error); + console.error(`Failed to forward to N8N:`, error); } return res.status(200).end(); @@ -91,4 +49,4 @@ export const config = { api: { bodyParser: false, }, -}; \ No newline at end of file +};