Files
photo-live/packages/db-cn/prisma/migrations/20260917120827_photo_upload_domain/migration.sql
T
浅念 59464bd73d feat(api): photo, upload, outbox schema
Task 10: photos/photo_variants/upload_sessions/photo_jobs/outbox_events
on the CN schema (flat string FKs, no Prisma relations); migration
20260917120827_photo_upload_domain rewritten to utf8mb4_0900_bin per the
固化 collation recipe; reset.ts table order extended; one semantics e2e
case for photo_jobs @@unique([photoId, type]) and the upload_sessions
A03 idempotency anchor @@unique([userId, clientTaskId]).

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-17 20:11:26 +08:00

96 lines
3.7 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.
-- 同 20260917114313_init_identity:Prisma 生成的 MySQL DDL 固定写
-- utf8mb4_unicode_ci,会覆盖库级 utf8mb4_0900_bin;照片与上传域
-- (photos.objectKey、upload_sessions.objectKey、outbox_events.type 等)
-- 同样依赖 bin 校对的大小写敏感语义,故逐表改写为 utf8mb4_0900_bin。
-- CreateTable
CREATE TABLE `photos` (
`id` VARCHAR(191) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`uploaderId` VARCHAR(64) NOT NULL,
`categoryId` VARCHAR(64) NULL,
`objectKey` VARCHAR(255) NOT NULL,
`bytes` INTEGER NOT NULL DEFAULT 0,
`width` INTEGER NULL,
`height` INTEGER NULL,
`shotAt` DATETIME(6) NULL,
`uploadedAt` DATETIME(6) NULL,
`publishedAt` DATETIME(6) NULL,
`processingState` VARCHAR(191) NOT NULL DEFAULT 'pending_upload',
`errorCode` VARCHAR(64) NULL,
`visibility` VARCHAR(191) NOT NULL DEFAULT 'unpublished',
`likeCount` INTEGER NOT NULL DEFAULT 0,
`entityVersion` INTEGER NOT NULL DEFAULT 1,
UNIQUE INDEX `photos_objectKey_key`(`objectKey`),
INDEX `photos_albumId_visibility_publishedAt_id_idx`(`albumId`, `visibility`, `publishedAt`, `id`),
INDEX `photos_albumId_uploaderId_uploadedAt_idx`(`albumId`, `uploaderId`, `uploadedAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `photo_variants` (
`photoId` VARCHAR(64) NOT NULL,
`variant` VARCHAR(32) NOT NULL,
`objectKey` VARCHAR(255) NOT NULL,
`bytes` INTEGER NOT NULL,
`version` INTEGER NOT NULL DEFAULT 1,
`width` INTEGER NULL,
`height` INTEGER NULL,
UNIQUE INDEX `photo_variants_objectKey_key`(`objectKey`),
UNIQUE INDEX `photo_variants_photoId_variant_key`(`photoId`, `variant`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `upload_sessions` (
`id` VARCHAR(191) NOT NULL,
`userId` VARCHAR(64) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`clientTaskId` VARCHAR(128) NOT NULL,
`photoId` VARCHAR(64) NOT NULL,
`objectKey` VARCHAR(255) NOT NULL,
`expectedBytes` INTEGER NOT NULL,
`contentType` VARCHAR(128) NOT NULL,
`multipartId` VARCHAR(255) NULL,
`state` VARCHAR(191) NOT NULL DEFAULT 'pending',
`expiresAt` DATETIME(6) NOT NULL,
`createdAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
UNIQUE INDEX `upload_sessions_photoId_key`(`photoId`),
UNIQUE INDEX `upload_sessions_objectKey_key`(`objectKey`),
UNIQUE INDEX `upload_sessions_userId_clientTaskId_key`(`userId`, `clientTaskId`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `photo_jobs` (
`id` VARCHAR(191) NOT NULL,
`photoId` VARCHAR(64) NOT NULL,
`type` VARCHAR(32) NOT NULL DEFAULT 'process',
`state` VARCHAR(191) NOT NULL DEFAULT 'pending',
`attempt` INTEGER NOT NULL DEFAULT 0,
`errorCode` VARCHAR(64) NULL,
`nextRetryAt` DATETIME(6) NULL,
`updatedAt` DATETIME(6) NOT NULL,
INDEX `photo_jobs_state_nextRetryAt_idx`(`state`, `nextRetryAt`),
UNIQUE INDEX `photo_jobs_photoId_type_key`(`photoId`, `type`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;
-- CreateTable
CREATE TABLE `outbox_events` (
`id` VARCHAR(191) NOT NULL,
`type` VARCHAR(64) NOT NULL,
`albumId` VARCHAR(64) NOT NULL,
`photoId` VARCHAR(64) NULL,
`entityVersion` INTEGER NOT NULL,
`payload` JSON NOT NULL,
`occurredAt` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
`deliveredAt` DATETIME(6) NULL,
INDEX `outbox_events_deliveredAt_occurredAt_idx`(`deliveredAt`, `occurredAt`),
PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_bin;