Files
photo-live/packages/db-ov/prisma/migrations/20260918060102_init_ov/migration.sql
T
浅念 3d6e9ce175 feat(ov): ov schema, entry skeleton and compose profile
P2 Task 2 ov 数据层:
- compose ov profile:mysql-ov(mysql:8.4,127.0.0.1:3309,库级
  utf8mb4_0900_bin)+ redis-ov(6381),cn 侧默认 up 不受影响
  (3307/3308 已被其它本机项目占用,端口决策 3309)
- @photo/db-ov:9 表 schema(albums_ov/photos_ov 副本、sync_inbox/
  sync_state 同步账本(水位行同表标志位)、like_batches/album_stats/
  visit_sessions/visit_requests 互动域、outbox_stat_events 回传队列);
  迁移 20260918060102_init_ov 走固化校对手决流程,information_schema
  复核全部业务表/列 utf8mb4_0900_bin(_prisma_migrations 同 cn 先例
  保持 unicode_ci)
- generator 独立 output(包内 generated/):pnpm 将两包 @prisma/client
  提升为同一 store 实例,默认 .prisma/client 输出会被双 schema 互相
  覆盖,ov 客户端独立产出经 src/index.ts 转出口
- ov 入口骨架:main-ov.ts(PORT_OV 默认 8081)+ app-ov.module.ts
  (仅管线骨架 + /v1/health,feature modules 后续任务装配);logger
  装配选项抽取至 shared/logger-options.ts 供 cn/ov 双入口共用(行为
  不变,P1 套件守护)
- test/reset-ov.ts:ov 库 truncate-if-exists 隔离工具(无 MinIO 清理)
- 根脚本:db:generate 双库齐跑,新增 db-ov:migrate/db-ov:generate/dev:ov

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-18 14:11:41 +08:00

144 lines
5.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- P2 Task 2:OV 库初始迁移(副本/同步账本/互动流水共 9 表)。
-- 同 db-cn 固化手决流程:Prisma 生成的 MySQL DDL 固定写 utf8mb4_unicode_ci,
-- 会覆盖库级 utf8mb4_0900_bin;publicToken/entityType 等的大小写敏感语义
-- 依赖 bin 校对,故逐表改写为 utf8mb4_0900_bin(表级默认覆盖其全部
-- VARCHAR 列;后续 ov 迁移同样需要复核 CREATE TABLE 的 collation)。
-- CreateTable
CREATE TABLE `albums_ov` (
`albumId` VARCHAR(191) NOT NULL,
`publicToken` VARCHAR(32) NOT NULL,
`status` VARCHAR(191) NOT NULL DEFAULT 'active',
`publicEnabled` BOOLEAN NOT NULL DEFAULT true,
`downloadEnabled` BOOLEAN NOT NULL DEFAULT true,
`originalDownloadEnabled` BOOLEAN NOT NULL DEFAULT false,
`emergencyDisabled` BOOLEAN NOT NULL DEFAULT false,
`translations` JSON NOT NULL,
`categories` JSON NOT NULL,
`bannerAssetKey` VARCHAR(255) NULL,
`defaultLocale` VARCHAR(16) NOT NULL,
`timezone` VARCHAR(64) NOT NULL DEFAULT 'Asia/Shanghai',
`startAt` DATETIME(6) NULL,
`endAt` DATETIME(6) NULL,
`entityVersion` INTEGER NOT NULL,
`updatedAt` DATETIME(6) NOT NULL,
UNIQUE INDEX `albums_ov_publicToken_key`(`publicToken`),
PRIMARY KEY (`albumId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `photos_ov` (
`photoId` VARCHAR(191) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`categoryId` VARCHAR(64) NULL,
`width` INTEGER NULL,
`height` INTEGER NULL,
`originalObjectKey` VARCHAR(255) NOT NULL,
`thumbObjectKey` VARCHAR(255) NOT NULL,
`browseObjectKey` VARCHAR(255) NOT NULL,
`likeTotal` INTEGER NOT NULL DEFAULT 0,
`countVersion` INTEGER NOT NULL DEFAULT 0,
`visibility` VARCHAR(191) NOT NULL,
`entityVersion` INTEGER NOT NULL,
`publishedAt` DATETIME(6) NULL,
`updatedAt` DATETIME(6) NOT NULL,
INDEX `photos_ov_albumId_visibility_publishedAt_idx`(`albumId`, `visibility`, `publishedAt`),
PRIMARY KEY (`photoId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `sync_inbox` (
`eventId` VARCHAR(191) NOT NULL,
`entityType` VARCHAR(32) NOT NULL,
`entityId` VARCHAR(64) NOT NULL,
`albumId` VARCHAR(64) NULL,
`entityVersion` INTEGER NOT NULL,
`tombstone` BOOLEAN NOT NULL DEFAULT false,
`priority` VARCHAR(16) NOT NULL DEFAULT 'normal',
`payload` JSON NOT NULL,
`receivedAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`appliedAt` DATETIME(6) NULL,
INDEX `sync_inbox_receivedAt_idx`(`receivedAt`),
INDEX `sync_inbox_appliedAt_idx`(`appliedAt`),
PRIMARY KEY (`eventId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `sync_state` (
`id` VARCHAR(191) NOT NULL,
`entityType` VARCHAR(32) NOT NULL,
`entityId` VARCHAR(64) NOT NULL,
`appliedVersion` INTEGER NOT NULL,
`appliedAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`watermark` BOOLEAN NOT NULL DEFAULT false,
UNIQUE INDEX `sync_state_entityType_entityId_key`(`entityType`, `entityId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `like_batches` (
`id` VARCHAR(191) NOT NULL,
`photoId` VARCHAR(64) NOT NULL,
`sessionId` VARCHAR(64) NOT NULL,
`batchId` VARCHAR(64) NOT NULL,
`delta` INTEGER NOT NULL,
`createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
INDEX `like_batches_photoId_idx`(`photoId`),
INDEX `like_batches_createdAt_idx`(`createdAt`),
UNIQUE INDEX `like_batches_photoId_sessionId_batchId_key`(`photoId`, `sessionId`, `batchId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `album_stats` (
`albumId` VARCHAR(64) NOT NULL,
`viewCount` INTEGER NOT NULL DEFAULT 0,
`statVersion` INTEGER NOT NULL DEFAULT 0,
`updatedAt` DATETIME(6) NOT NULL,
PRIMARY KEY (`albumId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `visit_sessions` (
`id` VARCHAR(191) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`visitorId` VARCHAR(64) NOT NULL,
`lastCountedAt` DATETIME(6) NULL,
UNIQUE INDEX `visit_sessions_albumId_visitorId_key`(`albumId`, `visitorId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `visit_requests` (
`requestId` VARCHAR(64) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`visitorId` VARCHAR(64) NOT NULL,
`counted` BOOLEAN NOT NULL DEFAULT false,
`createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
INDEX `visit_requests_createdAt_idx`(`createdAt`),
PRIMARY KEY (`requestId`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `outbox_stat_events` (
`id` VARCHAR(191) NOT NULL,
`kind` VARCHAR(16) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`photoId` VARCHAR(64) NULL,
`total` INTEGER NOT NULL,
`statVersion` INTEGER NOT NULL,
`createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`sentAt` DATETIME(6) NULL,
INDEX `outbox_stat_events_sentAt_idx`(`sentAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;