feat(db): ads 写权威表与 ads_ov 投影表(含迁移)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-28 22:43:25 +08:00
parent 001d3aaf73
commit 726f6a1be8
4 changed files with 75 additions and 0 deletions
@@ -0,0 +1,21 @@
-- 广告位副本表(cn ads 的展示投影,ad.updated/ad.deleted 事件应用)。
-- 校对手决:Prisma 生成 DDL 固定 utf8mb4_unicode_ci,改写为库级约定的
-- utf8mb4_0900_bin(同 embed_slots_ov 口径)。无墓碑:ad.deleted 墓碑与
-- enabled=false 快照都表达为「删行」(公开不可见);createdAt/updatedAt 为
-- cn 原值(排序 tie-break,非本机生成)。排序索引(sortOrder, createdAt)与
-- cn ads 同构。
-- CreateTable
CREATE TABLE `ads_ov` (
`adId` VARCHAR(32) NOT NULL,
`imageObjectKey` VARCHAR(512) NOT NULL,
`linkUrl` VARCHAR(2048) NOT NULL,
`sortOrder` INTEGER NOT NULL,
`albumIds` JSON NULL,
`entityVersion` INTEGER NOT NULL,
`createdAt` DATETIME(6) NOT NULL,
`updatedAt` DATETIME(6) NOT NULL,
INDEX `ads_ov_sortOrder_createdAt_idx`(`sortOrder`, `createdAt`),
PRIMARY KEY (`adId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
+15
View File
@@ -183,6 +183,21 @@ model embed_slots_ov {
updatedAt DateTime @updatedAt @db.DateTime(6)
}
// —— 副本域:ads_ov(cn ads 的展示投影,2026-09-28)——
// 无墓碑——ad.deleted 墓碑与 enabled=false 快照都表达为「删行」(公开不可见);
// createdAt 为 cn 原值(排序 tie-break,非本机生成)。
model ads_ov {
adId String @id @db.VarChar(32)
imageObjectKey String @db.VarChar(512)
linkUrl String @db.VarChar(2048)
sortOrder Int
albumIds Json?
entityVersion Int
createdAt DateTime @db.DateTime(6)
updatedAt DateTime @db.DateTime(6)
@@index([sortOrder, createdAt])
}
// —— 统计回传队列:outbox_stat_events(ov→cn,Task 9 消费)——
// 与 cn outbox_events 同构的发送位:sentAt 为空即重发(中断恢复),statVersion
// 让 cn 侧「仅更高版本替换」幂等。total 恒为权威快照值(非增量)。