From 20a206c3d12ad285c31411cd506cede791958322 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 11 Jun 2021 14:26:37 +0200 Subject: Refactor include checks --- .../video/sql/video-model-get-query-builder.ts | 102 ++++++++++----------- 1 file changed, 49 insertions(+), 53 deletions(-) (limited to 'server/models/video') diff --git a/server/models/video/sql/video-model-get-query-builder.ts b/server/models/video/sql/video-model-get-query-builder.ts index f56fdd474..2545f887e 100644 --- a/server/models/video/sql/video-model-get-query-builder.ts +++ b/server/models/video/sql/video-model-get-query-builder.ts @@ -10,11 +10,21 @@ import { VideoTables } from './shared/video-tables' * */ +export type GetType = + 'api' | + 'full-light' | + 'account-blacklist-files' | + 'all-files' | + 'thumbnails' | + 'thumbnails-blacklist' | + 'id' | + 'blacklist-rights' + export type BuildVideoGetQueryOptions = { id?: number | string url?: string - type: 'api' | 'full-light' | 'account-blacklist-files' | 'all-files' | 'thumbnails' | 'thumbnails-blacklist' | 'id' | 'blacklist-rights' + type: GetType userId?: number transaction?: Transaction @@ -29,6 +39,8 @@ export class VideosModelGetQueryBuilder { private readonly videoModelBuilder: VideoModelBuilder + private static readonly videoFilesInclude = new Set([ 'api', 'full-light', 'account-blacklist-files', 'all-files' ]) + constructor (protected readonly sequelize: Sequelize) { this.videoQueryBuilder = new VideosModelGetQuerySubBuilder(sequelize) this.webtorrentFilesQueryBuilder = new VideoFileQueryBuilder(sequelize) @@ -41,11 +53,11 @@ export class VideosModelGetQueryBuilder { const [ videoRows, webtorrentFilesRows, streamingPlaylistFilesRows ] = await Promise.all([ this.videoQueryBuilder.queryVideos(options), - this.shouldQueryVideoFiles(options) + VideosModelGetQueryBuilder.videoFilesInclude.has(options.type) ? this.webtorrentFilesQueryBuilder.queryWebTorrentVideos(options) : Promise.resolve(undefined), - this.shouldQueryVideoFiles(options) + VideosModelGetQueryBuilder.videoFilesInclude.has(options.type) ? this.streamingPlaylistFilesQueryBuilder.queryStreamingPlaylistVideos(options) : Promise.resolve(undefined) ]) @@ -59,10 +71,6 @@ export class VideosModelGetQueryBuilder { if (videos.length === 0) return null return videos[0] } - - private shouldQueryVideoFiles (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light', 'account-blacklist-files', 'all-files' ].includes(options.type) - } } export class VideosModelGetQuerySubBuilder extends AbstractVideosModelQueryBuilder { @@ -71,6 +79,30 @@ export class VideosModelGetQuerySubBuilder extends AbstractVideosModelQueryBuild protected webtorrentFilesQuery: string protected streamingPlaylistFilesQuery: string + private static readonly trackersInclude = new Set([ 'api' ]) + private static readonly liveInclude = new Set([ 'api', 'full-light' ]) + private static readonly scheduleUpdateInclude = new Set([ 'api', 'full-light' ]) + private static readonly tagsInclude = new Set([ 'api', 'full-light' ]) + private static readonly userHistoryInclude = new Set([ 'api', 'full-light' ]) + private static readonly accountInclude = new Set([ 'api', 'full-light', 'account-blacklist-files' ]) + private static readonly ownerUserInclude = new Set([ 'blacklist-rights' ]) + + private static readonly blacklistedInclude = new Set([ + 'api', + 'full-light', + 'account-blacklist-files', + 'thumbnails-blacklist', + 'blacklist-rights' + ]) + + private static readonly thumbnailsInclude = new Set([ + 'api', + 'full-light', + 'account-blacklist-files', + 'thumbnails', + 'thumbnails-blacklist' + ]) + constructor (protected readonly sequelize: Sequelize) { super('get') } @@ -86,40 +118,40 @@ export class VideosModelGetQuerySubBuilder extends AbstractVideosModelQueryBuild '"video".*': '' } - if (this.shouldIncludeThumbnails(options)) { + if (VideosModelGetQuerySubBuilder.thumbnailsInclude.has(options.type)) { this.includeThumbnails() } - if (this.shouldIncludeBlacklisted(options)) { + if (VideosModelGetQuerySubBuilder.blacklistedInclude.has(options.type)) { this.includeBlacklisted() } - if (this.shouldIncludeAccount(options)) { + if (VideosModelGetQuerySubBuilder.accountInclude.has(options.type)) { this.includeChannels() this.includeAccounts() } - if (this.shouldIncludeTags(options)) { + if (VideosModelGetQuerySubBuilder.tagsInclude.has(options.type)) { this.includeTags() } - if (this.shouldIncludeScheduleUpdate(options)) { + if (VideosModelGetQuerySubBuilder.scheduleUpdateInclude.has(options.type)) { this.includeScheduleUpdate() } - if (this.shouldIncludeLive(options)) { + if (VideosModelGetQuerySubBuilder.liveInclude.has(options.type)) { this.includeLive() } - if (options.userId && this.shouldIncludeUserHistory(options)) { + if (options.userId && VideosModelGetQuerySubBuilder.userHistoryInclude.has(options.type)) { this.includeUserHistory(options.userId) } - if (this.shouldIncludeOwnerUser(options)) { + if (VideosModelGetQuerySubBuilder.ownerUserInclude.has(options.type)) { this.includeOwnerUser() } - if (this.shouldIncludeTrackers(options)) { + if (VideosModelGetQuerySubBuilder.trackersInclude.has(options.type)) { this.includeTrackers() } @@ -129,7 +161,7 @@ export class VideosModelGetQuerySubBuilder extends AbstractVideosModelQueryBuild } private buildQuery (options: BuildVideoGetQueryOptions) { - const order = this.shouldIncludeTags(options) + const order = VideosModelGetQuerySubBuilder.tagsInclude.has(options.type) ? 'ORDER BY "Tags"."name" ASC' : '' @@ -137,40 +169,4 @@ export class VideosModelGetQuerySubBuilder extends AbstractVideosModelQueryBuild return `${this.buildSelect()} FROM (${from}) AS "video" ${this.joins} ${order}` } - - private shouldIncludeTrackers (options: BuildVideoGetQueryOptions) { - return options.type === 'api' - } - - private shouldIncludeLive (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light' ].includes(options.type) - } - - private shouldIncludeScheduleUpdate (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light' ].includes(options.type) - } - - private shouldIncludeTags (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light' ].includes(options.type) - } - - private shouldIncludeUserHistory (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light' ].includes(options.type) - } - - private shouldIncludeAccount (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light', 'account-blacklist-files' ].includes(options.type) - } - - private shouldIncludeBlacklisted (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light', 'account-blacklist-files', 'thumbnails-blacklist', 'blacklist-rights' ].includes(options.type) - } - - private shouldIncludeOwnerUser (options: BuildVideoGetQueryOptions) { - return options.type === 'blacklist-rights' - } - - private shouldIncludeThumbnails (options: BuildVideoGetQueryOptions) { - return [ 'api', 'full-light', 'account-blacklist-files', 'thumbnails', 'thumbnails-blacklist' ].includes(options.type) - } } -- cgit v1.2.3