792dbaf07f
* Client: Add list blacklist feature * Server: Add list blacklist feature * Client: Add videoId column * Server: Add some video infos in the REST api * Client: Add video information in the blacklist list * Fix sortable columns :) * Client: Add removeFromBlacklist feature * Server: Add removeFromBlacklist feature * Move to TypeScript * Move to TypeScript and Promises * Server: Fix blacklist list sort * Server: Fetch videos informations * Use common shared interface for client and server * Add check-params remove blacklisted video tests * Add check-params list blacklisted videos tests * Add list blacklist tests * Add remove from blacklist tests * Add video blacklist management tests * Fix rebase onto develop issues * Server: Add sort on blacklist id column * Server: Add blacklists library * Add blacklist id sort test * Add check-params tests for blacklist list pagination, count and sort * Fix coding style * Increase Remote API tests timeout * Increase Request scheduler API tests timeout * Fix typo * Increase video transcoding API tests timeout * Move tests to Typescript * Use lodash orderBy method * Fix typos * Client: Remove optional tests in blacklist model attributes * Move blacklist routes from 'blacklists' to 'blacklist' * CLient: Remove blacklist-list.component.scss * Rename 'blacklists' files to 'blacklist' * Use only BlacklistedVideo interface * Server: Use getFormattedObjects method in listBlacklist method * Client: Use new coding style * Server: Use new sort validator methods * Server: Use new checkParams methods * Client: Fix sortable columns
122 lines
2.8 KiB
TypeScript
122 lines
2.8 KiB
TypeScript
import * as Sequelize from 'sequelize'
|
|
|
|
import { SortType } from '../../helpers'
|
|
import { addMethodsToModel, getSortOnModel } from '../utils'
|
|
import { VideoInstance } from './video-interface'
|
|
import {
|
|
BlacklistedVideoInstance,
|
|
BlacklistedVideoAttributes,
|
|
|
|
BlacklistedVideoMethods
|
|
} from './video-blacklist-interface'
|
|
|
|
let BlacklistedVideo: Sequelize.Model<BlacklistedVideoInstance, BlacklistedVideoAttributes>
|
|
let toFormattedJSON: BlacklistedVideoMethods.ToFormattedJSON
|
|
let countTotal: BlacklistedVideoMethods.CountTotal
|
|
let list: BlacklistedVideoMethods.List
|
|
let listForApi: BlacklistedVideoMethods.ListForApi
|
|
let loadById: BlacklistedVideoMethods.LoadById
|
|
let loadByVideoId: BlacklistedVideoMethods.LoadByVideoId
|
|
|
|
export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
|
|
BlacklistedVideo = sequelize.define<BlacklistedVideoInstance, BlacklistedVideoAttributes>('BlacklistedVideo',
|
|
{},
|
|
{
|
|
indexes: [
|
|
{
|
|
fields: [ 'videoId' ],
|
|
unique: true
|
|
}
|
|
]
|
|
}
|
|
)
|
|
|
|
const classMethods = [
|
|
associate,
|
|
|
|
countTotal,
|
|
list,
|
|
listForApi,
|
|
loadById,
|
|
loadByVideoId
|
|
]
|
|
const instanceMethods = [
|
|
toFormattedJSON
|
|
]
|
|
addMethodsToModel(BlacklistedVideo, classMethods, instanceMethods)
|
|
|
|
return BlacklistedVideo
|
|
}
|
|
|
|
// ------------------------------ METHODS ------------------------------
|
|
|
|
toFormattedJSON = function (this: BlacklistedVideoInstance) {
|
|
let video: VideoInstance
|
|
|
|
video = this.Video
|
|
|
|
return {
|
|
id: this.id,
|
|
videoId: this.videoId,
|
|
createdAt: this.createdAt,
|
|
updatedAt: this.updatedAt,
|
|
name: video.name,
|
|
uuid: video.uuid,
|
|
description: video.description,
|
|
duration: video.duration,
|
|
views: video.views,
|
|
likes: video.likes,
|
|
dislikes: video.dislikes,
|
|
nsfw: video.nsfw
|
|
}
|
|
}
|
|
|
|
// ------------------------------ STATICS ------------------------------
|
|
|
|
function associate (models) {
|
|
BlacklistedVideo.belongsTo(models.Video, {
|
|
foreignKey: {
|
|
name: 'videoId',
|
|
allowNull: false
|
|
},
|
|
onDelete: 'CASCADE'
|
|
})
|
|
}
|
|
|
|
countTotal = function () {
|
|
return BlacklistedVideo.count()
|
|
}
|
|
|
|
list = function () {
|
|
return BlacklistedVideo.findAll()
|
|
}
|
|
|
|
listForApi = function (start: number, count: number, sort: SortType) {
|
|
const query = {
|
|
offset: start,
|
|
limit: count,
|
|
order: [ getSortOnModel(sort.sortModel, sort.sortValue) ],
|
|
include: [ { model: BlacklistedVideo['sequelize'].models.Video } ]
|
|
}
|
|
|
|
return BlacklistedVideo.findAndCountAll(query).then(({ rows, count }) => {
|
|
return {
|
|
data: rows,
|
|
total: count
|
|
}
|
|
})
|
|
}
|
|
|
|
loadById = function (id: number) {
|
|
return BlacklistedVideo.findById(id)
|
|
}
|
|
|
|
loadByVideoId = function (id: number) {
|
|
const query = {
|
|
where: {
|
|
videoId: id
|
|
}
|
|
}
|
|
|
|
return BlacklistedVideo.findOne(query)
|
|
}
|