video-media.prisma 3.6 KB

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