diff --git a/packages/db-cn/prisma/migrations/20260928144300_ads/migration.sql b/packages/db-cn/prisma/migrations/20260928144300_ads/migration.sql new file mode 100644 index 0000000..353e92f --- /dev/null +++ b/packages/db-cn/prisma/migrations/20260928144300_ads/migration.sql @@ -0,0 +1,22 @@ +-- 广告位域(2026-09-28 设计 §2.1):ads 写权威表。 +-- 校对手决:Prisma 生成 DDL 固定 utf8mb4_unicode_ci,逐表改写为库级约定的 +-- utf8mb4_0900_bin(同 embed_slots 口径)。albumIds JSON null=全局(归一化: +-- 空数组存 null);绑定相册删除不级联清理(观众页已 404,后台编辑过滤失效项)。 +-- 排序索引(sortOrder, createdAt)服务公开端列表序。 + +-- CreateTable +CREATE TABLE `ads` ( + `id` VARCHAR(191) NOT NULL, + `title` VARCHAR(120) NULL, + `imageObjectKey` VARCHAR(512) NOT NULL, + `linkUrl` VARCHAR(2048) NOT NULL, + `enabled` BOOLEAN NOT NULL DEFAULT true, + `sortOrder` INTEGER NOT NULL DEFAULT 0, + `albumIds` JSON NULL, + `entityVersion` INTEGER NOT NULL DEFAULT 1, + `createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), + `updatedAt` DATETIME(6) NOT NULL, + + INDEX `ads_sortOrder_createdAt_idx`(`sortOrder`, `createdAt`), + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin; diff --git a/packages/db-cn/prisma/schema.prisma b/packages/db-cn/prisma/schema.prisma index a69a4c1..a7865b9 100644 --- a/packages/db-cn/prisma/schema.prisma +++ b/packages/db-cn/prisma/schema.prisma @@ -364,3 +364,20 @@ model embed_slot_members { @@unique([slotId, userId]) @@index([userId]) } + +// —— 广告位域(2026-09-28 设计 §2.1):全局/定向投放,写权威 —— +// albumIds null=全局(归一化:空数组存 null);绑定相册删除不级联清理 +// (该相册观众页已 404,后台编辑过滤失效项——设计 §2.1 登记)。 +model ads { + id String @id @default(cuid()) + title String? @db.VarChar(120) + imageObjectKey String @db.VarChar(512) + linkUrl String @db.VarChar(2048) + enabled Boolean @default(true) + sortOrder Int @default(0) + albumIds Json? + entityVersion Int @default(1) + createdAt DateTime @default(now()) @db.DateTime(6) + updatedAt DateTime @updatedAt @db.DateTime(6) + @@index([sortOrder, createdAt]) +} diff --git a/packages/db-ov/prisma/migrations/20260928144400_ads_ov/migration.sql b/packages/db-ov/prisma/migrations/20260928144400_ads_ov/migration.sql new file mode 100644 index 0000000..3a43b68 --- /dev/null +++ b/packages/db-ov/prisma/migrations/20260928144400_ads_ov/migration.sql @@ -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; diff --git a/packages/db-ov/prisma/schema.prisma b/packages/db-ov/prisma/schema.prisma index 8819f28..e39d45a 100644 --- a/packages/db-ov/prisma/schema.prisma +++ b/packages/db-ov/prisma/schema.prisma @@ -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 恒为权威快照值(非增量)。