← back to Fb21 Mfr Images

apply_fb21.sh

76 lines

#!/bin/bash
# FB21 (Koroseal Fibre) — activate 18 + swap primary image on 17 (FB21-05 keeps its image)
# Steve-approved in-session. Live store: designer-laboratory-sandbox.myshopify.com
set -uo pipefail
TOKEN="$(grep '^SHOPIFY_ADMIN_TOKEN=' ~/Projects/secrets-manager/.env | cut -d= -f2)"
STORE="designer-laboratory-sandbox.myshopify.com"
VER="2024-10"
BASE="https://$STORE/admin/api/$VER"
H_TOK="X-Shopify-Access-Token: $TOKEN"
IMGBASE="https://www.goodrichglobal.com/singapore/wp-content/uploads/2024/11"
NO_IMG="FB21-05"   # 404 on Goodrich — activate only, keep existing image

# sku:productid  (one per line)
PAIRS="FB21-01:7766998286387
FB21-02:7766998450227
FB21-03:7766998482995
FB21-04:7766998515763
FB21-05:7766998548531
FB21-06:7766998712371
FB21-07:7766998745139
FB21-08:7766998253619
FB21-09:7766998908979
FB21-10:7766998941747
FB21-11:7766999105587
FB21-12:7766999138355
FB21-13:7766999334963
FB21-14:7766999498803
FB21-15:7766999531571
FB21-16:7766999695411
FB21-17:7766999728179
FB21-18:7766999892019"

echo "$PAIRS" | while IFS=: read -r sku id; do
  [ -z "$sku" ] && continue
  # 1) status -> active
  st=$(curl -s -o /tmp/fb_st.json -w "%{http_code}" -X PUT "$BASE/products/$id.json" \
        -H "$H_TOK" -H "Content-Type: application/json" \
        -d "{\"product\":{\"id\":$id,\"status\":\"active\"}}")
  echo "[$sku] status->active HTTP $st"
  sleep 0.5

  if [ "$sku" = "$NO_IMG" ]; then
    echo "[$sku] image: SKIP (no mfr image on Goodrich; keeping existing)"
    continue
  fi

  # 2) capture existing image ids
  old_ids=$(curl -s "$BASE/products/$id/images.json" -H "$H_TOK" | python3 -c 'import sys,json
try:
  d=json.load(sys.stdin); print(" ".join(str(i["id"]) for i in d.get("images",[])))
except Exception: print("")')

  # 3) add mfr image at position 1
  src="$IMGBASE/$sku.jpg"
  new=$(curl -s -X POST "$BASE/products/$id/images.json" -H "$H_TOK" -H "Content-Type: application/json" \
        -d "{\"image\":{\"src\":\"$src\",\"position\":1,\"alt\":\"$sku Koroseal Fibre wallcovering\"}}")
  new_id=$(echo "$new" | python3 -c 'import sys,json
try:
  d=json.load(sys.stdin); print(d.get("image",{}).get("id",""))
except Exception: print("")')
  if [ -z "$new_id" ]; then
    echo "[$sku] image POST FAILED — keeping old images. resp: $(echo "$new" | head -c 200)"
    continue
  fi
  echo "[$sku] new image id=$new_id posted (old: ${old_ids:-none})"
  sleep 1

  # 4) delete old images
  for oid in $old_ids; do
    dc=$(curl -s -o /dev/null -w "%{http_code}" -X DELETE "$BASE/products/$id/images/$oid.json" -H "$H_TOK")
    echo "[$sku]   deleted old image $oid HTTP $dc"
    sleep 0.3
  done
done
echo "DONE"