Files
EpicNext-Cms/drizzle/migrations/0031_operations_outbox.sql
Simo 13665e0c3c
CI / check (push) Successful in 3m7s
CI / deploy (push) Successful in 1m37s
CI / publish-container (push) Successful in 44s
feat(catalog): persist idempotent bulk operations and retryable deliveries
2026-09-13 18:05:03 +02:00

26 lines
1.2 KiB
SQL

CREATE TABLE IF NOT EXISTS cms_operations (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
actor_id INT NOT NULL,
kind VARCHAR(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
request_key CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
request_hash CHAR(64) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
result_json MEDIUMTEXT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE KEY operation_request (actor_id,kind,request_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS cms_outbox (
id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin PRIMARY KEY,
operation_id CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
topic VARCHAR(64) NOT NULL,
status VARCHAR(16) NOT NULL DEFAULT 'pending',
attempts INT NOT NULL DEFAULT 0,
available_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
lease_until DATETIME(3) NULL,
lease_token CHAR(36) CHARACTER SET ascii COLLATE ascii_bin NULL,
last_error VARCHAR(255) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
UNIQUE KEY operation_effect (operation_id,topic),
KEY delivery_pending (status,available_at),
KEY delivery_lease (status,lease_until)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;