From 9c9a236b541a286e165d67341e4ddd6ea2fabdf1 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 29 Jul 2021 14:17:03 +0200 Subject: [PATCH] Refactor options in models --- server/models/video/video-channel.ts | 52 ++++++------ server/models/video/video-playlist.ts | 30 ++----- server/models/video/video.ts | 110 +++++++++++++------------- 3 files changed, 82 insertions(+), 110 deletions(-) diff --git a/server/models/video/video-channel.ts b/server/models/video/video-channel.ts index e4b12c517..9f04a57c6 100644 --- a/server/models/video/video-channel.ts +++ b/server/models/video/video-channel.ts @@ -438,30 +438,6 @@ ON "Account->Actor"."serverId" = "Account->Actor->Server"."id"` } } - static listForApi (parameters: { - actorId: number - start: number - count: number - sort: string - }) { - const { actorId } = parameters - - const query = { - offset: parameters.start, - limit: parameters.count, - order: getSort(parameters.sort) - } - - return VideoChannelModel - .scope({ - method: [ ScopeNames.FOR_API, { actorId } as AvailableForListOptions ] - }) - .findAndCountAll(query) - .then(({ rows, count }) => { - return { total: count, data: rows } - }) - } - static listLocalsForSitemap (sort: string): Promise { const query = { attributes: [ ], @@ -483,15 +459,33 @@ ON "Account->Actor"."serverId" = "Account->Actor->Server"."id"` .findAll(query) } - static searchForApi (options: { - actorId: number - search?: string + static listForApi (parameters: Pick & { start: number count: number sort: string + }) { + const { actorId } = parameters + + const query = { + offset: parameters.start, + limit: parameters.count, + order: getSort(parameters.sort) + } + + return VideoChannelModel + .scope({ + method: [ ScopeNames.FOR_API, { actorId } as AvailableForListOptions ] + }) + .findAndCountAll(query) + .then(({ rows, count }) => { + return { total: count, data: rows } + }) + } - host?: string - handles?: string[] + static searchForApi (options: Pick & { + start: number + count: number + sort: string }) { let attributesInclude: any[] = [ literal('0 as similarity') ] let where: WhereOptions diff --git a/server/models/video/video-playlist.ts b/server/models/video/video-playlist.ts index caa79952d..630684a88 100644 --- a/server/models/video/video-playlist.ts +++ b/server/models/video/video-playlist.ts @@ -19,7 +19,7 @@ import { } from 'sequelize-typescript' import { buildUUID, uuidToShort } from '@server/helpers/uuid' import { MAccountId, MChannelId } from '@server/types/models' -import { AttributesOnly, buildPlaylistEmbedPath, buildPlaylistWatchPath } from '@shared/core-utils' +import { AttributesOnly, buildPlaylistEmbedPath, buildPlaylistWatchPath, pick } from '@shared/core-utils' import { ActivityIconObject } from '../../../shared/models/activitypub/objects' import { PlaylistObject } from '../../../shared/models/activitypub/objects/playlist-object' import { VideoPlaylistPrivacy } from '../../../shared/models/videos/playlist/video-playlist-privacy.model' @@ -357,19 +357,10 @@ export class VideoPlaylistModel extends Model & { start: number count: number sort: string - search?: string - host?: string - uuids?: string[] }) { return VideoPlaylistModel.listForApi({ ...options, + type: VideoPlaylistType.REGULAR, listMyPlaylists: false, withVideos: true diff --git a/server/models/video/video.ts b/server/models/video/video.ts index d5efe2eac..56a5b0e18 100644 --- a/server/models/video/video.ts +++ b/server/models/video/video.ts @@ -31,7 +31,7 @@ import { LiveManager } from '@server/lib/live/live-manager' import { getHLSDirectory, getVideoFilePath } from '@server/lib/video-paths' import { getServerActor } from '@server/models/application/application' import { ModelCache } from '@server/models/model-cache' -import { AttributesOnly, buildVideoEmbedPath, buildVideoWatchPath } from '@shared/core-utils' +import { AttributesOnly, buildVideoEmbedPath, buildVideoWatchPath, pick } from '@shared/core-utils' import { VideoFile } from '@shared/models/videos/video-file.model' import { ResultList, UserRight, VideoPrivacy, VideoState } from '../../../shared' import { VideoObject } from '../../../shared/models/activitypub/objects' @@ -1083,41 +1083,44 @@ export class VideoModel extends Model>> { : serverActor.id const queryOptions = { - start: options.start, - count: options.count, - sort: options.sort, + ...pick(options, [ + 'start', + 'count', + 'sort', + 'nsfw', + 'isLive', + 'categoryOneOf', + 'licenceOneOf', + 'languageOneOf', + 'tagsOneOf', + 'tagsAllOf', + 'filter', + 'withFiles', + 'accountId', + 'videoChannelId', + 'videoPlaylistId', + 'includeLocalVideos', + 'user', + 'historyOfUser', + 'search' + ]), + followerActorId, serverAccountId: serverActor.Account.id, - nsfw: options.nsfw, - isLive: options.isLive, - categoryOneOf: options.categoryOneOf, - licenceOneOf: options.licenceOneOf, - languageOneOf: options.languageOneOf, - tagsOneOf: options.tagsOneOf, - tagsAllOf: options.tagsAllOf, - filter: options.filter, - withFiles: options.withFiles, - accountId: options.accountId, - videoChannelId: options.videoChannelId, - videoPlaylistId: options.videoPlaylistId, - includeLocalVideos: options.includeLocalVideos, - user: options.user, - historyOfUser: options.historyOfUser, trendingDays, - trendingAlgorithm, - search: options.search + trendingAlgorithm } return VideoModel.getAvailableForApi(queryOptions, options.countVideos) } static async searchAndPopulateAccountAndServer (options: { + start: number + count: number + sort: string includeLocalVideos: boolean search?: string host?: string - start?: number - count?: number - sort?: string startDate?: string // ISO 8601 endDate?: string // ISO 8601 originallyPublishedStartDate?: string @@ -1138,40 +1141,33 @@ export class VideoModel extends Model>> { const serverActor = await getServerActor() const queryOptions = { - followerActorId: serverActor.id, - serverAccountId: serverActor.Account.id, - - includeLocalVideos: options.includeLocalVideos, - nsfw: options.nsfw, - isLive: options.isLive, - - categoryOneOf: options.categoryOneOf, - licenceOneOf: options.licenceOneOf, - languageOneOf: options.languageOneOf, + ...pick(options, [ + 'includeLocalVideos', + 'nsfw', + 'isLive', + 'categoryOneOf', + 'licenceOneOf', + 'languageOneOf', + 'tagsOneOf', + 'tagsAllOf', + 'user', + 'filter', + 'host', + 'start', + 'count', + 'sort', + 'startDate', + 'endDate', + 'originallyPublishedStartDate', + 'originallyPublishedEndDate', + 'durationMin', + 'durationMax', + 'uuids', + 'search' + ]), - tagsOneOf: options.tagsOneOf, - tagsAllOf: options.tagsAllOf, - - user: options.user, - filter: options.filter, - host: options.host, - - start: options.start, - count: options.count, - sort: options.sort, - - startDate: options.startDate, - endDate: options.endDate, - - originallyPublishedStartDate: options.originallyPublishedStartDate, - originallyPublishedEndDate: options.originallyPublishedEndDate, - - durationMin: options.durationMin, - durationMax: options.durationMax, - - uuids: options.uuids, - - search: options.search + followerActorId: serverActor.id, + serverAccountId: serverActor.Account.id } return VideoModel.getAvailableForApi(queryOptions) -- 2.41.0