food-market/deploy/showcase-seed.sh
nns 9ddbffc04a
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
feat(seed): витринный сидер «Магазин у дома» для скриншотов сайта
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>
2026-10-08 21:46:45 +05:00

75 lines
3.9 KiB
Bash
Executable file
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"