]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Refactor include checks
authorChocobozzz <me@florianbigard.com>
Fri, 11 Jun 2021 12:26:37 +0000 (14:26 +0200)
committerChocobozzz <me@florianbigard.com>
Fri, 11 Jun 2021 12:26:37 +0000 (14:26 +0200)
server/controllers/activitypub/client.ts
server/lib/model-loaders/video.ts
server/middlewares/validators/shared/videos.ts
server/models/video/sql/video-model-get-query-builder.ts
server/typings/express/index.d.ts

index 444a8abaa7e4055eb692066f1184e4f19729c35f..f592af644e35fda6d4602e1ffbf8dc55b1e792e7 100644 (file)
@@ -31,7 +31,6 @@ import { videoPlaylistElementAPGetValidator, videoPlaylistsGetValidator } from '
 import { AccountModel } from '../../models/account/account'
 import { AccountVideoRateModel } from '../../models/account/account-video-rate'
 import { ActorFollowModel } from '../../models/actor/actor-follow'
-import { VideoModel } from '../../models/video/video'
 import { VideoCaptionModel } from '../../models/video/video-caption'
 import { VideoCommentModel } from '../../models/video/video-comment'
 import { VideoPlaylistModel } from '../../models/video/video-playlist'
index e2bf96f6218e05b5ef65847d3e9454b4304b25d7..0a3c15ad83ac326cd60ae0b6abbc243225944046 100644 (file)
@@ -5,8 +5,7 @@ import {
   MVideoFullLight,
   MVideoId,
   MVideoImmutable,
-  MVideoThumbnail,
-  MVideoWithRights
+  MVideoThumbnail
 } from '@server/types/models'
 import { Hooks } from '../plugins/hooks'
 
index 6131379ce4683ed7f44fbf5591c313e91a56c0fe..2c66c1a3ad27b17ed0d4540685b7d5b6b6eb5470 100644 (file)
@@ -10,8 +10,7 @@ import {
   MVideoFullLight,
   MVideoId,
   MVideoImmutable,
-  MVideoThumbnail,
-  MVideoWithRights
+  MVideoThumbnail
 } from '@server/types/models'
 import { HttpStatusCode } from '@shared/core-utils'
 import { UserRight } from '@shared/models'
index f56fdd4743aba5beb56ff406645143c9d7201ccf..2545f887e4a5f932580a426575e677f91c6c7511 100644 (file)
@@ -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<GetType>([ '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<GetType>([ 'api' ])
+  private static readonly liveInclude = new Set<GetType>([ 'api', 'full-light' ])
+  private static readonly scheduleUpdateInclude = new Set<GetType>([ 'api', 'full-light' ])
+  private static readonly tagsInclude = new Set<GetType>([ 'api', 'full-light' ])
+  private static readonly userHistoryInclude = new Set<GetType>([ 'api', 'full-light' ])
+  private static readonly accountInclude = new Set<GetType>([ 'api', 'full-light', 'account-blacklist-files' ])
+  private static readonly ownerUserInclude = new Set<GetType>([ 'blacklist-rights' ])
+
+  private static readonly blacklistedInclude = new Set<GetType>([
+    'api',
+    'full-light',
+    'account-blacklist-files',
+    'thumbnails-blacklist',
+    'blacklist-rights'
+  ])
+
+  private static readonly thumbnailsInclude = new Set<GetType>([
+    '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)
-  }
 }
index de673f4fcc3cfcceb166a458b313b8c2951acdd1..1a8dc343097afd4866e67d9bec14676f01cd3117 100644 (file)
@@ -37,11 +37,9 @@ import {
   MVideoBlacklist,
   MVideoCaptionVideo,
   MVideoFullLight,
-  MVideoIdThumbnail,
   MVideoRedundancyVideo,
   MVideoShareActor,
-  MVideoThumbnail,
-  MVideoWithRights
+  MVideoThumbnail
 } from '../../types/models'
 
 declare module 'express' {