← back to Designer Wallcoverings
DW-Agents/dw-agents/agent-task-orchestrator/update-product-template.js
84 lines
require('dotenv').config({ path: require('path').join(__dirname, '.env') });
const axios = require('axios');
const SHOPIFY_STORE = 'designer-laboratory-sandbox.myshopify.com';
const ACCESS_TOKEN = process.env.SHOPIFY_THEME_TOKEN;
const THEME_ID = 138914332723;
const API_VERSION = '2024-01';
const baseURL = `https://${SHOPIFY_STORE}/admin/api/${API_VERSION}`;
const variantMetafieldsSnippet = `
{%- comment -%} Variant Metafield Data for Quantity Rules {%- endcomment -%}
<div style="display:none;" class="variant-metafields">
{% for variant in product.variants %}
<div data-variant-id="{{ variant.id }}"
data-min-qty="{{ variant.metafields.custom.v_prod_quantity_order_min | default: 1 }}"
data-step-qty="{{ variant.metafields.custom.v_prods_quantity_order_units | default: 1 }}">
</div>
{% endfor %}
</div>
`;
async function updateProductTemplate() {
try {
console.log('📥 Fetching product.liquid...');
const response = await axios.get(
`${baseURL}/themes/${THEME_ID}/assets.json?asset[key]=sections/product.liquid`,
{
headers: {
'X-Shopify-Access-Token': ACCESS_TOKEN,
'Content-Type': 'application/json'
}
}
);
let productContent = response.data.asset.value;
// Check if already added
if (productContent.includes('Variant Metafield Data for Quantity Rules')) {
console.log('⚠️ Variant metafields snippet already exists');
return;
}
// Find a good insertion point - after the opening <section class="product-container">
const insertPoint = '<section class="product-container">';
if (!productContent.includes(insertPoint)) {
console.error('❌ Could not find insertion point in product template');
return;
}
productContent = productContent.replace(
insertPoint,
insertPoint + '\n' + variantMetafieldsSnippet
);
console.log('📤 Uploading updated product.liquid...');
await axios.put(
`${baseURL}/themes/${THEME_ID}/assets.json`,
{
asset: {
key: 'sections/product.liquid',
value: productContent
}
},
{
headers: {
'X-Shopify-Access-Token': ACCESS_TOKEN,
'Content-Type': 'application/json'
}
}
);
console.log('✅ Successfully updated product.liquid!');
console.log('🎯 Variant metafield data added');
} catch (error) {
console.error('❌ Error:', error.response?.data || error.message);
}
}
updateProductTemplate();