/* User rates per video. */ import { values } from 'lodash' import * as Sequelize from 'sequelize' import { VIDEO_RATE_TYPES } from '../initializers' import { addMethodsToModel } from './utils' import { UserVideoRateClass, UserVideoRateInstance, UserVideoRateAttributes, UserVideoRateMethods } from './user-video-rate-interface' let UserVideoRate: Sequelize.Model let load: UserVideoRateMethods.Load export default function (sequelize, DataTypes) { UserVideoRate = sequelize.define('UserVideoRate', { type: { type: DataTypes.ENUM(values(VIDEO_RATE_TYPES)), allowNull: false } }, { indexes: [ { fields: [ 'videoId', 'userId', 'type' ], unique: true } ] } ) const classMethods = [ associate, load ] addMethodsToModel(UserVideoRate, classMethods) return UserVideoRate } // ------------------------------ STATICS ------------------------------ function associate (models) { UserVideoRate.belongsTo(models.Video, { foreignKey: { name: 'videoId', allowNull: false }, onDelete: 'CASCADE' }) UserVideoRate.belongsTo(models.User, { foreignKey: { name: 'userId', allowNull: false }, onDelete: 'CASCADE' }) } load = function (userId, videoId, transaction, callback) { const options: Sequelize.FindOptions = { where: { userId, videoId } } if (transaction) options.transaction = transaction return UserVideoRate.findOne(options).asCallback(callback) }