video-media.prisma 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. type vTag {
  2. tagId String
  3. tagName String
  4. }
  5. model VideoMedia {
  6. /// Mongo ObjectId stored in `_id`
  7. id String @id @map("_id") @db.ObjectId
  8. vid Int? @unique
  9. srcId Int @default(0)
  10. title String @default("")
  11. checkSum String @default("")
  12. type String @default("")
  13. formatType Int @default(0)
  14. contentType Int @default(0)
  15. coverType Int @default(0)
  16. coverImg String @default("")
  17. coverImgNew String @default("")
  18. /// Duration in seconds
  19. videoTime Int @default(0)
  20. publish String @default("")
  21. country String @default("")
  22. firstTag String @default("")
  23. secondTags String[] @default([])
  24. mediaSet String? @default("") // null allowed for legacy data
  25. preFileName String @default("")
  26. status String @default("")
  27. desc String @default("")
  28. /// File size can exceed 32-bit, but default still 0
  29. size BigInt @default(0)
  30. bango String @default("")
  31. actors String[] @default([]) // allow null for old data, default []
  32. studio String @default("")
  33. addedTime DateTime
  34. createdAt DateTime
  35. updatedAt DateTime
  36. appids Int[] @default([])
  37. japanNames String[] @default([])
  38. filename String @default("")
  39. fieldNameFs String @default("")
  40. ext String @default("")
  41. taskId String @default("")
  42. width Int @default(0)
  43. height Int @default(0)
  44. ratio Float @default(0)
  45. frameRate String @default("")
  46. syBitRate String @default("")
  47. vidBitRate String @default("")
  48. proxyUpload Int @default(0)
  49. isAdd Boolean @default(false)
  50. retry Int @default(0)
  51. notifySignal Boolean @default(false)
  52. mergeRetry Int @default(0)
  53. compressRetry Int @default(0)
  54. segmentRetry Int @default(0)
  55. linodeRetry Int @default(0)
  56. failReason String @default("")
  57. deleteDisk Boolean @default(false)
  58. infoTsName String @default("")
  59. sanitizedSecondTags String[] @default([])
  60. // all above fields are from provider, keep original, avoid updating,
  61. // use below fields for local video media controls
  62. categoryIds String[] @default([]) @db.ObjectId // 分类 IDs (local, supports multiple categories)
  63. tagIds String[] @default([]) @db.ObjectId // 标签 IDs (local, max 5)
  64. /// Denormalised tag names for fast read (store lowercased or display names)
  65. tags String[] @default([])
  66. vTags vTag[]
  67. /// Lowercased concatenation of tag names, for search
  68. tagsFlat String @default("")
  69. listStatus Int @default(0) // 上/下架
  70. editedAt BigInt @default(0) // 本地编辑时间 (epoch ms)
  71. imgSource ImageSource @default(PROVIDER)
  72. providerCode String? // external provider code (optional)
  73. providerVideoId String? // external provider video id (optional)
  74. // Relations (optional, just for Prisma)
  75. // category Category? @relation(fields: [categoryId], references: [id])
  76. @@map("videoMedia")
  77. // ===== Indexes =====
  78. /// For fuzzy tag search + status filter (app search)
  79. @@index([listStatus, tagsFlat], map: "idx_videoMedia_listStatus_tagsFlat")
  80. /// For mgnt filtering by category (multi-key index for array of categoryIds)
  81. @@index([categoryIds], map: "idx_videoMedia_categoryIds")
  82. /// For mgnt filtering by tagIds (multi-key index)
  83. @@index([tagIds], map: "idx_videoMedia_tagIds")
  84. /// For common sorting by addedTime (provider ordering)
  85. @@index([addedTime], map: "idx_videoMedia_addedTime")
  86. }