import { Sequelize } from 'sequelize' ; import { BuildVideoGetQueryOptions } from '../video-model-get-query-builder' ; import { AbstractVideoQueryBuilder } from './abstract-video-query-builder' ; /**
 *
 * Fetch files (webtorrent and streaming playlist) according to a video
 *
 */ export class VideoFileQueryBuilder extends AbstractVideoQueryBuilder { protected attributes : { [ key ] : string ; } ; constructor ( protected readonly sequelize ) { super ( 'get' ) ; } queryWebTorrentVideos ( options ) { this . buildWebtorrentFilesQuery ( options ) ; return this . runQuery ( options ) ; } queryStreamingPlaylistVideos ( options ) { this . buildVideoStreamingPlaylistFilesQuery ( options ) ; return this . runQuery ( options ) ; } private buildWebtorrentFilesQuery ( options ) { this . attributes = { '"video"."id"' : '' } ; this . includeWebtorrentFiles ( ) ; if ( this . shouldIncludeRedundancies ( options ) ) { this . includeWebTorrentRedundancies ( ) ; } this . whereId ( options ) ; this . query = this . buildQuery ( ) ; } private buildVideoStreamingPlaylistFilesQuery ( options ) { this . attributes = { '"video"."id"' : '' } ; this . includeStreamingPlaylistFiles ( ) ; if ( this . shouldIncludeRedundancies ( options ) ) { this . includeStreamingPlaylistRedundancies ( ) ; } this . whereId ( options ) ; this . query = this . buildQuery ( ) ; } private buildQuery ( ) { return `${ this . buildSelect ( ) } FROM "video" ${ this . joins } ${ this . where }` ; } private shouldIncludeRedundancies ( options ) { return options . type === 'api' ; } }