Fuehre technische Shopify-Runpersistenz ein

This commit is contained in:
2026-08-12 16:14:02 +02:00
parent c76a33c518
commit f2c9150cb3
4 changed files with 61 additions and 2 deletions
+3
View File
@@ -7,6 +7,9 @@
3. `db/migrations/0003_phase1_inventory_forecast.sql`
4. `db/migrations/0004_phase1_direct_sales.sql`
5. `db/migrations/0005_phase1_auto_switch_fix.sql`
6. `db/migrations/0006_phase1_otc_products.sql`
7. `db/migrations/0007_phase1_excel_webhook.sql`
8. `db/migrations/0008_shopify_sync_technical.sql`
## Beispielausfuehrung
@@ -0,0 +1,41 @@
BEGIN;
CREATE TABLE process_runs (
id BIGSERIAL PRIMARY KEY,
process_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'running',
scope_json JSONB NOT NULL DEFAULT '{}'::jsonb,
result_json JSONB,
requested_by TEXT,
started_at TIMESTAMP NOT NULL DEFAULT NOW(),
finished_at TIMESTAMP,
error_code TEXT,
error_message TEXT,
CONSTRAINT chk_process_runs_status CHECK (status IN ('running', 'done', 'partial_success', 'failed'))
);
CREATE INDEX idx_process_runs_name_started ON process_runs(process_name, started_at DESC);
CREATE INDEX idx_process_runs_status_started ON process_runs(status, started_at DESC);
CREATE TABLE shopify_webhook_event (
id BIGSERIAL PRIMARY KEY,
webhook_id TEXT NOT NULL,
topic TEXT NOT NULL,
shop_domain TEXT NOT NULL,
payload_sha256 TEXT NOT NULL,
payload JSONB NOT NULL,
shopify_order_gid TEXT,
status TEXT NOT NULL DEFAULT 'received',
received_at TIMESTAMP NOT NULL DEFAULT NOW(),
processed_at TIMESTAMP,
error_code TEXT,
error_message TEXT,
CONSTRAINT chk_shopify_webhook_event_status CHECK (status IN ('received', 'processed', 'duplicate', 'failed'))
);
CREATE UNIQUE INDEX uq_shopify_webhook_event_webhook_id ON shopify_webhook_event(webhook_id);
CREATE INDEX idx_shopify_webhook_event_order_gid ON shopify_webhook_event(shopify_order_gid);
CREATE INDEX idx_shopify_webhook_event_received_at ON shopify_webhook_event(received_at DESC);
CREATE INDEX idx_shopify_webhook_event_status ON shopify_webhook_event(status, received_at DESC);
COMMIT;
@@ -43,6 +43,11 @@ Diese Referenz ordnet die aktuellen Tabellen, Views und technischen DB-Artefakte
- `outbound_webhook_event`
- `system_user`
### `erp/import-integration`
- `process_runs`
- `shopify_webhook_event`
## 3. Hinweise
- Die Ownership ist fachlich und technisch bindend.
@@ -112,6 +112,15 @@ Fachliche Übergabe: `erp/bestellungen`
- [x] Verbindlichen Sub-Prozess-Vertrag für technische Shopify-Eventpersistenz dokumentieren.
- [x] Verbindlichen Sub-Prozess-Vertrag für die identifier-only Bestellübergabe dokumentieren.
- [ ] Technische Eingangstabelle und DB-Ownership für Shopify-Events festlegen.
- [x] `process_runs` als technische Laufpersistenz im Submodul `erp/import-integration` definiert.
- [x] `shopify_webhook_event` als technische Eingangstabelle im Submodul `erp/import-integration` definiert.
- [x] DB-Ownership für `process_runs` und `shopify_webhook_event` dokumentiert.
- [x] ERP-Backupskript im Repository angelegt: `scripts/db/synology_db_backup.sh`.
- [x] ERP-Backupskript auf DEV bereitgestellt.
- [x] Backupziel festgelegt: `/volume1/naurua_db_backups/dev`.
- [x] PostgreSQL-17-Clientcontainer für das ERP-Backup verwendet.
- [x] Manuelles DEV-Backup erfolgreich erzeugt und mit `pg_restore --list` verifiziert.
- [ ] Migration `0008_shopify_sync_technical.sql` auf DEV ausführen.
- [x] ERP-Backupskript im Repository angelegt: `scripts/db/synology_db_backup.sh`.
- [x] ERP-Backupskript auf DEV bereitgestellt.
- [x] Backupziel im Skript festgelegt: `/volume1/naurua_db_backups/dev`.
@@ -257,10 +266,11 @@ Aktueller Blocker:
- Der vorgeschriebene DEV-DB-Wrapper `/volume2/webssd/erpnaurua/dev/scripts/db/psql.sh` ist auf Synology nicht vorhanden.
- Auf ausdrückliche Anweisung wurde ein read-only-Direktzugriff über `/usr/bin/psql` verwendet.
- Die vollständige Shopify-Bestandszählung und historische Zuordnung bleiben weiterhin offen.
- Der Cron-Aufruf erreicht das Skript jetzt; der Lauf bricht kontrolliert ab, weil der Server PostgreSQL 17 und der verfügbare Client `pg_dump` 11 verwendet.
- Der Cron-Aufruf erreicht das Skript und verwendet den PostgreSQL-17-Clientcontainer.
- Das Backupziel ist `/volume1/naurua_db_backups/dev`.
- Der Logpfad ist `/volume1/naurua_db_backups/dev/synology_db_backup.log`.
- Es wurde kein gültiges Backup und keine DB-Änderung erzeugt.
- Ein gültiger DEV-Dump wurde erzeugt und mit `pg_restore --list` verifiziert.
- Die DB-Migration wurde nach dem Backup noch nicht ausgeführt.
## Abnahmeregel