Message Repository Table Schema
composer require eventsauce/message-repository-table-schema
The table schema allows you to specify and customize the column names used for you message repository table. Additionally, it allows you to add additional headers as fields to each row.
Default Table Schema
The default implementation DefaultTableSchema uses the following column names:
idprimary key ()event_idevent ID (text/UUID)aggregate_root_idaggregate root ID (text/UUID)versionaggregate root version (int)payloadencoded event payload (text/JSON)
Which corresponds to the following table schema:
CREATE TABLE IF NOT EXISTS `your_table_name` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`event_id` BINARY(16) NOT NULL,
`aggregate_root_id` BINARY(16) NOT NULL,
`version` int(20) unsigned NULL,
`payload` varchar(16001) NOT NULL,
PRIMARY KEY (`id` ASC),
KEY `reconstitution` (`aggregate_root_id`, `version` ASC)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE=InnoDB;
Legacy Table Schema
NOTE: The legacy schema requires the string UUID encoder.
For users upgrading from EventSauce pre-1.0, there is a LegacyTableSchema:
event_idprimary key (text/UUID)event_typethe serialized event name (text)aggregate_root_idaggregate root ID (text/UUID)aggregate_root_versionaggregate root version (int)time_of_recordingwhen the event was written (timestamp)payloadencoded event payload (text/JSON)
Which corresponds to the following table schema:
CREATE TABLE IF NOT EXISTS your_table_name (
id bigint unsigned NOT NULL AUTO_INCREMENT,
event_id VARCHAR(36) NOT NULL,
event_type VARCHAR(100) NOT NULL,
aggregate_root_id VARCHAR(36) NOT NULL,
aggregate_root_version MEDIUMINT(36) UNSIGNED NOT NULL,
time_of_recording DATETIME(6) NOT NULL,
payload JSON NOT NULL,
PRIMARY KEY (`id` ASC),
INDEX aggregate_root_id (aggregate_root_id),
UNIQUE KEY unique_id_and_version (aggregate_root_id, aggregate_root_version ASC)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ENGINE=InnoDB
Custom Implementations
Custom implementations of TableSchema can use the additionalColumns method to
write other Header values to columns, which can be useful for indexing.