aboutsummaryrefslogblamecommitdiffhomepage
path: root/server/models/account/account-video-rate.ts
blob: e969e4a436b78c9c519baec342c1f0a9165bfb9e (plain) (tree)
1
2
3
4
5
6
7
8
9
                               



                                                                                                                             
                                                     

                                           
 





                                
     

                                         
     


                                                                         
 


                                                  
 

                 
 

                 
 


                               
 
                                
                 



                       
                   
 




                                  
                 



                       
                       
 





                                                                              
     
                                                      
 

                                                 
 
import { values } from 'lodash'
import { Transaction } from 'sequelize'
import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Model, Table, UpdatedAt } from 'sequelize-typescript'
import { IFindOptions } from 'sequelize-typescript/lib/interfaces/IFindOptions'
import { VideoRateType } from '../../../shared/models/videos'
import { VIDEO_RATE_TYPES } from '../../initializers'
import { VideoModel } from '../video/video'
import { AccountModel } from './account'

/*
  Account rates per video.
*/
@Table({
  tableName: 'accountVideoRate',
  indexes: [
    {
      fields: [ 'videoId', 'accountId' ],
      unique: true
    }
  ]
})
export class AccountVideoRateModel extends Model<AccountVideoRateModel> {

  @AllowNull(false)
  @Column(DataType.ENUM(values(VIDEO_RATE_TYPES)))
  type: VideoRateType

  @CreatedAt
  createdAt: Date

  @UpdatedAt
  updatedAt: Date

  @ForeignKey(() => VideoModel)
  @Column
  videoId: number

  @BelongsTo(() => VideoModel, {
    foreignKey: {
      allowNull: false
    },
    onDelete: 'CASCADE'
  })
  Video: VideoModel

  @ForeignKey(() => AccountModel)
  @Column
  accountId: number

  @BelongsTo(() => AccountModel, {
    foreignKey: {
      allowNull: false
    },
    onDelete: 'CASCADE'
  })
  Account: AccountModel

  static load (accountId: number, videoId: number, transaction: Transaction) {
    const options: IFindOptions<AccountVideoRateModel> = {
      where: {
        accountId,
        videoId
      }
    }
    if (transaction) options.transaction = transaction

    return AccountVideoRateModel.findOne(options)
  }
}