← back to Koroseal Goodrich Audit

phase1.sh

32 lines

#!/bin/bash
# Phase 1: reactivate 87 archived-but-current Koroseal (DWK canonical). Activate + ensure image
# (add de-thumbnailed Goodrich image only if ours missing) + Size:Sample @ $4.25 + publish.
set -uo pipefail
TOKEN="$(grep '^SHOPIFY_ADMIN_TOKEN=' ~/Projects/secrets-manager/.env | cut -d= -f2)"
BASE="https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10"
H="X-Shopify-Access-Token: $TOKEN"
RUN=~/Projects/koroseal-goodrich-audit/phase1_run.tsv
put(){ curl -s -o /tmp/p1.json -w "%{http_code}" -X PUT "$BASE/products/$1.json" -H "$H" -H "Content-Type: application/json" -d "$2"; }
while IFS=$'\t' read -r mfr pid dwsku has img; do
  [ -z "${pid:-}" ] && continue
  put "$pid" "{\"product\":{\"id\":$pid,\"status\":\"active\"}}" >/dev/null
  # image only if missing
  if [ "$has" != "t" ]; then
    full=$(echo "$img" | sed -E 's/-[0-9]+x[0-9]+\.jpg$/.jpg/')
    code=$(curl -s -o /dev/null -w "%{http_code}" -I "$full"); [ "$code" != "200" ] && full="$img"
    curl -s -X POST "$BASE/products/$pid/images.json" -H "$H" -H "Content-Type: application/json" \
      -d "{\"image\":{\"src\":\"$full\",\"position\":1,\"alt\":\"$mfr Koroseal wallcovering\"}}" >/dev/null
    imgnote="+img"
  else imgnote="hasimg"; fi
  # variant -> Size:Sample @ 4.25
  read -r optid varid < <(curl -s "$BASE/products/$pid.json?fields=options,variants" -H "$H" | python3 -c 'import sys,json;p=json.load(sys.stdin)["product"];print(p["options"][0]["id"],p["variants"][0]["id"])')
  vbody=$(python3 -c "import json;print(json.dumps({'product':{'id':$pid,'options':[{'id':$optid,'name':'Size'}],'variants':[{'id':$varid,'option1':'Sample','price':'4.25','sku':'$dwsku-Sample','inventory_management':'shopify','inventory_policy':'continue','taxable':True,'requires_shipping':True}]}}))")
  vr=$(put "$pid" "$vbody")
  # publish Online Store
  pr=$(put "$pid" "{\"product\":{\"id\":$pid,\"published\":true,\"published_scope\":\"global\"}}")
  vc=$(python3 -c 'import json;v=json.load(open("/tmp/p1.json")).get("product",{}).get("variants",[{}])[0];print(v.get("price"),v.get("sku"))' 2>/dev/null)
  echo "[$mfr] $imgnote variantHTTP=$vr publishHTTP=$pr -> $vc"
  sleep 0.7
done < "$RUN"
echo "PHASE1 DONE"