Fuehre technische Shopify-Runpersistenz ein
This commit is contained in:
@@ -7,6 +7,9 @@
|
|||||||
3. `db/migrations/0003_phase1_inventory_forecast.sql`
|
3. `db/migrations/0003_phase1_inventory_forecast.sql`
|
||||||
4. `db/migrations/0004_phase1_direct_sales.sql`
|
4. `db/migrations/0004_phase1_direct_sales.sql`
|
||||||
5. `db/migrations/0005_phase1_auto_switch_fix.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
|
## 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`
|
- `outbound_webhook_event`
|
||||||
- `system_user`
|
- `system_user`
|
||||||
|
|
||||||
|
### `erp/import-integration`
|
||||||
|
|
||||||
|
- `process_runs`
|
||||||
|
- `shopify_webhook_event`
|
||||||
|
|
||||||
## 3. Hinweise
|
## 3. Hinweise
|
||||||
|
|
||||||
- Die Ownership ist fachlich und technisch bindend.
|
- 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 technische Shopify-Eventpersistenz dokumentieren.
|
||||||
- [x] Verbindlichen Sub-Prozess-Vertrag für die identifier-only Bestellübergabe dokumentieren.
|
- [x] Verbindlichen Sub-Prozess-Vertrag für die identifier-only Bestellübergabe dokumentieren.
|
||||||
- [ ] Technische Eingangstabelle und DB-Ownership für Shopify-Events festlegen.
|
- [ ] 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 im Repository angelegt: `scripts/db/synology_db_backup.sh`.
|
||||||
- [x] ERP-Backupskript auf DEV bereitgestellt.
|
- [x] ERP-Backupskript auf DEV bereitgestellt.
|
||||||
- [x] Backupziel im Skript festgelegt: `/volume1/naurua_db_backups/dev`.
|
- [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.
|
- 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.
|
- 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.
|
- 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`.
|
- Das Backupziel ist `/volume1/naurua_db_backups/dev`.
|
||||||
- Der Logpfad ist `/volume1/naurua_db_backups/dev/synology_db_backup.log`.
|
- 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
|
## Abnahmeregel
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user