]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/models/account/account-video-rate.ts
Put activity pub sends inside transactions
[github/Chocobozzz/PeerTube.git] / server / models / account / account-video-rate.ts
1 /*
2 Account rates per video.
3 */
4 import { values } from 'lodash'
5 import * as Sequelize from 'sequelize'
6
7 import { VIDEO_RATE_TYPES } from '../../initializers'
8
9 import { addMethodsToModel } from '../utils'
10 import {
11 AccountVideoRateInstance,
12 AccountVideoRateAttributes,
13
14 AccountVideoRateMethods
15 } from './account-video-rate-interface'
16
17 let AccountVideoRate: Sequelize.Model<AccountVideoRateInstance, AccountVideoRateAttributes>
18 let load: AccountVideoRateMethods.Load
19
20 export default function (sequelize: Sequelize.Sequelize, DataTypes: Sequelize.DataTypes) {
21 AccountVideoRate = sequelize.define<AccountVideoRateInstance, AccountVideoRateAttributes>('AccountVideoRate',
22 {
23 type: {
24 type: DataTypes.ENUM(values(VIDEO_RATE_TYPES)),
25 allowNull: false
26 }
27 },
28 {
29 indexes: [
30 {
31 fields: [ 'videoId', 'accountId' ],
32 unique: true
33 }
34 ]
35 }
36 )
37
38 const classMethods = [
39 associate,
40
41 load
42 ]
43 addMethodsToModel(AccountVideoRate, classMethods)
44
45 return AccountVideoRate
46 }
47
48 // ------------------------------ STATICS ------------------------------
49
50 function associate (models) {
51 AccountVideoRate.belongsTo(models.Video, {
52 foreignKey: {
53 name: 'videoId',
54 allowNull: false
55 },
56 onDelete: 'CASCADE'
57 })
58
59 AccountVideoRate.belongsTo(models.Account, {
60 foreignKey: {
61 name: 'accountId',
62 allowNull: false
63 },
64 onDelete: 'CASCADE'
65 })
66 }
67
68 load = function (accountId: number, videoId: number, transaction: Sequelize.Transaction) {
69 const options: Sequelize.FindOptions<AccountVideoRateAttributes> = {
70 where: {
71 accountId,
72 videoId
73 }
74 }
75 if (transaction) options.transaction = transaction
76
77 return AccountVideoRate.findOne(options)
78 }