49 lines
1.9 KiB
C#
49 lines
1.9 KiB
C#
using Fake.EventBus.IntegrationEventLog;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace SimpleAdmin.Api.Storage;
|
|
|
|
/// <summary>
|
|
/// Outbox/Inbox 与业务同库时 EnsureCreated 无效(库已存在),用 IF NOT EXISTS 建表。
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|