feat: 내구성 있는 read model 변화 저널 기반을 추가
This commit is contained in:
@@ -83,6 +83,38 @@ model InputEvent {
|
||||
@@map("input_event")
|
||||
}
|
||||
|
||||
model ReadModelRevision {
|
||||
domain String
|
||||
entityId Int @default(0) @map("entity_id")
|
||||
revision BigInt @default(0)
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
|
||||
@@id([domain, entityId])
|
||||
@@map("read_model_revision")
|
||||
}
|
||||
|
||||
model ReadModelOutbox {
|
||||
id BigInt @id @default(autoincrement())
|
||||
payload Json
|
||||
attempts Int @default(0)
|
||||
availableAt DateTime @default(now()) @map("available_at")
|
||||
lockedAt DateTime? @map("locked_at")
|
||||
lockOwner String? @map("lock_owner")
|
||||
deliveredAt DateTime? @map("delivered_at")
|
||||
lastError String? @map("last_error")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
|
||||
@@index([deliveredAt, availableAt, id], map: "read_model_outbox_delivered_at_available_at_id_idx")
|
||||
@@map("read_model_outbox")
|
||||
}
|
||||
|
||||
model ReadModelRevisionMeta {
|
||||
id Int @id
|
||||
coverageVersion Int @default(0) @map("coverage_version")
|
||||
|
||||
@@map("read_model_revision_meta")
|
||||
}
|
||||
|
||||
model TurnDaemonLease {
|
||||
profile String @id
|
||||
ownerId String @map("owner_id")
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
CREATE TABLE "read_model_revision" (
|
||||
"domain" TEXT NOT NULL,
|
||||
"entity_id" INTEGER NOT NULL DEFAULT 0,
|
||||
"revision" BIGINT NOT NULL DEFAULT 0,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "read_model_revision_pkey" PRIMARY KEY ("domain", "entity_id"),
|
||||
CONSTRAINT "read_model_revision_entity_id_check" CHECK ("entity_id" >= 0),
|
||||
CONSTRAINT "read_model_revision_revision_check" CHECK ("revision" >= 0)
|
||||
);
|
||||
|
||||
CREATE TABLE "read_model_outbox" (
|
||||
"id" BIGSERIAL NOT NULL,
|
||||
"payload" JSONB NOT NULL,
|
||||
"attempts" INTEGER NOT NULL DEFAULT 0,
|
||||
"available_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"locked_at" TIMESTAMP(3),
|
||||
"lock_owner" TEXT,
|
||||
"delivered_at" TIMESTAMP(3),
|
||||
"last_error" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "read_model_outbox_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "read_model_outbox_attempts_check" CHECK ("attempts" >= 0)
|
||||
);
|
||||
|
||||
CREATE INDEX "read_model_outbox_delivered_at_available_at_id_idx"
|
||||
ON "read_model_outbox"("delivered_at", "available_at", "id");
|
||||
|
||||
CREATE TABLE "read_model_revision_meta" (
|
||||
"id" INTEGER NOT NULL,
|
||||
"coverage_version" INTEGER NOT NULL DEFAULT 0,
|
||||
|
||||
CONSTRAINT "read_model_revision_meta_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "read_model_revision_meta_coverage_version_check" CHECK ("coverage_version" >= 0)
|
||||
);
|
||||
|
||||
INSERT INTO "read_model_revision_meta" ("id", "coverage_version")
|
||||
VALUES (1, 0);
|
||||
@@ -27,6 +27,8 @@ chain을 적용하고 두 번째 실행은 `No pending migrations to apply`여
|
||||
- `world_state`, `nation`, `city`, `general`, `message`, `troop`
|
||||
- `general_turn`, `nation_turn`과 revision·lease field
|
||||
- `input_event`, `turn_daemon_lease`
|
||||
- `read_model_revision`, `read_model_outbox`, `read_model_revision_meta`
|
||||
- `read_model_revision_meta.id=1`의 `coverage_version=0`
|
||||
- `diplomacy`, `event`, `log_entry`, `error_log`
|
||||
- auction, board, vote, yearbook, archive와 inheritance table
|
||||
- `nation.chief_general_id`
|
||||
|
||||
Reference in New Issue
Block a user