← 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();