X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Fvideo-blacklist.ts;h=70a6ecb039e1c769dcc800e37201e51410282e52;hb=5baee5fca418487e72ddcd6419d31bca8659b668;hp=2619b49500c086c0a28f7299cd1f7964a39d2e3f;hpb=74dc3bca2b14f5fd3fe80c394dfc34177a46db77;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-blacklist.ts b/server/models/video/video-blacklist.ts index 2619b4950..70a6ecb03 100644 --- a/server/models/video/video-blacklist.ts +++ b/server/models/video/video-blacklist.ts @@ -1,22 +1,14 @@ -import { - AllowNull, - BelongsTo, - Column, - CreatedAt, - DataType, - Default, - ForeignKey, - Is, Model, - Table, - UpdatedAt, - IFindOptions -} from 'sequelize-typescript' -import { getSortOnModel, SortType, throwIfNotValid } from '../utils' +import { AllowNull, BelongsTo, Column, CreatedAt, DataType, Default, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { getBlacklistSort, SortType, throwIfNotValid, searchAttribute } from '../utils' import { VideoModel } from './video' -import { VideoChannelModel, ScopeNames as VideoChannelScopeNames } from './video-channel' +import { ScopeNames as VideoChannelScopeNames, SummaryOptions, VideoChannelModel } from './video-channel' import { isVideoBlacklistReasonValid, isVideoBlacklistTypeValid } from '../../helpers/custom-validators/video-blacklist' -import { VideoBlacklist, VideoBlacklistType } from '../../../shared/models/videos' +import { VideoBlocklist, VideoBlockType } from '../../../shared/models/videos' import { CONSTRAINTS_FIELDS } from '../../initializers/constants' +import { FindOptions } from 'sequelize' +import { ThumbnailModel } from './thumbnail' +import * as Bluebird from 'bluebird' +import { MVideoBlacklist, MVideoBlacklistFormattable } from '@server/typings/models' @Table({ tableName: 'videoBlacklist', @@ -30,7 +22,7 @@ import { CONSTRAINTS_FIELDS } from '../../initializers/constants' export class VideoBlacklistModel extends Model { @AllowNull(true) - @Is('VideoBlacklistReason', value => throwIfNotValid(value, isVideoBlacklistReasonValid, 'reason')) + @Is('VideoBlacklistReason', value => throwIfNotValid(value, isVideoBlacklistReasonValid, 'reason', true)) @Column(DataType.STRING(CONSTRAINTS_FIELDS.VIDEO_BLACKLIST.REASON.max)) reason: string @@ -42,7 +34,7 @@ export class VideoBlacklistModel extends Model { @Default(null) @Is('VideoBlacklistType', value => throwIfNotValid(value, isVideoBlacklistTypeValid, 'type')) @Column - type: VideoBlacklistType + type: VideoBlockType @CreatedAt createdAt: Date @@ -62,39 +54,62 @@ export class VideoBlacklistModel extends Model { }) Video: VideoModel - static listForApi (start: number, count: number, sort: SortType, type?: VideoBlacklistType) { - const query: IFindOptions = { - offset: start, - limit: count, - order: getSortOnModel(sort.sortModel, sort.sortValue), - include: [ - { - model: VideoModel, - required: true, - include: [ - { - model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, true ] }), - required: true - } - ] - } - ] + static listForApi (parameters: { + start: number + count: number + sort: SortType + search?: string + type?: VideoBlockType + }) { + const { start, count, sort, search, type } = parameters + + function buildBaseQuery (): FindOptions { + return { + offset: start, + limit: count, + order: getBlacklistSort(sort.sortModel, sort.sortValue) + } } + const countQuery = buildBaseQuery() + + const findQuery = buildBaseQuery() + findQuery.include = [ + { + model: VideoModel, + required: true, + where: searchAttribute(search, 'name'), + include: [ + { + model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, { withAccount: true } as SummaryOptions ] }), + 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) { + static loadByVideoId (id: number): Bluebird { const query = { where: { videoId: id @@ -104,7 +119,7 @@ export class VideoBlacklistModel extends Model { return VideoBlacklistModel.findOne(query) } - toFormattedJSON (): VideoBlacklist { + toFormattedJSON (this: MVideoBlacklistFormattable): VideoBlocklist { return { id: this.id, createdAt: this.createdAt,