feat(api): embed slots with ov replica and public feed
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
-- P4b Task 2:展示位域(embed_slots/embed_slot_members)。
|
||||
-- 校对手决:Prisma 生成 DDL 固定 utf8mb4_unicode_ci,逐表改写为库级约定的
|
||||
-- utf8mb4_0900_bin(publicToken 的大小写敏感唯一语义依赖它,同 albums 口径)。
|
||||
-- · embed_slots 双版本位:configVersion(嵌入端可见配置版本,任一管理面
|
||||
-- 变更递增)/entityVersion(slot.updated 同步事件版本);无删除端点,
|
||||
-- enabled=false 即下线。settings 为归一化 EmbedSlotSettings 全集 JSON。
|
||||
-- · embed_slot_members:授权成员表**建而未用**(P4b 权限简化 admin-only,
|
||||
-- 登记偏差;P5 授权面按需启用)。
|
||||
-- · 两表均扁平字符串外键(albumId/userId/slotId 无 FK 约束,同相册域约定)。
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `embed_slots` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`publicToken` VARCHAR(32) NOT NULL,
|
||||
`name` VARCHAR(64) NOT NULL,
|
||||
`enabled` BOOLEAN NOT NULL DEFAULT true,
|
||||
`albumId` VARCHAR(64) NULL,
|
||||
`configVersion` INTEGER NOT NULL DEFAULT 1,
|
||||
`settings` JSON NOT NULL,
|
||||
`entityVersion` INTEGER NOT NULL DEFAULT 1,
|
||||
`createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`updatedAt` DATETIME(6) NOT NULL,
|
||||
|
||||
UNIQUE INDEX `embed_slots_publicToken_key`(`publicToken`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE `embed_slot_members` (
|
||||
`id` VARCHAR(191) NOT NULL,
|
||||
`slotId` VARCHAR(64) NOT NULL,
|
||||
`userId` VARCHAR(64) NOT NULL,
|
||||
`permission` VARCHAR(32) NOT NULL,
|
||||
`createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
|
||||
INDEX `embed_slot_members_userId_idx`(`userId`),
|
||||
UNIQUE INDEX `embed_slot_members_slotId_userId_key`(`slotId`, `userId`),
|
||||
PRIMARY KEY (`id`)
|
||||
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
|
||||
@@ -332,3 +332,33 @@ model user_sync_state {
|
||||
runCount Int @default(0) // 已启动批次数(含失败),驱动周期全量对账
|
||||
updatedAt DateTime @updatedAt @db.DateTime(6)
|
||||
}
|
||||
// —— 展示位域(P4b Task 2,悬浮轮播组件挂载点)——
|
||||
// cn 权威实体:admin 建槽/绑定相册,经 outbox slot.updated 事件同步 ov 副本
|
||||
// (embed_slots_ov,载荷全量快照)。扁平字符串外键(albumId 无 relation/FK,
|
||||
// 同相册域约定)。双版本位:configVersion 是「嵌入端可见」的配置版本(任一
|
||||
// 管理面变更递增,公开端 ETag 组成部分);entityVersion 是同步版本(同相册
|
||||
// 模式,事务内自增)。无删除端点:enabled=false 即下线(软停用)。
|
||||
// embed_slot_members:授权成员表**建而未用**(P4b 权限简化为 admin-only——
|
||||
// 需求「创建者只操作被授权展示位」的授权面登记偏差,P5 按需出 API/UI)。
|
||||
model embed_slots {
|
||||
id String @id @default(cuid())
|
||||
publicToken String @unique @db.VarChar(32) // 嵌入代码 data-slot 引用(24 字符 [0-9a-z],同相册令牌口径)
|
||||
name String @db.VarChar(64)
|
||||
enabled Boolean @default(true)
|
||||
albumId String? @db.VarChar(64) // 绑定相册;null=未绑定(公开端 404)
|
||||
configVersion Int @default(1) // 任一管理面变更递增(嵌入端整体重置渲染依据)
|
||||
settings Json // EmbedSlotSettings 归一化全集(字段恒齐全)
|
||||
entityVersion Int @default(1) // slot.updated 事件版本(同 photos 模式)
|
||||
createdAt DateTime @default(now()) @db.DateTime(6)
|
||||
updatedAt DateTime @updatedAt @db.DateTime(6)
|
||||
}
|
||||
model embed_slot_members {
|
||||
id String @id @default(cuid())
|
||||
slotId String @db.VarChar(64)
|
||||
userId String @db.VarChar(64)
|
||||
permission String @db.VarChar(32) // manage|view(P4b 未用,P5 授权面按需启用)
|
||||
createdAt DateTime @default(now()) @db.DateTime(6)
|
||||
|
||||
@@unique([slotId, userId])
|
||||
@@index([userId])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user