-- Migration 018 — Journal des webhooks d'ingestion
--
-- Trace chaque appel à /api/v1/subscriptions/push et /api/v1/sites/sync
-- (peu importe le résultat). Utile pour diagnostiquer les bugs de sync
-- où un statut "cancelled" ne se propage pas.
--
-- Pas de rétention illimitée : 30 jours par défaut, purge automatique
-- via cron/purge.php (réutilise le mécanisme uptime).

CREATE TABLE IF NOT EXISTS webhook_logs (
    id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    received_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    endpoint VARCHAR(120) NOT NULL COMMENT 'Ex: /api/v1/subscriptions/push',
    source_site_id INT UNSIGNED NULL COMMENT 'NULL si auth a échoué',
    http_status SMALLINT UNSIGNED NOT NULL DEFAULT 0,
    result VARCHAR(50) NOT NULL DEFAULT 'unknown' COMMENT 'ok, invalid_signature, invalid_json, missing_auth, ...',
    subscriptions_count INT UNSIGNED NULL COMMENT 'Nb abos dans le payload',
    orders_count INT UNSIGNED NULL,
    customers_count INT UNSIGNED NULL,
    payload_summary TEXT NULL COMMENT 'JSON compact : id+status des abos reçus, max 8 Ko',
    errors TEXT NULL COMMENT 'Erreurs ligne par ligne si certains items ont échoué',
    KEY idx_received (received_at),
    KEY idx_site_received (source_site_id, received_at),
    KEY idx_endpoint_received (endpoint, received_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Réglage de rétention (par défaut 30 jours)
INSERT INTO platform_settings (setting_key, setting_value, description)
VALUES ('webhook_logs_retention_days', '30', 'Nombre de jours d''historique webhooks conservés')
ON DUPLICATE KEY UPDATE setting_key = setting_key;
