model VideoMedia { /// Mongo ObjectId stored in `_id` id String @id @map("_id") @db.ObjectId 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("") // all above fields are from provider, keep original, avoid updating, // use below fields for local video media controls categoryId String? @db.ObjectId // 分类 ID (local) tagIds String[] @default([]) @db.ObjectId // 标签 IDs (local, max 5) /// Denormalised tag names for fast read (store lowercased or display names) tags String[] @default([]) /// Lowercased concatenation of tag names, for search tagsFlat String @default("") listStatus Int @default(0) // 上/下架 editedAt BigInt @default(0) // 本地编辑时间 (epoch ms) // 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 @@index([categoryId], map: "idx_videoMedia_categoryId") /// 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") }