#!/usr/bin/env bash # # Datiert ALLE vorhandenen Touren auf den heutigen Tag um. # # Zweck: nach `seed_demo_data.sh 2026-06-01` (oder Touren aus dem ERP-Sync # mit anderem Datum) holt dieses Skript alle Touren auf CURRENT_DATE, damit # die App sie als „heutige Tour" anzeigt. # # WICHTIG: ersetzt, fügt nichts hinzu. # * Es werden KEINE neuen Touren angelegt. # * Bestehende Lieferungen / Items / Notizen / Scans bleiben erhalten — # nur `tour_date` (und `synced_at`) der Tour selbst wandert auf heute. # # Sonderfall mehrere Touren pro Account: die Tabelle hat # `UNIQUE (account_id, tour_date)`. Hätte ein Account mehrere Touren an # verschiedenen Tagen, würde ein pauschales Umdatieren den Constraint # verletzen. Deshalb behalten wir pro Account die jüngste Tour # (tour_date, dann synced_at, dann id als Tie-Break) und löschen die # älteren Duplikate (CASCADE räumt deren Lieferungen). # # Aufruf: # ./tool/reseed_today.sh set -euo pipefail CONTAINER="${CONTAINER:-holzleitner-postgres}" DB_USER="${DB_USER:-holzleitner}" DB_NAME="${DB_NAME:-holzleitner}" if ! docker inspect "$CONTAINER" >/dev/null 2>&1; then echo "✗ Container '$CONTAINER' läuft nicht. Starte docker compose up -d." >&2 exit 1 fi echo "→ Alle Touren auf heute (CURRENT_DATE) umdatieren …" docker exec -i "$CONTAINER" psql -U "$DB_USER" -d "$DB_NAME" -v ON_ERROR_STOP=1 -q <<'SQL' BEGIN; -- ── 1. Duplikate pro Account abräumen ──────────────────────────────── -- Pro account_id genau die jüngste Tour behalten; ältere löschen, damit -- das anschließende Umdatieren nicht in die UNIQUE(account_id, tour_date)- -- Constraint läuft. CASCADE räumt deliveries → items → scans → notes. DELETE FROM tours t USING tours newer WHERE t.account_id = newer.account_id AND (newer.tour_date, newer.synced_at, newer.id) > (t.tour_date, t.synced_at, t.id); -- ── 2. Verbleibende Touren auf heute datieren ──────────────────────── -- Nach Schritt 1 gibt es pro Account genau eine Tour → kein Constraint- -- Konflikt. Touren, die bereits heute liegen, sind ein No-Op. UPDATE tours SET tour_date = CURRENT_DATE, synced_at = NOW(); COMMIT; \echo \echo --- TOUREN (jetzt alle heute) --- SELECT t.account_id, t.tour_date, COUNT(d.id) AS lieferungen FROM tours t LEFT JOIN deliveries d ON d.tour_id = t.id GROUP BY t.account_id, t.tour_date ORDER BY t.account_id; SQL echo "✓ Alle Touren auf heute umdatiert."