feat(27-shipment-tracking-backend): infrastruktura sledzenia przesylek — statusy, tracking services, cron handler

Dwupoziomowy system statusow dostawy (normalized + raw z API), implementacje
trackingu dla InPost ShipX, Apaczka i Allegro WZA, cron handler odpytujacy
aktywne przesylki co 15 minut.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-23 20:33:44 +01:00
parent c59d431083
commit 228c0e96cf
17 changed files with 1365 additions and 27 deletions

View File

@@ -0,0 +1,31 @@
-- Migration: Add delivery tracking columns to shipment_packages
-- Phase 27: Shipment Tracking Backend
-- Idempotent: skip if columns already exist
SET @col_exists = (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'shipment_packages' AND COLUMN_NAME = 'delivery_status');
SET @sql_add = IF(@col_exists = 0,
'ALTER TABLE shipment_packages
ADD COLUMN delivery_status VARCHAR(32) NOT NULL DEFAULT ''unknown'' AFTER status,
ADD COLUMN delivery_status_raw VARCHAR(128) NULL AFTER delivery_status,
ADD COLUMN delivery_status_updated_at DATETIME NULL AFTER delivery_status_raw',
'SELECT 1');
PREPARE stmt FROM @sql_add;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Add index (idempotent)
SET @idx_exists = (SELECT COUNT(*) FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'shipment_packages' AND INDEX_NAME = 'idx_delivery_status');
SET @sql_idx = IF(@idx_exists = 0,
'ALTER TABLE shipment_packages ADD INDEX idx_delivery_status (delivery_status)',
'SELECT 1');
PREPARE stmt FROM @sql_idx;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- Set initial delivery_status for existing packages based on current status
UPDATE shipment_packages SET delivery_status = 'delivered' WHERE status = 'label_ready' AND delivery_status = 'unknown';
UPDATE shipment_packages SET delivery_status = 'confirmed' WHERE status = 'created' AND provider != 'manual' AND delivery_status = 'unknown';