Files
internship_node/day6/cronJobs/shopifyCustomerSync.js
T
2025-07-15 16:18:19 +01:00

85 lines
2.3 KiB
JavaScript

// const { getUnFulfilledOrders } = require("../services/shopifyService");
const { exec } = require("child_process");
const { promisify } = require("util");
const cron = require("node-cron");
const { customer } = require("../models");
const execPromise = promisify(exec);
const API_KEY = "65c3c809c002379e3a0ea04aeaf2cf84";
const API_PASSWORD = "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";
const STORE = "roving-house.myshopify.com";
const API_VERSION = "2022-01";
// (async () => {
// const orders = await getUnFulfilledOrders();
// console.log(orders);
// })();
async function fetchShopifyCustomers() {
let nextUrl = `https://${API_KEY}:${API_PASSWORD}@${STORE}/admin/api/${API_VERSION}/customers.json?limit=250`;
const allCustomers = [];
try {
while (nextUrl) {
const curlCommand = `curl -i -X GET "${nextUrl}"`;
const { stdout } = await execPromise(curlCommand);
console.log(stdout);
// Separate headers and body
const parts = stdout.split("\r\n\r\n");
const rawHeaders = parts[0];
const body = parts.slice(1).join("\r\n\r\n");
const response = JSON.parse(body);
if (response.customers) {
allCustomers.push(...response.customers);
}
// console.log(response);
// Parse pagination header
const match = rawHeaders.match(/<([^>]+)>; rel="next"/);
nextUrl = match ? match[1] : null;
}
return allCustomers;
} catch (error) {
console.error("Error fetching customers:", error);
throw error;
}
}
async function syncCustomers() {
try {
const shopifyCustomers = await fetchShopifyCustomers();
console.log(`Found ${shopifyCustomers.length} customers from Shopify`);
for (const c of shopifyCustomers) {
await customer.findOrCreate({
where: { shopify_customer_id: c.id.toString() },
defaults: {
shopify_customer_id: c.id.toString(),
shopify_customer_email: c.email || "",
},
});
console.log(`Created customer: ${c.id}`);
}
console.log("Customer sync completed successfully");
} catch (error) {
console.error("Customer sync failed:", error);
}
}
syncCustomers();
// run every minute
// cron.schedule("* * * * *", () => {
// console.log("Running Shopify customer sync...");
// syncCustomers();
// });
// For manual testing
module.exports = { syncCustomers };