+ return VideoModel.scope([
+ ScopeNames.WITH_ACCOUNT_DETAILS,
+ ScopeNames.WITH_FILES,
+ ScopeNames.WITH_STREAMING_PLAYLISTS,
+ ScopeNames.WITH_THUMBNAILS
+ ]).findOne(query)
+ }
+
+ static loadAndPopulateAccountAndServerAndTags (id: number | string, t?: Transaction, userId?: number) {
+ const where = buildWhereIdOrUUID(id)
+
+ const options = {
+ order: [ [ 'Tags', 'name', 'ASC' ] ] as any,
+ where,
+ transaction: t
+ }
+
+ const scopes: (string | ScopeOptions)[] = [
+ ScopeNames.WITH_TAGS,
+ ScopeNames.WITH_BLACKLISTED,
+ ScopeNames.WITH_ACCOUNT_DETAILS,
+ ScopeNames.WITH_SCHEDULED_UPDATE,
+ ScopeNames.WITH_FILES,
+ ScopeNames.WITH_STREAMING_PLAYLISTS,
+ ScopeNames.WITH_THUMBNAILS
+ ]
+
+ if (userId) {
+ scopes.push({ method: [ ScopeNames.WITH_USER_HISTORY, userId ] })
+ }
+
+ return VideoModel
+ .scope(scopes)
+ .findOne(options)