| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- type vTag {
- tagId String
- tagName String
- }
- model VideoMedia {
- /// Mongo ObjectId stored in `_id`
- id String @id @map("_id") @db.ObjectId
- vid Int? @unique
- srcId Int @default(0)
- title String @default("")
- checkSum String @default("")
- type String @default("")
- formatType Int @default(0)
- contentType Int @default(0)
- coverType Int @default(0)
- coverImg String @default("")
- coverImgNew String @default("")
- /// Duration in seconds
- videoTime Int @default(0)
- publish String @default("")
- country String @default("")
- firstTag String @default("")
- secondTags String[] @default([])
- mediaSet String? @default("") // null allowed for legacy data
- preFileName String @default("")
- status String @default("")
- desc String @default("")
- /// File size can exceed 32-bit, but default still 0
- size BigInt @default(0)
- bango String @default("")
- actors String[] @default([]) // allow null for old data, default []
- studio String @default("")
- addedTime DateTime
- createdAt DateTime
- updatedAt DateTime
- appids Int[] @default([])
- japanNames String[] @default([])
- filename String @default("")
- fieldNameFs String @default("")
- ext String @default("")
- taskId String @default("")
- width Int @default(0)
- height Int @default(0)
- ratio Float @default(0)
- frameRate String @default("")
- syBitRate String @default("")
- vidBitRate String @default("")
- proxyUpload Int @default(0)
- isAdd Boolean @default(false)
- retry Int @default(0)
- notifySignal Boolean @default(false)
- mergeRetry Int @default(0)
- compressRetry Int @default(0)
- segmentRetry Int @default(0)
- linodeRetry Int @default(0)
- failReason String @default("")
- deleteDisk Boolean @default(false)
- infoTsName String @default("")
- sanitizedSecondTags String[] @default([])
- // all above fields are from provider, keep original, avoid updating,
- // use below fields for local video media controls
- categoryIds String[] @default([]) @db.ObjectId // 分类 IDs (local, supports multiple categories)
- tagIds String[] @default([]) @db.ObjectId // 标签 IDs (local, max 5)
- /// Denormalised tag names for fast read (store lowercased or display names)
- tags String[] @default([])
- vTags vTag[]
-
- /// Lowercased concatenation of tag names, for search
- tagsFlat String @default("")
- listStatus Int @default(0) // 上/下架
- editedAt BigInt @default(0) // 本地编辑时间 (epoch ms)
- imgSource ImageSource @default(PROVIDER)
- providerCode String? // external provider code (optional)
- providerVideoId String? // external provider video id (optional)
- // Relations (optional, just for Prisma)
- // category Category? @relation(fields: [categoryId], references: [id])
- @@map("videoMedia")
- // ===== Indexes =====
- /// For fuzzy tag search + status filter (app search)
- @@index([listStatus, tagsFlat], map: "idx_videoMedia_listStatus_tagsFlat")
- /// For mgnt filtering by category (multi-key index for array of categoryIds)
- @@index([categoryIds], map: "idx_videoMedia_categoryIds")
- /// For mgnt filtering by tagIds (multi-key index)
- @@index([tagIds], map: "idx_videoMedia_tagIds")
- /// For common sorting by addedTime (provider ordering)
- @@index([addedTime], map: "idx_videoMedia_addedTime")
- }
|