using Fake.EventBus.IntegrationEventLog; using Microsoft.EntityFrameworkCore; namespace SimpleAdmin.Api.Storage; /// /// Outbox/Inbox 与业务同库时 EnsureCreated 无效(库已存在),用 IF NOT EXISTS 建表。 /// internal static class IntegrationEventLogSchema { public static async Task EnsureTablesAsync( IntegrationEventLogContext db, CancellationToken cancellationToken = default) { await db.Database.ExecuteSqlRawAsync( """ CREATE TABLE IF NOT EXISTS `OutboxEventLog` ( `EventId` char(36) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL, `EventTypeName` varchar(512) NOT NULL, `State` int NOT NULL, `TimesSent` int NOT NULL, `CreationTime` datetime(6) NOT NULL, `Content` longtext NOT NULL, `TransactionId` varchar(64) NOT NULL, `LockExpiresAt` datetime(6) NULL, PRIMARY KEY (`EventId`), KEY `IX_OutboxEventLog_State_CreationTime` (`State`, `CreationTime`), KEY `IX_OutboxEventLog_TransactionId` (`TransactionId`) ) CHARACTER SET utf8mb4; """, cancellationToken); await db.Database.ExecuteSqlRawAsync( """ CREATE TABLE IF NOT EXISTS `InboxEventLog` ( `EventId` char(36) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL, `EventTypeName` varchar(512) NOT NULL, `State` int NOT NULL, `ProcessedTime` datetime(6) NOT NULL, `Content` longtext NOT NULL, `ErrorMessage` longtext NULL, PRIMARY KEY (`EventId`), KEY `IX_InboxEventLog_ProcessedTime` (`ProcessedTime`) ) CHARACTER SET utf8mb4; """, cancellationToken); } }