X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=sidebyside;f=server%2Fmodels%2Fvideo%2Fvideo-blacklist.ts;h=18a1b8b4b95751ae9815d743f515cbbd5cb2b4e6;hb=dedc7abb7beccb0b3a4a4fa4e8ccfef8ceecd5a6;hp=3b567e488cac0bcda98f2c9adc714faf8a8459f4;hpb=5abb9fbbd12e7097e348d6a38622d364b1fa47ed;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/video-blacklist.ts b/server/models/video/video-blacklist.ts index 3b567e488..18a1b8b4b 100644 --- a/server/models/video/video-blacklist.ts +++ b/server/models/video/video-blacklist.ts @@ -1,9 +1,12 @@ -import { AllowNull, BelongsTo, Column, CreatedAt, DataType, 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 { VideoModel } from './video' -import { isVideoBlacklistReasonValid } from '../../helpers/custom-validators/video-blacklist' -import { VideoBlacklist } from '../../../shared/models/videos' -import { CONSTRAINTS_FIELDS } from '../../initializers' +import { ScopeNames as VideoModelScopeNames, VideoModel } from './video' +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 { CONSTRAINTS_FIELDS } from '../../initializers/constants' +import { FindOptions } from 'sequelize' +import { ThumbnailModel } from './thumbnail' @Table({ tableName: 'videoBlacklist', @@ -17,7 +20,7 @@ import { CONSTRAINTS_FIELDS } from '../../initializers' 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 @@ -25,6 +28,12 @@ export class VideoBlacklistModel extends Model { @Column unfederated: boolean + @AllowNull(false) + @Default(null) + @Is('VideoBlacklistType', value => throwIfNotValid(value, isVideoBlacklistTypeValid, 'type')) + @Column + type: VideoBlacklistType + @CreatedAt createdAt: Date @@ -43,26 +52,50 @@ export class VideoBlacklistModel extends Model { }) Video: VideoModel - static listForApi (start: number, count: number, sort: SortType) { - const query = { - offset: start, - limit: count, - order: getSortOnModel(sort.sortModel, sort.sortValue), - include: [ - { - model: VideoModel, - required: true - } - ] + static listForApi (start: number, count: number, sort: SortType, type?: VideoBlacklistType) { + function buildBaseQuery (): FindOptions { + return { + offset: start, + limit: count, + order: getSortOnModel(sort.sortModel, sort.sortValue) + } } - return VideoBlacklistModel.findAndCountAll(query) - .then(({ rows, count }) => { - return { - data: rows, - total: count - } - }) + const countQuery = buildBaseQuery() + + const findQuery = buildBaseQuery() + findQuery.include = [ + { + model: VideoModel, + required: true, + include: [ + { + model: VideoChannelModel.scope({ method: [ VideoChannelScopeNames.SUMMARY, { withAccount: true } as SummaryOptions ] }), + required: true + }, + { + model: ThumbnailModel, + attributes: [ 'type', 'filename' ], + required: false + } + ] + } + ] + + if (type) { + countQuery.where = { type } + findQuery.where = { type } + } + + return Promise.all([ + VideoBlacklistModel.count(countQuery), + VideoBlacklistModel.findAll(findQuery) + ]).then(([ count, rows ]) => { + return { + data: rows, + total: count + } + }) } static loadByVideoId (id: number) { @@ -76,26 +109,15 @@ export class VideoBlacklistModel extends Model { } toFormattedJSON (): VideoBlacklist { - const video = this.Video - return { id: this.id, createdAt: this.createdAt, updatedAt: this.updatedAt, reason: this.reason, unfederated: this.unfederated, + type: this.type, - video: { - id: video.id, - name: video.name, - uuid: video.uuid, - description: video.description, - duration: video.duration, - views: video.views, - likes: video.likes, - dislikes: video.dislikes, - nsfw: video.nsfw - } + video: this.Video.toFormattedJSON() } } }