114 lines
2.5 KiB
JavaScript
114 lines
2.5 KiB
JavaScript
'use strict'
|
|
|
|
const constants = require('../initializers/constants')
|
|
const modelUtils = require('./utils')
|
|
const customVideosValidators = require('../helpers/custom-validators').videos
|
|
|
|
module.exports = function (sequelize, DataTypes) {
|
|
const VideoAbuse = sequelize.define('VideoAbuse',
|
|
{
|
|
reporterUsername: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
validate: {
|
|
reporterUsernameValid: function (value) {
|
|
const res = customVideosValidators.isVideoAbuseReporterUsernameValid(value)
|
|
if (res === false) throw new Error('Video abuse reporter username is not valid.')
|
|
}
|
|
}
|
|
},
|
|
reason: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
validate: {
|
|
reasonValid: function (value) {
|
|
const res = customVideosValidators.isVideoAbuseReasonValid(value)
|
|
if (res === false) throw new Error('Video abuse reason is not valid.')
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
indexes: [
|
|
{
|
|
fields: [ 'videoId' ]
|
|
},
|
|
{
|
|
fields: [ 'reporterPodId' ]
|
|
}
|
|
],
|
|
classMethods: {
|
|
associate,
|
|
|
|
listForApi
|
|
},
|
|
instanceMethods: {
|
|
toFormatedJSON
|
|
}
|
|
}
|
|
)
|
|
|
|
return VideoAbuse
|
|
}
|
|
|
|
// ---------------------------------------------------------------------------
|
|
|
|
function associate (models) {
|
|
this.belongsTo(models.Pod, {
|
|
foreignKey: {
|
|
name: 'reporterPodId',
|
|
allowNull: true
|
|
},
|
|
onDelete: 'cascade'
|
|
})
|
|
|
|
this.belongsTo(models.Video, {
|
|
foreignKey: {
|
|
name: 'videoId',
|
|
allowNull: false
|
|
},
|
|
onDelete: 'cascade'
|
|
})
|
|
}
|
|
|
|
function listForApi (start, count, sort, callback) {
|
|
const query = {
|
|
offset: start,
|
|
limit: count,
|
|
order: [ modelUtils.getSort(sort) ],
|
|
include: [
|
|
{
|
|
model: this.sequelize.models.Pod,
|
|
required: false
|
|
}
|
|
]
|
|
}
|
|
|
|
return this.findAndCountAll(query).asCallback(function (err, result) {
|
|
if (err) return callback(err)
|
|
|
|
return callback(null, result.rows, result.count)
|
|
})
|
|
}
|
|
|
|
function toFormatedJSON () {
|
|
let reporterPodHost
|
|
|
|
if (this.Pod) {
|
|
reporterPodHost = this.Pod.host
|
|
} else {
|
|
// It means it's our video
|
|
reporterPodHost = constants.CONFIG.WEBSERVER.HOST
|
|
}
|
|
|
|
const json = {
|
|
id: this.id,
|
|
reporterPodHost,
|
|
reason: this.reason,
|
|
reporterUsername: this.reporterUsername,
|
|
videoId: this.videoId,
|
|
createdAt: this.createdAt
|
|
}
|
|
|
|
return json
|
|
}
|