#!/usr/bin/env bash # Миграция старой модели инвентаризации (Posted + InventoryAdjustment-движения) # в модель МойСклада: связанные ПРОВЕДЁННЫЕ Оприходование/Списание. Движения не # задваиваются (переметка), остатки остаются неизменными (проверяется в отчёте). # # ПОРЯДОК: 1) backup БД 2) dry-run (отчёт) 3) --apply (реально, под каждую орг). # # Запуск (стенд): # TOKEN= BASE=https://test.admin.food-market.kz \ # bash deploy/migrate-inventory-to-docs.sh # dry-run # ... same ... --apply # применить # # Backup стенд-БД (на prod-vm, где живёт food-market-stage-postgres): # docker exec food-market-stage-postgres pg_dump -U food_market food_market \ # | gzip > ~/stage-backup-inventory-$(date +%Y%m%d-%H%M%S).sql.gz set -euo pipefail BASE="${BASE:-https://test.admin.food-market.kz}" APPLY=0 [[ "${1:-}" == "--apply" ]] && APPLY=1 if [[ -z "${TOKEN:-}" ]]; then echo "✗ Нужен TOKEN (admin-токен организации). Миграция выполняется под текущую орг." >&2 echo " Для нескольких организаций — запустить с токеном каждой." >&2 exit 1 fi if [[ "$APPLY" -eq 1 ]]; then echo "⚠ ПЕРЕД --apply сделайте backup стенд-БД (см. шапку скрипта)." echo " Миграция переметит движения inventory → enter/loss и создаст проведённые документы." echo " Остатки по товарам остаются прежними (проверяется stockUnchanged в отчёте)." fi URL="$BASE/api/admin/inventory-migration/run?apply=$([[ $APPLY -eq 1 ]] && echo true || echo false)" echo "→ POST $URL" resp=$(curl -sk -m 60 -X POST "$URL" -H "Authorization: Bearer $TOKEN" -H "Content-Length: 0") echo "$resp" | python3 -m json.tool 2>/dev/null || echo "$resp" # Короткий итог echo "$resp" | python3 - <<'PY' 2>/dev/null || true import sys, json try: d = json.load(sys.stdin) except Exception: sys.exit(0) print(f"\nИтог: applied={d.get('applied')} candidates={d.get('candidates')} " f"migrated={d.get('migrated')} stockUnchanged={d.get('stockUnchanged')} " f"stockDiffRows={d.get('stockDiffRows')}") if d.get('applied') and not d.get('stockUnchanged'): print("✗ ВНИМАНИЕ: остатки изменились — проверьте вручную и восстановите из backup!") PY