mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			240 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			240 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
import { type UserNotificationSetting, type UserNotificationSettingValueType } from '@peertube/peertube-models'
 | 
						|
import { TokensCache } from '@server/lib/auth/tokens-cache.js'
 | 
						|
import { MNotificationSettingFormattable } from '@server/types/models/index.js'
 | 
						|
import {
 | 
						|
  AfterDestroy,
 | 
						|
  AfterUpdate,
 | 
						|
  AllowNull,
 | 
						|
  BelongsTo,
 | 
						|
  Column,
 | 
						|
  CreatedAt,
 | 
						|
  Default,
 | 
						|
  ForeignKey,
 | 
						|
  Is, Table,
 | 
						|
  UpdatedAt
 | 
						|
} from 'sequelize-typescript'
 | 
						|
import { isUserNotificationSettingValid } from '../../helpers/custom-validators/user-notifications.js'
 | 
						|
import { SequelizeModel, throwIfNotValid } from '../shared/index.js'
 | 
						|
import { UserModel } from './user.js'
 | 
						|
 | 
						|
@Table({
 | 
						|
  tableName: 'userNotificationSetting',
 | 
						|
  indexes: [
 | 
						|
    {
 | 
						|
      fields: [ 'userId' ],
 | 
						|
      unique: true
 | 
						|
    }
 | 
						|
  ]
 | 
						|
})
 | 
						|
export class UserNotificationSettingModel extends SequelizeModel<UserNotificationSettingModel> {
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewVideoFromSubscription',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newVideoFromSubscription')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newVideoFromSubscription: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewCommentOnMyVideo',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newCommentOnMyVideo')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newCommentOnMyVideo: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingAbuseAsModerator',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseAsModerator')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  abuseAsModerator: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingVideoAutoBlacklistAsModerator',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'videoAutoBlacklistAsModerator')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  videoAutoBlacklistAsModerator: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingBlacklistOnMyVideo',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'blacklistOnMyVideo')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  blacklistOnMyVideo: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingMyVideoPublished',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoPublished')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  myVideoPublished: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingMyVideoImportFinished',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoImportFinished')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  myVideoImportFinished: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewUserRegistration',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newUserRegistration')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newUserRegistration: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewInstanceFollower',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newInstanceFollower')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newInstanceFollower: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewInstanceFollower',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'autoInstanceFollowing')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  autoInstanceFollowing: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewFollow',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newFollow')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newFollow: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingCommentMention',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'commentMention')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  commentMention: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingAbuseStateChange',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseStateChange')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  abuseStateChange: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingAbuseNewMessage',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseNewMessage')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  abuseNewMessage: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewPeerTubeVersion',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newPeerTubeVersion')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newPeerTubeVersion: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingNewPeerPluginVersion',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'newPluginVersion')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  newPluginVersion: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @AllowNull(false)
 | 
						|
  @Default(null)
 | 
						|
  @Is(
 | 
						|
    'UserNotificationSettingMyVideoStudioEditionFinished',
 | 
						|
    value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoStudioEditionFinished')
 | 
						|
  )
 | 
						|
  @Column
 | 
						|
  myVideoStudioEditionFinished: UserNotificationSettingValueType
 | 
						|
 | 
						|
  @ForeignKey(() => UserModel)
 | 
						|
  @Column
 | 
						|
  userId: number
 | 
						|
 | 
						|
  @BelongsTo(() => UserModel, {
 | 
						|
    foreignKey: {
 | 
						|
      allowNull: false
 | 
						|
    },
 | 
						|
    onDelete: 'cascade'
 | 
						|
  })
 | 
						|
  User: Awaited<UserModel>
 | 
						|
 | 
						|
  @CreatedAt
 | 
						|
  createdAt: Date
 | 
						|
 | 
						|
  @UpdatedAt
 | 
						|
  updatedAt: Date
 | 
						|
 | 
						|
  @AfterUpdate
 | 
						|
  @AfterDestroy
 | 
						|
  static removeTokenCache (instance: UserNotificationSettingModel) {
 | 
						|
    return TokensCache.Instance.clearCacheByUserId(instance.userId)
 | 
						|
  }
 | 
						|
 | 
						|
  static updateUserSettings (settings: UserNotificationSetting, userId: number) {
 | 
						|
    const query = {
 | 
						|
      where: {
 | 
						|
        userId
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    return UserNotificationSettingModel.update(settings, query)
 | 
						|
  }
 | 
						|
 | 
						|
  toFormattedJSON (this: MNotificationSettingFormattable): UserNotificationSetting {
 | 
						|
    return {
 | 
						|
      newCommentOnMyVideo: this.newCommentOnMyVideo,
 | 
						|
      newVideoFromSubscription: this.newVideoFromSubscription,
 | 
						|
      abuseAsModerator: this.abuseAsModerator,
 | 
						|
      videoAutoBlacklistAsModerator: this.videoAutoBlacklistAsModerator,
 | 
						|
      blacklistOnMyVideo: this.blacklistOnMyVideo,
 | 
						|
      myVideoPublished: this.myVideoPublished,
 | 
						|
      myVideoImportFinished: this.myVideoImportFinished,
 | 
						|
      newUserRegistration: this.newUserRegistration,
 | 
						|
      commentMention: this.commentMention,
 | 
						|
      newFollow: this.newFollow,
 | 
						|
      newInstanceFollower: this.newInstanceFollower,
 | 
						|
      autoInstanceFollowing: this.autoInstanceFollowing,
 | 
						|
      abuseNewMessage: this.abuseNewMessage,
 | 
						|
      abuseStateChange: this.abuseStateChange,
 | 
						|
      newPeerTubeVersion: this.newPeerTubeVersion,
 | 
						|
      myVideoStudioEditionFinished: this.myVideoStudioEditionFinished,
 | 
						|
      newPluginVersion: this.newPluginVersion
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |