Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
Docker API / Build + push API (push) Waiting to run
Docker API / Deploy API on stage (push) Blocked by required conditions
ShowcaseSeeder — чистые данные для публичных скриншотов: 200 товаров без Article-маркеров, реальные EAN-13, боевой формат номеров документов (П-2026-…, ПР-2026-…), 3 поставщика, счета (касса/Kaspi/эквайринг), сотрудники с нормальными именами, ~30 дней продаж, приёмки, 2 списания, 1 завершённая инвентаризация. Без e2e/test/Y1/DEMO в видимых данных. - POST /api/admin/seed-demo?showcase=1 (DemoSeedController) - повторяемый deploy/showcase-seed.sh (signup + seed, идемпотентно) - YearDemoSeeder: data-массивы → internal для переиспользования Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
75 lines
3.9 KiB
Bash
Executable file
75 lines
3.9 KiB
Bash
Executable file
#!/usr/bin/env bash
|
||
# Витринная организация «Магазин у дома» на стенде + наполнение правдоподобными
|
||
# данными для скриншотов публичного сайта (ShowcaseSeeder). Повторяемый и
|
||
# идемпотентный: при повторном запуске переиспользует организацию и не задваивает
|
||
# данные (сидер проверяет наличие товаров).
|
||
#
|
||
# Требует задеплоенного на стенд API с эндпоинтом POST /api/admin/seed-demo?showcase=1
|
||
# (см. src/food-market.api/Seed/ShowcaseSeeder.cs). Деплой стенда: ~/deploy-stage.sh.
|
||
#
|
||
# Запуск:
|
||
# bash deploy/showcase-seed.sh
|
||
# BASE=https://test.admin.food-market.kz bash deploy/showcase-seed.sh
|
||
#
|
||
# На выходе печатает orgId и e-mail владельца (их же использует scripts/screenshots.mjs
|
||
# через SHOWCASE_EMAIL/SHOWCASE_ORG).
|
||
set -euo pipefail
|
||
|
||
BASE="${BASE:-https://test.admin.food-market.kz}"
|
||
EMAIL="${SHOWCASE_EMAIL:-vladelec@magazin-u-doma.kz}"
|
||
PASSWORD="${SHOWCASE_PASSWORD:-MagazinUDoma2026!}"
|
||
ORGNAME="${SHOWCASE_ORG:-Магазин у дома}"
|
||
PHONE="+77015550102"
|
||
|
||
j() { python3 -c 'import sys,json;d=json.load(sys.stdin);print(d.get(sys.argv[1],""))' "$1"; }
|
||
|
||
echo "→ стенд: $BASE организация: «$ORGNAME» владелец: $EMAIL"
|
||
|
||
# 1. Регистрация организации (идемпотентно: если e-mail занят — просто логинимся).
|
||
echo "→ signup…"
|
||
signup=$(curl -sk -m 60 -X POST "$BASE/api/auth/signup" \
|
||
-H 'Content-Type: application/json' \
|
||
-d "{\"email\":\"$EMAIL\",\"password\":\"$PASSWORD\",\"organizationName\":\"$ORGNAME\",\"phone\":\"$PHONE\",\"plan\":\"start\"}" \
|
||
-w '\n%{http_code}')
|
||
code=$(echo "$signup" | tail -1)
|
||
body=$(echo "$signup" | sed '$d')
|
||
if [[ "$code" == "200" ]]; then
|
||
echo " создана новая организация."
|
||
elif echo "$body" | grep -q "уже зарегистрирован"; then
|
||
echo " организация уже существует — переиспользуем."
|
||
elif [[ "$code" == "429" ]]; then
|
||
echo " rate-limit на signup, ждём 15с и повторяем…"
|
||
sleep 15
|
||
curl -sk -m 60 -X POST "$BASE/api/auth/signup" -H 'Content-Type: application/json' \
|
||
-d "{\"email\":\"$EMAIL\",\"password\":\"$PASSWORD\",\"organizationName\":\"$ORGNAME\",\"phone\":\"$PHONE\",\"plan\":\"start\"}" >/dev/null || true
|
||
else
|
||
echo " signup вернул $code: $body" >&2
|
||
echo " (продолжаем — возможно, организация уже заведена)"
|
||
fi
|
||
|
||
# 2. Токен владельца.
|
||
echo "→ получаем токен…"
|
||
TOKEN=$(curl -sk -m 60 -X POST "$BASE/connect/token" \
|
||
-H 'Content-Type: application/x-www-form-urlencoded' \
|
||
--data-urlencode 'grant_type=password' \
|
||
--data-urlencode "username=$EMAIL" \
|
||
--data-urlencode "password=$PASSWORD" \
|
||
--data-urlencode 'client_id=food-market-web' \
|
||
--data-urlencode 'scope=openid profile email roles api offline_access' \
|
||
| j access_token)
|
||
if [[ -z "$TOKEN" ]]; then echo "✗ не удалось получить токен" >&2; exit 1; fi
|
||
|
||
ORGID=$(curl -sk -m 30 "$BASE/api/me" -H "Authorization: Bearer $TOKEN" | j orgId)
|
||
echo " orgId=$ORGID"
|
||
|
||
# 3. Наполнение витринными данными.
|
||
echo "→ seed showcase (товары/продажи/счета/сотрудники)…"
|
||
resp=$(curl -sk -m 300 -X POST "$BASE/api/admin/seed-demo?showcase=1" \
|
||
-H "Authorization: Bearer $TOKEN" -H 'Content-Length: 0')
|
||
echo "$resp" | python3 -m json.tool 2>/dev/null || echo "$resp"
|
||
|
||
echo
|
||
echo "✓ готово. Для скриншотов:"
|
||
echo " SHOWCASE_EMAIL=$EMAIL SHOWCASE_PASSWORD=*** node src/food-market.public/scripts/screenshots.mjs"
|
||
echo " orgId=$ORGID"
|