#!/usr/bin/env bash # # Erzeugt 6 öffentliche Routen quer durch Deutschland für den Demo-Account # (z.B. reviewer@banyaro.app). Login wird interaktiv abgefragt; das Passwort # läuft nicht durchs Shell-History. # # Abhängigkeiten: curl, jq. # Voraussetzung: Account ist als 'pro' freigeschaltet (Routenvorschläge # sind Pro-Feature; sonst kommt 403 zurück). # # Aufruf: # ./AppStore/scripts/generate_demo_routes.sh set -euo pipefail BASE="https://banyaro.app" command -v jq >/dev/null || { echo "❌ jq fehlt (brew install jq)"; exit 1; } command -v curl >/dev/null || { echo "❌ curl fehlt"; exit 1; } echo "📍 Reviewer-Demo-Routen: 6 öffentliche Routen quer durch Deutschland" echo "" read -r -p "E-Mail: " EMAIL read -r -s -p "Passwort: " PASS; echo "" echo "" # ── 1. Login ────────────────────────────────────────────────────── LOGIN_RESP=$(curl -s -X POST "$BASE/api/auth/login" \ -H "Content-Type: application/json" \ -d "$(jq -nc --arg e "$EMAIL" --arg p "$PASS" '{email:$e,password:$p}')") TOKEN=$(echo "$LOGIN_RESP" | jq -r '.token // empty') if [ -z "$TOKEN" ]; then echo "❌ Login fehlgeschlagen:" echo "$LOGIN_RESP" | jq . exit 1 fi echo "✓ Eingeloggt" # ── 2. Hund-ID holen (erstes Tier am Account) ───────────────────── DOG_ID=$(curl -s "$BASE/api/dogs" -H "Authorization: Bearer $TOKEN" | jq -r '.[0].id // empty') if [ -z "$DOG_ID" ]; then echo "❌ Kein Hund am Account — leg erst einen an."; exit 1 fi echo "✓ Hund-ID $DOG_ID gefunden" echo "" # ── 3. Routen-Definitionen ──────────────────────────────────────── # name | lat | lon | km | seed | is_public ROUTES=( "Hamburg — Alster-Rundweg|53.5594|9.9971|4|1|true" "Berlin — Tiergarten-Schleife|52.5145|13.3501|3|2|true" "München — Englischer Garten|48.1641|11.6053|5|3|true" "Köln — Stadtwald-Runde|50.9290|6.9094|4|4|true" "Stuttgart — Schlossgarten|48.7796|9.1822|3|5|true" "Dresden — Großer Garten|51.0354|13.7607|5|6|true" ) # ── 4. Pro Route: Vorschlag holen, dann speichern ───────────────── saved=0 for entry in "${ROUTES[@]}"; do IFS='|' read -r name lat lon km seed pub <<< "$entry" printf "→ %-40s " "$name" SUG=$(curl -s -X POST "$BASE/api/routes/suggest" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "$(jq -nc --argjson la "$lat" --argjson lo "$lon" --argjson km "$km" --argjson sd "$seed" \ '{lat:$la, lon:$lo, distance_km:$km, seed:$sd}')") TRACK=$(echo "$SUG" | jq -c '.gps_track // empty') DIST=$( echo "$SUG" | jq -r '.distanz_km // empty') DUR=$( echo "$SUG" | jq -r '.dauer_min // empty') if [ -z "$TRACK" ] || [ "$TRACK" = "null" ]; then echo "✗ ORS-Fehler:" echo "$SUG" | jq . | sed 's/^/ /' continue fi BODY=$(jq -nc \ --arg name "$name" \ --argjson track "$TRACK" \ --argjson dist "$DIST" \ --argjson dur "$DUR" \ --argjson dog "$DOG_ID" \ --argjson pub "$pub" \ '{name:$name, gps_track:$track, distanz_km:$dist, dauer_min:$dur, dog_ids:[$dog], is_public:$pub}') SAVE=$(curl -s -X POST "$BASE/api/routes" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "$BODY") RID=$(echo "$SAVE" | jq -r '.id // empty') if [ -n "$RID" ] && [ "$RID" != "null" ]; then echo "✓ #$RID ($DIST km, $DUR min)" saved=$((saved + 1)) else echo "✗ Speichern fehlgeschlagen:" echo "$SAVE" | jq . | sed 's/^/ /' fi done echo "" echo "Fertig: $saved von ${#ROUTES[@]} Routen gespeichert."