X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Ftag.js;h=145e090c116fbee01aad4707fdb3aaa6bd3a0f15;hb=55fa55a9be566cca2ba95322f2ae23b434aed62a;hp=d6c2d3bb12ff2c75a7a489951d2d97411ecb0af5;hpb=67bf9b96bbcd92b069fe86d9223fe0f8b9c6e677;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/tag.js b/server/models/tag.js index d6c2d3bb1..145e090c1 100644 --- a/server/models/tag.js +++ b/server/models/tag.js @@ -1,5 +1,7 @@ 'use strict' +const each = require('async/each') + // --------------------------------------------------------------------------- module.exports = function (sequelize, DataTypes) { @@ -11,8 +13,17 @@ module.exports = function (sequelize, DataTypes) { } }, { + timestamps: false, + indexes: [ + { + fields: [ 'name' ], + unique: true + } + ], classMethods: { - associate + associate, + + findOrCreateTags } } ) @@ -29,3 +40,37 @@ function associate (models) { onDelete: 'cascade' }) } + +function findOrCreateTags (tags, transaction, callback) { + if (!callback) { + callback = transaction + transaction = null + } + + const self = this + const tagInstances = [] + + each(tags, function (tag, callbackEach) { + const query = { + where: { + name: tag + }, + defaults: { + name: tag + } + } + + if (transaction) query.transaction = transaction + + self.findOrCreate(query).asCallback(function (err, res) { + if (err) return callbackEach(err) + + // res = [ tag, isCreated ] + const tag = res[0] + tagInstances.push(tag) + return callbackEach() + }) + }, function (err) { + return callback(err, tagInstances) + }) +}