X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fvideo%2Ftag.ts;h=6d79a55756ad212f84977a383be0757525d950dd;hb=a84b8fa5cf6e4cafb841af3db9bdfcc9531c09a4;hp=d0d8353d7999607482d2a522009a0590e5703ac8;hpb=6fcd19ba737f1f5614a56c6925adb882dea43b8d;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/video/tag.ts b/server/models/video/tag.ts index d0d8353d7..6d79a5575 100644 --- a/server/models/video/tag.ts +++ b/server/models/video/tag.ts @@ -1,73 +1,62 @@ -import * as Sequelize from 'sequelize' -import * as Promise from 'bluebird' - -import { addMethodsToModel } from '../utils' -import { - TagInstance, - TagAttributes, - - TagMethods -} from './tag-interface' - -let Tag: Sequelize.Model -let findOrCreateTags: TagMethods.FindOrCreateTags - -export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) { - Tag = sequelize.define('Tag', +import * as Bluebird from 'bluebird' +import { Transaction } from 'sequelize' +import { AllowNull, BelongsToMany, Column, CreatedAt, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { isVideoTagValid } from '../../helpers/custom-validators/videos' +import { throwIfNotValid } from '../utils' +import { VideoModel } from './video' +import { VideoTagModel } from './video-tag' + +@Table({ + tableName: 'tag', + timestamps: false, + indexes: [ { - name: { - type: DataTypes.STRING, - allowNull: false - } - }, - { - timestamps: false, - indexes: [ - { - fields: [ 'name' ], - unique: true - } - ] + fields: [ 'name' ], + unique: true } - ) - - const classMethods = [ - associate, - - findOrCreateTags ] - addMethodsToModel(Tag, classMethods) +}) +export class TagModel extends Model { - return Tag -} + @AllowNull(false) + @Is('VideoTag', value => throwIfNotValid(value, isVideoTagValid, 'tag')) + @Column + name: string -// --------------------------------------------------------------------------- + @CreatedAt + createdAt: Date -function associate (models) { - Tag.belongsToMany(models.Video, { + @UpdatedAt + updatedAt: Date + + @BelongsToMany(() => VideoModel, { foreignKey: 'tagId', - through: models.VideoTag, - onDelete: 'cascade' + through: () => VideoTagModel, + onDelete: 'CASCADE' }) -} - -findOrCreateTags = function (tags: string[], transaction: Sequelize.Transaction) { - const tasks: Promise[] = [] - tags.forEach(tag => { - const query: any = { - where: { - name: tag - }, - defaults: { - name: tag + Videos: VideoModel[] + + static findOrCreateTags (tags: string[], transaction: Transaction) { + if (tags === null) return [] + + const tasks: Bluebird[] = [] + tags.forEach(tag => { + const query = { + where: { + name: tag + }, + defaults: { + name: tag + } } - } - if (transaction) query.transaction = transaction + if (transaction) query['transaction'] = transaction - const promise = Tag.findOrCreate(query).then(([ tagInstance ]) => tagInstance) - tasks.push(promise) - }) + const promise = TagModel.findOrCreate(query) + .then(([ tagInstance ]) => tagInstance) + tasks.push(promise) + }) - return Promise.all(tasks) + return Promise.all(tasks) + } }