migration.sql 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. -- CreateTable
  2. CREATE TABLE `User` (
  3. `id` INTEGER NOT NULL AUTO_INCREMENT,
  4. `phone` VARCHAR(191) NULL,
  5. `openid` VARCHAR(191) NULL,
  6. `nickname` VARCHAR(191) NOT NULL DEFAULT '用户',
  7. `avatar` VARCHAR(191) NOT NULL DEFAULT '',
  8. `memberLevel` INTEGER NOT NULL DEFAULT 0,
  9. `memberExpireAt` DATETIME(3) NULL,
  10. `dailyUsage` INTEGER NOT NULL DEFAULT 0,
  11. `lastUsageDate` VARCHAR(191) NOT NULL DEFAULT '',
  12. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  13. `updatedAt` DATETIME(3) NOT NULL,
  14. `usedAudioMinutes` INTEGER NOT NULL DEFAULT 0,
  15. `subscriptionResetDate` DATETIME(3) NULL,
  16. UNIQUE INDEX `User_phone_key`(`phone`),
  17. UNIQUE INDEX `User_openid_key`(`openid`),
  18. INDEX `User_phone_idx`(`phone`),
  19. INDEX `User_openid_idx`(`openid`),
  20. PRIMARY KEY (`id`)
  21. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  22. -- CreateTable
  23. CREATE TABLE `Order` (
  24. `id` INTEGER NOT NULL AUTO_INCREMENT,
  25. `userId` INTEGER NOT NULL,
  26. `orderNo` VARCHAR(191) NOT NULL,
  27. `planId` INTEGER NULL,
  28. `productType` VARCHAR(191) NOT NULL,
  29. `amount` DECIMAL(10, 2) NOT NULL,
  30. `status` VARCHAR(191) NOT NULL DEFAULT 'pending',
  31. `paymentMethod` VARCHAR(191) NULL,
  32. `paymentId` VARCHAR(191) NULL,
  33. `paidAt` DATETIME(3) NULL,
  34. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  35. `updatedAt` DATETIME(3) NOT NULL,
  36. UNIQUE INDEX `Order_orderNo_key`(`orderNo`),
  37. INDEX `Order_userId_createdAt_idx`(`userId`, `createdAt`),
  38. INDEX `Order_orderNo_idx`(`orderNo`),
  39. INDEX `Order_status_idx`(`status`),
  40. PRIMARY KEY (`id`)
  41. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  42. -- CreateTable
  43. CREATE TABLE `PlayRecord` (
  44. `id` INTEGER NOT NULL AUTO_INCREMENT,
  45. `userId` INTEGER NOT NULL,
  46. `chapterId` INTEGER NOT NULL,
  47. `progress` DOUBLE NOT NULL DEFAULT 0,
  48. `duration` DOUBLE NOT NULL DEFAULT 0,
  49. `updatedAt` DATETIME(3) NOT NULL,
  50. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  51. INDEX `PlayRecord_userId_idx`(`userId`),
  52. INDEX `PlayRecord_chapterId_idx`(`chapterId`),
  53. UNIQUE INDEX `PlayRecord_userId_chapterId_key`(`userId`, `chapterId`),
  54. PRIMARY KEY (`id`)
  55. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  56. -- CreateTable
  57. CREATE TABLE `UserPreference` (
  58. `id` INTEGER NOT NULL AUTO_INCREMENT,
  59. `userId` INTEGER NOT NULL,
  60. `playSpeed` DOUBLE NOT NULL DEFAULT 1.0,
  61. `quality` VARCHAR(191) NOT NULL DEFAULT 'standard',
  62. `theme` VARCHAR(191) NOT NULL DEFAULT 'light',
  63. `defaultVoiceId` VARCHAR(191) NULL DEFAULT 'cherry',
  64. `defaultVolume` INTEGER NOT NULL DEFAULT 50,
  65. `autoPlayNext` BOOLEAN NOT NULL DEFAULT true,
  66. `wifiOnlyDownload` BOOLEAN NOT NULL DEFAULT false,
  67. `updatedAt` DATETIME(3) NOT NULL,
  68. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  69. UNIQUE INDEX `UserPreference_userId_key`(`userId`),
  70. PRIMARY KEY (`id`)
  71. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  72. -- CreateTable
  73. CREATE TABLE `Favorite` (
  74. `id` INTEGER NOT NULL AUTO_INCREMENT,
  75. `userId` INTEGER NOT NULL,
  76. `bookId` INTEGER NOT NULL,
  77. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  78. INDEX `Favorite_userId_idx`(`userId`),
  79. INDEX `Favorite_bookId_idx`(`bookId`),
  80. UNIQUE INDEX `Favorite_userId_bookId_key`(`userId`, `bookId`),
  81. PRIMARY KEY (`id`)
  82. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  83. -- CreateTable
  84. CREATE TABLE `Comment` (
  85. `id` INTEGER NOT NULL AUTO_INCREMENT,
  86. `userId` INTEGER NOT NULL,
  87. `chapterId` INTEGER NOT NULL,
  88. `content` TEXT NOT NULL,
  89. `rating` INTEGER NOT NULL,
  90. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  91. INDEX `Comment_chapterId_idx`(`chapterId`),
  92. INDEX `Comment_userId_idx`(`userId`),
  93. PRIMARY KEY (`id`)
  94. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  95. -- CreateTable
  96. CREATE TABLE `Notification` (
  97. `id` VARCHAR(191) NOT NULL,
  98. `userId` VARCHAR(191) NOT NULL,
  99. `title` VARCHAR(191) NOT NULL,
  100. `content` TEXT NOT NULL,
  101. `isRead` BOOLEAN NOT NULL DEFAULT false,
  102. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  103. PRIMARY KEY (`id`)
  104. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  105. -- CreateTable
  106. CREATE TABLE `Book` (
  107. `id` INTEGER NOT NULL AUTO_INCREMENT,
  108. `userId` INTEGER NULL,
  109. `title` VARCHAR(191) NOT NULL,
  110. `subtitle` VARCHAR(191) NULL,
  111. `description` TEXT NOT NULL,
  112. `coverUrl` VARCHAR(191) NULL,
  113. `targetAudience` VARCHAR(191) NOT NULL DEFAULT '通用',
  114. `style` VARCHAR(191) NOT NULL DEFAULT '专业严谨',
  115. `bookScale` VARCHAR(191) NOT NULL DEFAULT '标准教程',
  116. `totalChapters` INTEGER NOT NULL DEFAULT 10,
  117. `estimatedWords` INTEGER NOT NULL DEFAULT 0,
  118. `status` VARCHAR(191) NOT NULL DEFAULT 'draft',
  119. `progress` INTEGER NOT NULL DEFAULT 0,
  120. `isPublished` BOOLEAN NOT NULL DEFAULT false,
  121. `outlineJson` LONGTEXT NULL,
  122. `foreword` TEXT NULL,
  123. `afterword` TEXT NULL,
  124. `errorMsg` TEXT NULL,
  125. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  126. `updatedAt` DATETIME(3) NOT NULL,
  127. INDEX `Book_userId_status_idx`(`userId`, `status`),
  128. INDEX `Book_createdAt_idx`(`createdAt`),
  129. PRIMARY KEY (`id`)
  130. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  131. -- CreateTable
  132. CREATE TABLE `BookChapter` (
  133. `id` INTEGER NOT NULL AUTO_INCREMENT,
  134. `bookId` INTEGER NOT NULL,
  135. `parentId` INTEGER NULL,
  136. `level` INTEGER NOT NULL DEFAULT 1,
  137. `number` INTEGER NOT NULL,
  138. `title` VARCHAR(191) NOT NULL,
  139. `summary` TEXT NULL,
  140. `keyPoints` TEXT NULL,
  141. `estimatedWords` INTEGER NOT NULL DEFAULT 1000,
  142. `content` LONGTEXT NULL,
  143. `wordCount` INTEGER NOT NULL DEFAULT 0,
  144. `status` VARCHAR(191) NOT NULL DEFAULT 'pending',
  145. `contentStatus` VARCHAR(20) NULL,
  146. `contentError` TEXT NULL,
  147. `generatedAt` DATETIME(3) NULL,
  148. `audioUrl` TEXT NULL,
  149. `audioDuration` INTEGER NOT NULL DEFAULT 0,
  150. `videoUrl` TEXT NULL,
  151. `videoDuration` INTEGER NULL,
  152. `isPublic` BOOLEAN NOT NULL DEFAULT false,
  153. INDEX `BookChapter_bookId_idx`(`bookId`),
  154. INDEX `BookChapter_bookId_parentId_idx`(`bookId`, `parentId`),
  155. INDEX `BookChapter_bookId_level_idx`(`bookId`, `level`),
  156. UNIQUE INDEX `BookChapter_bookId_parentId_level_number_key`(`bookId`, `parentId`, `level`, `number`),
  157. PRIMARY KEY (`id`)
  158. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  159. -- CreateTable
  160. CREATE TABLE `VideoProject` (
  161. `id` INTEGER NOT NULL AUTO_INCREMENT,
  162. `userId` INTEGER NULL,
  163. `title` VARCHAR(191) NOT NULL,
  164. `description` VARCHAR(191) NULL,
  165. `coverUrl` VARCHAR(191) NULL,
  166. `configJson` LONGTEXT NULL,
  167. `outputUrl` VARCHAR(191) NULL,
  168. `duration` INTEGER NULL,
  169. `fileSize` INTEGER NULL,
  170. `bookId` INTEGER NULL,
  171. `chapterId` INTEGER NULL,
  172. `status` VARCHAR(191) NOT NULL DEFAULT 'draft',
  173. `progress` INTEGER NOT NULL DEFAULT 0,
  174. `errorMsg` TEXT NULL,
  175. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  176. `updatedAt` DATETIME(3) NOT NULL,
  177. INDEX `VideoProject_userId_status_idx`(`userId`, `status`),
  178. INDEX `VideoProject_createdAt_idx`(`createdAt`),
  179. PRIMARY KEY (`id`)
  180. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  181. -- CreateTable
  182. CREATE TABLE `SearchHistory` (
  183. `id` INTEGER NOT NULL AUTO_INCREMENT,
  184. `userId` INTEGER NOT NULL,
  185. `keyword` VARCHAR(191) NOT NULL,
  186. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  187. INDEX `SearchHistory_userId_createdAt_idx`(`userId`, `createdAt`),
  188. INDEX `SearchHistory_userId_idx`(`userId`),
  189. PRIMARY KEY (`id`)
  190. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  191. -- CreateTable
  192. CREATE TABLE `HotSearch` (
  193. `id` INTEGER NOT NULL AUTO_INCREMENT,
  194. `keyword` VARCHAR(191) NOT NULL,
  195. `count` INTEGER NOT NULL DEFAULT 0,
  196. `sort` INTEGER NOT NULL DEFAULT 0,
  197. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  198. `updatedAt` DATETIME(3) NOT NULL,
  199. INDEX `HotSearch_sort_idx`(`sort`),
  200. INDEX `HotSearch_count_idx`(`count`),
  201. PRIMARY KEY (`id`)
  202. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  203. -- CreateTable
  204. CREATE TABLE `SignRecord` (
  205. `id` INTEGER NOT NULL AUTO_INCREMENT,
  206. `userId` INTEGER NOT NULL,
  207. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  208. INDEX `SignRecord_userId_createdAt_idx`(`userId`, `createdAt`),
  209. UNIQUE INDEX `SignRecord_userId_createdAt_key`(`userId`, `createdAt`),
  210. PRIMARY KEY (`id`)
  211. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  212. -- CreateTable
  213. CREATE TABLE `SubscriptionPlan` (
  214. `id` INTEGER NOT NULL AUTO_INCREMENT,
  215. `name` VARCHAR(191) NOT NULL,
  216. `level` INTEGER NOT NULL DEFAULT 0,
  217. `priceMonthly` DECIMAL(10, 2) NOT NULL DEFAULT 0,
  218. `priceYearly` DECIMAL(10, 2) NOT NULL DEFAULT 0,
  219. `description` TEXT NULL,
  220. `features` TEXT NULL,
  221. `isRecommended` BOOLEAN NOT NULL DEFAULT false,
  222. `isActive` BOOLEAN NOT NULL DEFAULT true,
  223. `sortOrder` INTEGER NOT NULL DEFAULT 0,
  224. `dailyGenerations` INTEGER NOT NULL DEFAULT 3,
  225. `perGenerationLimit` INTEGER NOT NULL DEFAULT 2000,
  226. `monthlyTokens` INTEGER NOT NULL DEFAULT 10000,
  227. `monthlyMinutes` INTEGER NOT NULL DEFAULT 30,
  228. `yearlyTokens` INTEGER NULL,
  229. `voiceOptions` INTEGER NOT NULL DEFAULT 5,
  230. `audioQuality` VARCHAR(191) NOT NULL DEFAULT 'standard',
  231. `apiAccess` BOOLEAN NOT NULL DEFAULT false,
  232. `batchProcessing` BOOLEAN NOT NULL DEFAULT false,
  233. `teamManagement` BOOLEAN NOT NULL DEFAULT false,
  234. `overageEnabled` BOOLEAN NOT NULL DEFAULT false,
  235. `overagePrice` DECIMAL(10, 2) NOT NULL DEFAULT 0,
  236. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  237. `updatedAt` DATETIME(3) NOT NULL,
  238. INDEX `SubscriptionPlan_level_idx`(`level`),
  239. INDEX `SubscriptionPlan_isActive_sortOrder_idx`(`isActive`, `sortOrder`),
  240. PRIMARY KEY (`id`)
  241. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  242. -- CreateTable
  243. CREATE TABLE `Subscription` (
  244. `id` INTEGER NOT NULL AUTO_INCREMENT,
  245. `userId` INTEGER NOT NULL,
  246. `planId` INTEGER NOT NULL,
  247. `startDate` DATETIME(3) NOT NULL,
  248. `endDate` DATETIME(3) NOT NULL,
  249. `status` VARCHAR(191) NOT NULL DEFAULT 'active',
  250. `autoRenew` BOOLEAN NOT NULL DEFAULT false,
  251. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  252. `updatedAt` DATETIME(3) NOT NULL,
  253. INDEX `Subscription_userId_status_idx`(`userId`, `status`),
  254. INDEX `Subscription_userId_endDate_idx`(`userId`, `endDate`),
  255. PRIMARY KEY (`id`)
  256. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  257. -- CreateTable
  258. CREATE TABLE `TokenUsage` (
  259. `id` INTEGER NOT NULL AUTO_INCREMENT,
  260. `userId` INTEGER NOT NULL,
  261. `type` VARCHAR(191) NOT NULL,
  262. `amount` INTEGER NOT NULL DEFAULT 0,
  263. `contentLength` INTEGER NOT NULL DEFAULT 0,
  264. `orderId` INTEGER NULL,
  265. `description` TEXT NULL,
  266. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  267. INDEX `TokenUsage_userId_createdAt_idx`(`userId`, `createdAt`),
  268. INDEX `TokenUsage_userId_type_idx`(`userId`, `type`),
  269. PRIMARY KEY (`id`)
  270. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  271. -- CreateTable
  272. CREATE TABLE `TokenBalance` (
  273. `id` INTEGER NOT NULL AUTO_INCREMENT,
  274. `userId` INTEGER NOT NULL,
  275. `totalTokens` INTEGER NOT NULL DEFAULT 0,
  276. `usedTokens` INTEGER NOT NULL DEFAULT 0,
  277. `resetDate` DATETIME(3) NULL,
  278. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  279. `updatedAt` DATETIME(3) NOT NULL,
  280. UNIQUE INDEX `TokenBalance_userId_key`(`userId`),
  281. INDEX `TokenBalance_userId_idx`(`userId`),
  282. PRIMARY KEY (`id`)
  283. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  284. -- CreateTable
  285. CREATE TABLE `VideoMaterial` (
  286. `id` INTEGER NOT NULL AUTO_INCREMENT,
  287. `userId` INTEGER NULL,
  288. `type` VARCHAR(191) NOT NULL,
  289. `name` VARCHAR(191) NOT NULL,
  290. `url` TEXT NOT NULL,
  291. `thumbnail` VARCHAR(191) NULL,
  292. `tags` TEXT NULL,
  293. `category` VARCHAR(191) NULL,
  294. `duration` INTEGER NULL,
  295. `size` INTEGER NULL,
  296. `width` INTEGER NULL,
  297. `height` INTEGER NULL,
  298. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  299. `updatedAt` DATETIME(3) NOT NULL,
  300. INDEX `VideoMaterial_userId_type_idx`(`userId`, `type`),
  301. INDEX `VideoMaterial_type_category_idx`(`type`, `category`),
  302. PRIMARY KEY (`id`)
  303. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  304. -- CreateTable
  305. CREATE TABLE `AudioRecord` (
  306. `id` INTEGER NOT NULL AUTO_INCREMENT,
  307. `userId` INTEGER NULL,
  308. `audioId` VARCHAR(191) NOT NULL,
  309. `title` VARCHAR(191) NOT NULL DEFAULT '未命名音频',
  310. `text` LONGTEXT NULL,
  311. `wordCount` INTEGER NOT NULL DEFAULT 0,
  312. `voiceId` VARCHAR(191) NOT NULL DEFAULT 'cherry',
  313. `voiceParams` VARCHAR(191) NULL,
  314. `audioUrl` TEXT NULL,
  315. `audioDuration` INTEGER NOT NULL DEFAULT 0,
  316. `audioSize` INTEGER NOT NULL DEFAULT 0,
  317. `status` VARCHAR(191) NOT NULL DEFAULT 'processing',
  318. `errorMsg` TEXT NULL,
  319. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  320. `updatedAt` DATETIME(3) NOT NULL,
  321. UNIQUE INDEX `AudioRecord_audioId_key`(`audioId`),
  322. INDEX `AudioRecord_userId_idx`(`userId`),
  323. INDEX `AudioRecord_audioId_idx`(`audioId`),
  324. PRIMARY KEY (`id`)
  325. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  326. -- CreateTable
  327. CREATE TABLE `PlatformAccount` (
  328. `id` INTEGER NOT NULL AUTO_INCREMENT,
  329. `userId` INTEGER NOT NULL,
  330. `platform` VARCHAR(191) NOT NULL,
  331. `nickname` VARCHAR(191) NOT NULL DEFAULT '',
  332. `avatar` VARCHAR(191) NOT NULL DEFAULT '',
  333. `cookies` TEXT NOT NULL,
  334. `headers` TEXT NULL,
  335. `isValid` BOOLEAN NOT NULL DEFAULT true,
  336. `expireTime` DATETIME(3) NULL,
  337. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  338. `updatedAt` DATETIME(3) NOT NULL,
  339. INDEX `PlatformAccount_userId_idx`(`userId`),
  340. INDEX `PlatformAccount_platform_idx`(`platform`),
  341. UNIQUE INDEX `PlatformAccount_userId_platform_key`(`userId`, `platform`),
  342. PRIMARY KEY (`id`)
  343. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  344. -- CreateTable
  345. CREATE TABLE `PublishTask` (
  346. `id` INTEGER NOT NULL AUTO_INCREMENT,
  347. `userId` INTEGER NOT NULL,
  348. `videoProjectId` INTEGER NOT NULL,
  349. `platform` VARCHAR(191) NOT NULL,
  350. `title` TEXT NOT NULL,
  351. `description` TEXT NULL,
  352. `tags` TEXT NULL,
  353. `coverUrl` TEXT NULL,
  354. `videoUrl` TEXT NULL,
  355. `status` VARCHAR(191) NOT NULL DEFAULT 'pending',
  356. `errorMsg` TEXT NULL,
  357. `publishedUrl` TEXT NULL,
  358. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  359. `updatedAt` DATETIME(3) NOT NULL,
  360. INDEX `PublishTask_userId_platform_idx`(`userId`, `platform`),
  361. INDEX `PublishTask_status_idx`(`status`),
  362. PRIMARY KEY (`id`)
  363. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  364. -- CreateTable
  365. CREATE TABLE `Draft` (
  366. `id` INTEGER NOT NULL AUTO_INCREMENT,
  367. `userId` INTEGER NOT NULL,
  368. `type` VARCHAR(191) NOT NULL,
  369. `title` TEXT NULL,
  370. `content` LONGTEXT NULL,
  371. `metadata` TEXT NULL,
  372. `autoSavedAt` DATETIME(3) NULL,
  373. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  374. `updatedAt` DATETIME(3) NOT NULL,
  375. INDEX `Draft_userId_type_idx`(`userId`, `type`),
  376. INDEX `Draft_userId_updatedAt_idx`(`userId`, `updatedAt`),
  377. PRIMARY KEY (`id`)
  378. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  379. -- CreateTable
  380. CREATE TABLE `Playlist` (
  381. `id` INTEGER NOT NULL AUTO_INCREMENT,
  382. `userId` INTEGER NOT NULL,
  383. `name` VARCHAR(191) NOT NULL,
  384. `description` TEXT NULL,
  385. `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  386. `updatedAt` DATETIME(3) NOT NULL,
  387. INDEX `Playlist_userId_idx`(`userId`),
  388. PRIMARY KEY (`id`)
  389. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  390. -- CreateTable
  391. CREATE TABLE `PlaylistItem` (
  392. `id` INTEGER NOT NULL AUTO_INCREMENT,
  393. `playlistId` INTEGER NOT NULL,
  394. `chapterId` INTEGER NULL,
  395. `audioId` VARCHAR(191) NULL,
  396. `order` INTEGER NOT NULL DEFAULT 0,
  397. INDEX `PlaylistItem_playlistId_order_idx`(`playlistId`, `order`),
  398. PRIMARY KEY (`id`)
  399. ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  400. -- AddForeignKey
  401. ALTER TABLE `Order` ADD CONSTRAINT `Order_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  402. -- AddForeignKey
  403. ALTER TABLE `Order` ADD CONSTRAINT `Order_planId_fkey` FOREIGN KEY (`planId`) REFERENCES `SubscriptionPlan`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
  404. -- AddForeignKey
  405. ALTER TABLE `PlayRecord` ADD CONSTRAINT `PlayRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  406. -- AddForeignKey
  407. ALTER TABLE `PlayRecord` ADD CONSTRAINT `PlayRecord_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  408. -- AddForeignKey
  409. ALTER TABLE `UserPreference` ADD CONSTRAINT `UserPreference_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  410. -- AddForeignKey
  411. ALTER TABLE `Favorite` ADD CONSTRAINT `Favorite_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  412. -- AddForeignKey
  413. ALTER TABLE `Favorite` ADD CONSTRAINT `Favorite_bookId_fkey` FOREIGN KEY (`bookId`) REFERENCES `Book`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
  414. -- AddForeignKey
  415. ALTER TABLE `Comment` ADD CONSTRAINT `Comment_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  416. -- AddForeignKey
  417. ALTER TABLE `Comment` ADD CONSTRAINT `Comment_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  418. -- AddForeignKey
  419. ALTER TABLE `BookChapter` ADD CONSTRAINT `BookChapter_bookId_fkey` FOREIGN KEY (`bookId`) REFERENCES `Book`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
  420. -- AddForeignKey
  421. ALTER TABLE `VideoProject` ADD CONSTRAINT `VideoProject_bookId_fkey` FOREIGN KEY (`bookId`) REFERENCES `Book`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
  422. -- AddForeignKey
  423. ALTER TABLE `VideoProject` ADD CONSTRAINT `VideoProject_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
  424. -- AddForeignKey
  425. ALTER TABLE `SignRecord` ADD CONSTRAINT `SignRecord_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  426. -- AddForeignKey
  427. ALTER TABLE `Subscription` ADD CONSTRAINT `Subscription_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  428. -- AddForeignKey
  429. ALTER TABLE `Subscription` ADD CONSTRAINT `Subscription_planId_fkey` FOREIGN KEY (`planId`) REFERENCES `SubscriptionPlan`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  430. -- AddForeignKey
  431. ALTER TABLE `TokenUsage` ADD CONSTRAINT `TokenUsage_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  432. -- AddForeignKey
  433. ALTER TABLE `TokenUsage` ADD CONSTRAINT `TokenUsage_orderId_fkey` FOREIGN KEY (`orderId`) REFERENCES `Order`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
  434. -- AddForeignKey
  435. ALTER TABLE `TokenBalance` ADD CONSTRAINT `TokenBalance_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  436. -- AddForeignKey
  437. ALTER TABLE `Draft` ADD CONSTRAINT `Draft_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  438. -- AddForeignKey
  439. ALTER TABLE `Playlist` ADD CONSTRAINT `Playlist_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
  440. -- AddForeignKey
  441. ALTER TABLE `PlaylistItem` ADD CONSTRAINT `PlaylistItem_playlistId_fkey` FOREIGN KEY (`playlistId`) REFERENCES `Playlist`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
  442. -- AddForeignKey
  443. ALTER TABLE `PlaylistItem` ADD CONSTRAINT `PlaylistItem_chapterId_fkey` FOREIGN KEY (`chapterId`) REFERENCES `BookChapter`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;