-import { values } from 'lodash'
import {
AllowNull,
BelongsTo,
UpdatedAt
} from 'sequelize-typescript'
import {
+ isVideoFileExtnameValid,
isVideoFileInfoHashValid,
isVideoFileResolutionValid,
isVideoFileSizeValid,
isVideoFPSResolutionValid
} from '../../helpers/custom-validators/videos'
-import { CONSTRAINTS_FIELDS } from '../../initializers'
import { throwIfNotValid } from '../utils'
import { VideoModel } from './video'
import * as Sequelize from 'sequelize'
size: number
@AllowNull(false)
- @Column(DataType.ENUM(values(CONSTRAINTS_FIELDS.VIDEOS.EXTNAME)))
+ @Is('VideoFileExtname', value => throwIfNotValid(value, isVideoFileExtnameValid, 'extname'))
+ @Column
extname: string
@AllowNull(false)
- @Is('VideoFileSize', value => throwIfNotValid(value, isVideoFileInfoHashValid, 'info hash'))
+ @Is('VideoFileInfohash', value => throwIfNotValid(value, isVideoFileInfoHashValid, 'info hash'))
@Column
infoHash: string
- @AllowNull(true)
- @Default(null)
+ @AllowNull(false)
+ @Default(-1)
@Is('VideoFileFPS', value => throwIfNotValid(value, isVideoFPSResolutionValid, 'fps'))
@Column
fps: number
@HasMany(() => VideoRedundancyModel, {
foreignKey: {
- allowNull: false
+ allowNull: true
},
onDelete: 'CASCADE',
hooks: true
})
RedundancyVideos: VideoRedundancyModel[]
- static isInfohashExists (infoHash: string) {
+ static doesInfohashExist (infoHash: string) {
const query = 'SELECT 1 FROM "videoFile" WHERE "infoHash" = $infoHash LIMIT 1'
const options = {
type: Sequelize.QueryTypes.SELECT,
return results.length === 1
})
}
+
+ static loadWithVideo (id: number) {
+ const options = {
+ include: [
+ {
+ model: VideoModel.unscoped(),
+ required: true
+ }
+ ]
+ }
+
+ return VideoFileModel.findByPk(id, options)
+ }
+
+ static async getStats () {
+ let totalLocalVideoFilesSize = await VideoFileModel.sum('size', {
+ include: [
+ {
+ attributes: [],
+ model: VideoModel.unscoped(),
+ where: {
+ remote: false
+ }
+ }
+ ]
+ } as any)
+ // Sequelize could return null...
+ if (!totalLocalVideoFilesSize) totalLocalVideoFilesSize = 0
+
+ return {
+ totalLocalVideoFilesSize
+ }
+ }
+
+ hasSameUniqueKeysThan (other: VideoFileModel) {
+ return this.fps === other.fps &&
+ this.resolution === other.resolution &&
+ this.videoId === other.videoId
+ }
}