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',
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) {