-- CreateTable CREATE TABLE `User` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `phone` VARCHAR(191) NULL, `openid` VARCHAR(191) NULL, `nickname` VARCHAR(191) NOT NULL DEFAULT '用户', `avatar` VARCHAR(191) NOT NULL DEFAULT '', `memberLevel` INTEGER NOT NULL DEFAULT 0, `memberExpireAt` DATETIME(3) NULL, `dailyUsage` INTEGER NOT NULL DEFAULT 0, `lastUsageDate` VARCHAR(191) NOT NULL DEFAULT '', `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, `usedAudioMinutes` INTEGER NOT NULL DEFAULT 0, `subscriptionResetDate` DATETIME(3) NULL, UNIQUE INDEX `User_phone_key`(`phone`), UNIQUE INDEX `User_openid_key`(`openid`), INDEX `User_phone_idx`(`phone`), INDEX `User_openid_idx`(`openid`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Order` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `orderNo` VARCHAR(191) NOT NULL, `planId` INTEGER NULL, `productType` VARCHAR(191) NOT NULL, `amount` DECIMAL(10, 2) NOT NULL, `status` VARCHAR(191) NOT NULL DEFAULT 'pending', `paymentMethod` VARCHAR(191) NULL, `paymentId` VARCHAR(191) NULL, `paidAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Order_orderNo_key`(`orderNo`), INDEX `Order_userId_createdAt_idx`(`userId`, `createdAt`), INDEX `Order_orderNo_idx`(`orderNo`), INDEX `Order_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `PlayRecord` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `chapterId` INTEGER NOT NULL, `progress` DOUBLE NOT NULL DEFAULT 0, `duration` DOUBLE NOT NULL DEFAULT 0, `updatedAt` DATETIME(3) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `PlayRecord_userId_idx`(`userId`), INDEX `PlayRecord_chapterId_idx`(`chapterId`), UNIQUE INDEX `PlayRecord_userId_chapterId_key`(`userId`, `chapterId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserPreference` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `playSpeed` DOUBLE NOT NULL DEFAULT 1.0, `quality` VARCHAR(191) NOT NULL DEFAULT 'standard', `theme` VARCHAR(191) NOT NULL DEFAULT 'light', `defaultVoiceId` VARCHAR(191) NULL DEFAULT 'cherry', `defaultVolume` INTEGER NOT NULL DEFAULT 50, `autoPlayNext` BOOLEAN NOT NULL DEFAULT true, `wifiOnlyDownload` BOOLEAN NOT NULL DEFAULT false, `updatedAt` DATETIME(3) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), UNIQUE INDEX `UserPreference_userId_key`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Favorite` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `bookId` INTEGER NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `Favorite_userId_idx`(`userId`), INDEX `Favorite_bookId_idx`(`bookId`), UNIQUE INDEX `Favorite_userId_bookId_key`(`userId`, `bookId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Comment` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `chapterId` INTEGER NOT NULL, `content` TEXT NOT NULL, `rating` INTEGER NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `Comment_chapterId_idx`(`chapterId`), INDEX `Comment_userId_idx`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Notification` ( `id` VARCHAR(191) NOT NULL, `userId` VARCHAR(191) NOT NULL, `title` VARCHAR(191) NOT NULL, `content` TEXT NOT NULL, `isRead` BOOLEAN NOT NULL DEFAULT false, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Book` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NULL, `title` VARCHAR(191) NOT NULL, `subtitle` VARCHAR(191) NULL, `description` TEXT NOT NULL, `coverUrl` VARCHAR(191) NULL, `targetAudience` VARCHAR(191) NOT NULL DEFAULT '通用', `style` VARCHAR(191) NOT NULL DEFAULT '专业严谨', `bookScale` VARCHAR(191) NOT NULL DEFAULT '标准教程', `totalChapters` INTEGER NOT NULL DEFAULT 10, `estimatedWords` INTEGER NOT NULL DEFAULT 0, `status` VARCHAR(191) NOT NULL DEFAULT 'draft', `progress` INTEGER NOT NULL DEFAULT 0, `isPublished` BOOLEAN NOT NULL DEFAULT false, `outlineJson` LONGTEXT NULL, `foreword` TEXT NULL, `afterword` TEXT NULL, `errorMsg` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Book_userId_status_idx`(`userId`, `status`), INDEX `Book_createdAt_idx`(`createdAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `BookChapter` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `bookId` INTEGER NOT NULL, `parentId` INTEGER NULL, `level` INTEGER NOT NULL DEFAULT 1, `number` INTEGER NOT NULL, `title` VARCHAR(191) NOT NULL, `summary` TEXT NULL, `keyPoints` TEXT NULL, `estimatedWords` INTEGER NOT NULL DEFAULT 1000, `content` LONGTEXT NULL, `wordCount` INTEGER NOT NULL DEFAULT 0, `status` VARCHAR(191) NOT NULL DEFAULT 'pending', `contentStatus` VARCHAR(20) NULL, `contentError` TEXT NULL, `generatedAt` DATETIME(3) NULL, `audioUrl` TEXT NULL, `audioDuration` INTEGER NOT NULL DEFAULT 0, `videoUrl` TEXT NULL, `videoDuration` INTEGER NULL, `isPublic` BOOLEAN NOT NULL DEFAULT false, INDEX `BookChapter_bookId_idx`(`bookId`), INDEX `BookChapter_bookId_parentId_idx`(`bookId`, `parentId`), INDEX `BookChapter_bookId_level_idx`(`bookId`, `level`), UNIQUE INDEX `BookChapter_bookId_parentId_level_number_key`(`bookId`, `parentId`, `level`, `number`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `VideoProject` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NULL, `title` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NULL, `coverUrl` VARCHAR(191) NULL, `configJson` LONGTEXT NULL, `outputUrl` VARCHAR(191) NULL, `duration` INTEGER NULL, `fileSize` INTEGER NULL, `bookId` INTEGER NULL, `chapterId` INTEGER NULL, `status` VARCHAR(191) NOT NULL DEFAULT 'draft', `progress` INTEGER NOT NULL DEFAULT 0, `errorMsg` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `VideoProject_userId_status_idx`(`userId`, `status`), INDEX `VideoProject_createdAt_idx`(`createdAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `SearchHistory` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `keyword` VARCHAR(191) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `SearchHistory_userId_createdAt_idx`(`userId`, `createdAt`), INDEX `SearchHistory_userId_idx`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `HotSearch` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `keyword` VARCHAR(191) NOT NULL, `count` INTEGER NOT NULL DEFAULT 0, `sort` INTEGER NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `HotSearch_sort_idx`(`sort`), INDEX `HotSearch_count_idx`(`count`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `SignRecord` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `SignRecord_userId_createdAt_idx`(`userId`, `createdAt`), UNIQUE INDEX `SignRecord_userId_createdAt_key`(`userId`, `createdAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `SubscriptionPlan` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `level` INTEGER NOT NULL DEFAULT 0, `priceMonthly` DECIMAL(10, 2) NOT NULL DEFAULT 0, `priceYearly` DECIMAL(10, 2) NOT NULL DEFAULT 0, `description` TEXT NULL, `features` TEXT NULL, `isRecommended` BOOLEAN NOT NULL DEFAULT false, `isActive` BOOLEAN NOT NULL DEFAULT true, `sortOrder` INTEGER NOT NULL DEFAULT 0, `dailyGenerations` INTEGER NOT NULL DEFAULT 3, `perGenerationLimit` INTEGER NOT NULL DEFAULT 2000, `monthlyTokens` INTEGER NOT NULL DEFAULT 10000, `monthlyMinutes` INTEGER NOT NULL DEFAULT 30, `yearlyTokens` INTEGER NULL, `voiceOptions` INTEGER NOT NULL DEFAULT 5, `audioQuality` VARCHAR(191) NOT NULL DEFAULT 'standard', `apiAccess` BOOLEAN NOT NULL DEFAULT false, `batchProcessing` BOOLEAN NOT NULL DEFAULT false, `teamManagement` BOOLEAN NOT NULL DEFAULT false, `overageEnabled` BOOLEAN NOT NULL DEFAULT false, `overagePrice` DECIMAL(10, 2) NOT NULL DEFAULT 0, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `SubscriptionPlan_level_idx`(`level`), INDEX `SubscriptionPlan_isActive_sortOrder_idx`(`isActive`, `sortOrder`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Subscription` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `planId` INTEGER NOT NULL, `startDate` DATETIME(3) NOT NULL, `endDate` DATETIME(3) NOT NULL, `status` VARCHAR(191) NOT NULL DEFAULT 'active', `autoRenew` BOOLEAN NOT NULL DEFAULT false, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Subscription_userId_status_idx`(`userId`, `status`), INDEX `Subscription_userId_endDate_idx`(`userId`, `endDate`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `TokenUsage` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `type` VARCHAR(191) NOT NULL, `amount` INTEGER NOT NULL DEFAULT 0, `contentLength` INTEGER NOT NULL DEFAULT 0, `orderId` INTEGER NULL, `description` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `TokenUsage_userId_createdAt_idx`(`userId`, `createdAt`), INDEX `TokenUsage_userId_type_idx`(`userId`, `type`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `TokenBalance` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `totalTokens` INTEGER NOT NULL DEFAULT 0, `usedTokens` INTEGER NOT NULL DEFAULT 0, `resetDate` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `TokenBalance_userId_key`(`userId`), INDEX `TokenBalance_userId_idx`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `VideoMaterial` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NULL, `type` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `url` TEXT NOT NULL, `thumbnail` VARCHAR(191) NULL, `tags` TEXT NULL, `category` VARCHAR(191) NULL, `duration` INTEGER NULL, `size` INTEGER NULL, `width` INTEGER NULL, `height` INTEGER NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `VideoMaterial_userId_type_idx`(`userId`, `type`), INDEX `VideoMaterial_type_category_idx`(`type`, `category`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AudioRecord` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NULL, `audioId` VARCHAR(191) NOT NULL, `title` VARCHAR(191) NOT NULL DEFAULT '未命名音频', `text` LONGTEXT NULL, `wordCount` INTEGER NOT NULL DEFAULT 0, `voiceId` VARCHAR(191) NOT NULL DEFAULT 'cherry', `voiceParams` VARCHAR(191) NULL, `audioUrl` TEXT NULL, `audioDuration` INTEGER NOT NULL DEFAULT 0, `audioSize` INTEGER NOT NULL DEFAULT 0, `status` VARCHAR(191) NOT NULL DEFAULT 'processing', `errorMsg` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `AudioRecord_audioId_key`(`audioId`), INDEX `AudioRecord_userId_idx`(`userId`), INDEX `AudioRecord_audioId_idx`(`audioId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `PlatformAccount` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `platform` VARCHAR(191) NOT NULL, `nickname` VARCHAR(191) NOT NULL DEFAULT '', `avatar` VARCHAR(191) NOT NULL DEFAULT '', `cookies` TEXT NOT NULL, `headers` TEXT NULL, `isValid` BOOLEAN NOT NULL DEFAULT true, `expireTime` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `PlatformAccount_userId_idx`(`userId`), INDEX `PlatformAccount_platform_idx`(`platform`), UNIQUE INDEX `PlatformAccount_userId_platform_key`(`userId`, `platform`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `PublishTask` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `videoProjectId` INTEGER NOT NULL, `platform` VARCHAR(191) NOT NULL, `title` TEXT NOT NULL, `description` TEXT NULL, `tags` TEXT NULL, `coverUrl` TEXT NULL, `videoUrl` TEXT NULL, `status` VARCHAR(191) NOT NULL DEFAULT 'pending', `errorMsg` TEXT NULL, `publishedUrl` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `PublishTask_userId_platform_idx`(`userId`, `platform`), INDEX `PublishTask_status_idx`(`status`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Draft` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `type` VARCHAR(191) NOT NULL, `title` TEXT NULL, `content` LONGTEXT NULL, `metadata` TEXT NULL, `autoSavedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Draft_userId_type_idx`(`userId`, `type`), INDEX `Draft_userId_updatedAt_idx`(`userId`, `updatedAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Playlist` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NOT NULL, `name` VARCHAR(191) NOT NULL, `description` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Playlist_userId_idx`(`userId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `PlaylistItem` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `playlistId` INTEGER NOT NULL, `chapterId` INTEGER NULL, `audioId` VARCHAR(191) NULL, `order` INTEGER NOT NULL DEFAULT 0, INDEX `PlaylistItem_playlistId_order_idx`(`playlistId`, `order`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `Order` ADD CONSTRAINT `Order_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Order` ADD CONSTRAINT `Order_planId_fkey` FOREIGN KEY (`planId`) REFERENCES `SubscriptionPlan`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `PlayRecord` ADD CONSTRAINT `PlayRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `PlayRecord` ADD CONSTRAINT `PlayRecord_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserPreference` ADD CONSTRAINT `UserPreference_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Favorite` ADD CONSTRAINT `Favorite_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Favorite` ADD CONSTRAINT `Favorite_bookId_fkey` FOREIGN KEY (`bookId`) REFERENCES `Book`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Comment` ADD CONSTRAINT `Comment_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Comment` ADD CONSTRAINT `Comment_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `BookChapter` ADD CONSTRAINT `BookChapter_bookId_fkey` FOREIGN KEY (`bookId`) REFERENCES `Book`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `VideoProject` ADD CONSTRAINT `VideoProject_bookId_fkey` FOREIGN KEY (`bookId`) REFERENCES `Book`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `VideoProject` ADD CONSTRAINT `VideoProject_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `SignRecord` ADD CONSTRAINT `SignRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Subscription` ADD CONSTRAINT `Subscription_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Subscription` ADD CONSTRAINT `Subscription_planId_fkey` FOREIGN KEY (`planId`) REFERENCES `SubscriptionPlan`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `TokenUsage` ADD CONSTRAINT `TokenUsage_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `TokenUsage` ADD CONSTRAINT `TokenUsage_orderId_fkey` FOREIGN KEY (`orderId`) REFERENCES `Order`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `TokenBalance` ADD CONSTRAINT `TokenBalance_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Draft` ADD CONSTRAINT `Draft_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Playlist` ADD CONSTRAINT `Playlist_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `PlaylistItem` ADD CONSTRAINT `PlaylistItem_playlistId_fkey` FOREIGN KEY (`playlistId`) REFERENCES `Playlist`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `PlaylistItem` ADD CONSTRAINT `PlaylistItem_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;