Fix blacklist sort

pull/1935/head
Chocobozzz 2019-05-21 12:09:58 +02:00
parent b9dde7d96b
commit ac3d2e0569
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
1 changed files with 41 additions and 25 deletions

View File

@ -1,11 +1,12 @@
import { AllowNull, BelongsTo, Column, CreatedAt, DataType, Default, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' import { AllowNull, BelongsTo, Column, CreatedAt, DataType, Default, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { getSortOnModel, SortType, throwIfNotValid } from '../utils' 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 { ScopeNames as VideoChannelScopeNames, VideoChannelModel } from './video-channel'
import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../helpers/custom-validators/video-blacklist' import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../helpers/custom-validators/video-blacklist'
import { VideoBlacklist, VideoBlacklistType } from '../../../shared/models/videos' import { VideoBlacklist, VideoBlacklistType } from '../../../shared/models/videos'
import { CONSTRAINTS_FIELDS } from '../../initializers/constants' import { CONSTRAINTS_FIELDS } from '../../initializers/constants'
import { FindOptions } from 'sequelize' import { FindOptions } from 'sequelize'
import { ThumbnailModel } from './thumbnail'
@Table({ @Table({
tableName: 'videoBlacklist', tableName: 'videoBlacklist',
@ -52,30 +53,45 @@ export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
Video: VideoModel Video: VideoModel
static listForApi (start: number, count: number, sort: SortType, type?: VideoBlacklistType) { static listForApi (start: number, count: number, sort: SortType, type?: VideoBlacklistType) {
const query: FindOptions = { function buildBaseQuery (): FindOptions {
return {
offset: start, offset: start,
limit: count, limit: count,
order: getSortOnModel(sort.sortModel, sort.sortValue), order: getSortOnModel(sort.sortModel, sort.sortValue)
include: [ }
}
const countQuery = buildBaseQuery()
const findQuery = buildBaseQuery()
findQuery.subQuery = false
findQuery.include = [
{ {
model: VideoModel.scope(VideoModelScopeNames.WITH_THUMBNAILS), model: VideoModel,
required: true, required: true,
include: [ include: [
{ {
model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, true ] }), model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, true ] }),
required: true required: true
},
{
model: ThumbnailModel,
attributes: [ 'type', 'filename' ],
required: false
} }
] ]
} }
] ]
}
if (type) { if (type) {
query.where = { type } countQuery.where = { type }
findQuery.where = { type }
} }
return VideoBlacklistModel.findAndCountAll(query) return Promise.all([
.then(({ rows, count }) => { VideoBlacklistModel.count(countQuery),
VideoBlacklistModel.findAll(findQuery)
]).then(([ count, rows ]) => {
return { return {
data: rows, data: rows,
total: count total: count