Bringt das Backend vom initialen Skeleton auf den aktuellen Arbeitsstand (Clean Architecture: domain → application → infrastructure → api). Wesentliche Bereiche: - ERP-Anbindung (MSSQL-Pull der Touren, Import-Scheduler, Rückschreiben) - Lieferlebenszyklus: Scan/Hold/Cancel/Complete, Gutschriften, Notizen, Bild-Anhänge, Unterschriften, PDF-Lieferreport → DOCUframe - Stammdaten: Kunden, Artikel, Lager, Zahlungsarten, Services - Keycloak-JWT-Gate + Fahrer-Provisionierung via Admin-API - Admin-API-Key-Gate (X-Admin-Api-Key) für Maschinen-Endpunkte Jüngste Änderungen dieser Session: - Belegspezifische Kontaktdaten: alle ERP-Adressen (Beleg-/Liefer-/ Rechnungsadresse, Ansprechpartner, Kundenstamm) mit Telefon/Mobil/ E-Mail werden gesynct (Migration 0029, MSSQL-Query, TourDetails) - Konfiguration von .env (envy/dotenvy) auf config.toml (toml/serde) umgestellt; Vorlage config.example.toml, Pfad via HOLZLEITNER_CONFIG Nicht im Repo (per .gitignore): config.toml (Secrets), data/ (Laufzeit-/ Kundendaten), demo.mp4, .claude/, variocontrol-ai/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
71 lines
2.5 KiB
Bash
Executable File
71 lines
2.5 KiB
Bash
Executable File
#!/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."
|