From ac3d2e05695883dabb435868272709b955dcb77a Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 21 May 2019 12:09:58 +0200 Subject: Fix blacklist sort --- server/models/video/video-blacklist.ts | 66 +++++++++++++++++++++------------- 1 file changed, 41 insertions(+), 25 deletions(-) (limited to 'server') diff --git a/server/models/video/video-blacklist.ts b/server/models/video/video-blacklist.ts index 3bd74460d..baef1d6ce 100644 --- a/server/models/video/video-blacklist.ts +++ b/server/models/video/video-blacklist.ts @@ -1,11 +1,12 @@ import { AllowNull, BelongsTo, Column, CreatedAt, DataType, Default, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' import { getSortOnModel, SortType, throwIfNotValid } from '../utils' -import { VideoModel, ScopeNames as VideoModelScopeNames } from './video' +import { ScopeNames as VideoModelScopeNames, VideoModel } from './video' import { ScopeNames as VideoChannelScopeNames, VideoChannelModel } from './video-channel' import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../helpers/custom-validators/video-blacklist' import { VideoBlacklist, VideoBlacklistType } from '../../../shared/models/videos' import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { FindOptions } from 'sequelize' +import { ThumbnailModel } from './thumbnail' @Table({ tableName: 'videoBlacklist', @@ -52,35 +53,50 @@ export class VideoBlacklistModel extends Model { Video: VideoModel static listForApi (start: number, count: number, sort: SortType, type?: VideoBlacklistType) { - const query: FindOptions = { - offset: start, - limit: count, - order: getSortOnModel(sort.sortModel, sort.sortValue), - include: [ - { - model: VideoModel.scope(VideoModelScopeNames.WITH_THUMBNAILS), - required: true, - include: [ - { - model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, true ] }), - required: true - } - ] - } - ] + function buildBaseQuery (): FindOptions { + return { + offset: start, + limit: count, + order: getSortOnModel(sort.sortModel, sort.sortValue) + } } + const countQuery = buildBaseQuery() + + const findQuery = buildBaseQuery() + findQuery.subQuery = false + findQuery.include = [ + { + model: VideoModel, + required: true, + include: [ + { + model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, true ] }), + required: true + }, + { + model: ThumbnailModel, + attributes: [ 'type', 'filename' ], + required: false + } + ] + } + ] + if (type) { - query.where = { type } + countQuery.where = { type } + findQuery.where = { type } } - return VideoBlacklistModel.findAndCountAll(query) - .then(({ rows, count }) => { - return { - data: rows, - total: count - } - }) + return Promise.all([ + VideoBlacklistModel.count(countQuery), + VideoBlacklistModel.findAll(findQuery) + ]).then(([ count, rows ]) => { + return { + data: rows, + total: count + } + }) } static loadByVideoId (id: number) { -- cgit v1.2.3