-import * as Sequelize from 'sequelize'
-
-import { addMethodsToModel, getSort } from '../utils'
-import {
- BlacklistedVideoClass,
- BlacklistedVideoInstance,
- BlacklistedVideoAttributes,
-
- BlacklistedVideoMethods
-} from './video-blacklist-interface'
-
-let BlacklistedVideo: Sequelize.Model<BlacklistedVideoInstance, BlacklistedVideoAttributes>
-let toFormatedJSON: BlacklistedVideoMethods.ToFormatedJSON
-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',
- {},
+import { BelongsTo, Column, CreatedAt, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
+import { SortType } from '../../helpers/utils'
+import { getSortOnModel } from '../utils'
+import { VideoModel } from './video'
+
+@Table({
+ tableName: 'videoBlacklist',
+ indexes: [
{
- indexes: [
- {
- fields: [ 'videoId' ],
- unique: true
- }
- ]
+ fields: [ 'videoId' ],
+ unique: true
}
- )
-
- const classMethods = [
- associate,
-
- countTotal,
- list,
- listForApi,
- loadById,
- loadByVideoId
]
- const instanceMethods = [
- toFormatedJSON
- ]
- addMethodsToModel(BlacklistedVideo, classMethods, instanceMethods)
-
- return BlacklistedVideo
-}
+})
+export class VideoBlacklistModel extends Model<VideoBlacklistModel> {
-// ------------------------------ METHODS ------------------------------
+ @CreatedAt
+ createdAt: Date
-toFormatedJSON = function (this: BlacklistedVideoInstance) {
- return {
- id: this.id,
- videoId: this.videoId,
- createdAt: this.createdAt
- }
-}
+ @UpdatedAt
+ updatedAt: Date
-// ------------------------------ STATICS ------------------------------
+ @ForeignKey(() => VideoModel)
+ @Column
+ videoId: number
-function associate (models) {
- BlacklistedVideo.belongsTo(models.Video, {
- foreignKey: 'videoId',
+ @BelongsTo(() => VideoModel, {
+ foreignKey: {
+ allowNull: false
+ },
onDelete: 'cascade'
})
-}
-
-countTotal = function (callback: BlacklistedVideoMethods.CountTotalCallback) {
- return BlacklistedVideo.count().asCallback(callback)
-}
-
-list = function (callback: BlacklistedVideoMethods.ListCallback) {
- return BlacklistedVideo.findAll().asCallback(callback)
-}
+ 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 } ]
+ }
-listForApi = function (start: number, count: number, sort: string, callback: BlacklistedVideoMethods.ListForApiCallback) {
- const query = {
- offset: start,
- limit: count,
- order: [ getSort(sort) ]
+ return VideoBlacklistModel.findAndCountAll(query)
+ .then(({ rows, count }) => {
+ return {
+ data: rows,
+ total: count
+ }
+ })
}
- return BlacklistedVideo.findAndCountAll(query).asCallback(function (err, result) {
- if (err) return callback(err)
-
- return callback(null, result.rows, result.count)
- })
-}
+ static loadByVideoId (id: number) {
+ const query = {
+ where: {
+ videoId: id
+ }
+ }
-loadById = function (id: number, callback: BlacklistedVideoMethods.LoadByIdCallback) {
- return BlacklistedVideo.findById(id).asCallback(callback)
-}
+ return VideoBlacklistModel.findOne(query)
+ }
-loadByVideoId = function (id: string, callback: BlacklistedVideoMethods.LoadByIdCallback) {
- const query = {
- where: {
- videoId: id
+ toFormattedJSON () {
+ const 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
}
}
-
- return BlacklistedVideo.find(query).asCallback(callback)
}