SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci; -- Google paid-detail failures are not paid facts. Keep retry state in a separate table so the -- finance list/overview can continue treating admin_legacy_google_paid_details as successful cache only. CREATE TABLE IF NOT EXISTS admin_legacy_google_paid_sync_attempts ( app_code VARCHAR(32) NOT NULL COMMENT 'legacy App code', transaction_id VARCHAR(96) NOT NULL COMMENT 'in_app_purchase_details._id', attempt_count INT NOT NULL DEFAULT 0 COMMENT 'consecutive failed attempts', last_error VARCHAR(512) NOT NULL DEFAULT '' COMMENT 'last sanitized synchronization error', next_retry_at_ms BIGINT NOT NULL DEFAULT 0 COMMENT 'next retry time, UTC epoch ms', created_at_ms BIGINT NOT NULL COMMENT 'created time, UTC epoch ms', updated_at_ms BIGINT NOT NULL COMMENT 'updated time, UTC epoch ms', PRIMARY KEY (app_code, transaction_id), KEY idx_legacy_google_paid_retry (app_code, next_retry_at_ms, updated_at_ms) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='legacy Google paid-detail retry state';