user-notification-setting.ts 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. import {
  2. AfterDestroy,
  3. AfterUpdate,
  4. AllowNull,
  5. BelongsTo,
  6. Column,
  7. CreatedAt,
  8. Default,
  9. ForeignKey,
  10. Is,
  11. Model,
  12. Table,
  13. UpdatedAt
  14. } from 'sequelize-typescript'
  15. import { TokensCache } from '@server/lib/auth/tokens-cache'
  16. import { MNotificationSettingFormattable } from '@server/types/models'
  17. import { AttributesOnly } from '@shared/typescript-utils'
  18. import { UserNotificationSetting, UserNotificationSettingValue } from '../../../shared/models/users/user-notification-setting.model'
  19. import { isUserNotificationSettingValid } from '../../helpers/custom-validators/user-notifications'
  20. import { throwIfNotValid } from '../shared'
  21. import { UserModel } from './user'
  22. @Table({
  23. tableName: 'userNotificationSetting',
  24. indexes: [
  25. {
  26. fields: [ 'userId' ],
  27. unique: true
  28. }
  29. ]
  30. })
  31. export class UserNotificationSettingModel extends Model<Partial<AttributesOnly<UserNotificationSettingModel>>> {
  32. @AllowNull(false)
  33. @Default(null)
  34. @Is(
  35. 'UserNotificationSettingNewVideoFromSubscription',
  36. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newVideoFromSubscription')
  37. )
  38. @Column
  39. newVideoFromSubscription: UserNotificationSettingValue
  40. @AllowNull(false)
  41. @Default(null)
  42. @Is(
  43. 'UserNotificationSettingNewCommentOnMyVideo',
  44. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newCommentOnMyVideo')
  45. )
  46. @Column
  47. newCommentOnMyVideo: UserNotificationSettingValue
  48. @AllowNull(false)
  49. @Default(null)
  50. @Is(
  51. 'UserNotificationSettingAbuseAsModerator',
  52. value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseAsModerator')
  53. )
  54. @Column
  55. abuseAsModerator: UserNotificationSettingValue
  56. @AllowNull(false)
  57. @Default(null)
  58. @Is(
  59. 'UserNotificationSettingVideoAutoBlacklistAsModerator',
  60. value => throwIfNotValid(value, isUserNotificationSettingValid, 'videoAutoBlacklistAsModerator')
  61. )
  62. @Column
  63. videoAutoBlacklistAsModerator: UserNotificationSettingValue
  64. @AllowNull(false)
  65. @Default(null)
  66. @Is(
  67. 'UserNotificationSettingBlacklistOnMyVideo',
  68. value => throwIfNotValid(value, isUserNotificationSettingValid, 'blacklistOnMyVideo')
  69. )
  70. @Column
  71. blacklistOnMyVideo: UserNotificationSettingValue
  72. @AllowNull(false)
  73. @Default(null)
  74. @Is(
  75. 'UserNotificationSettingMyVideoPublished',
  76. value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoPublished')
  77. )
  78. @Column
  79. myVideoPublished: UserNotificationSettingValue
  80. @AllowNull(false)
  81. @Default(null)
  82. @Is(
  83. 'UserNotificationSettingMyVideoImportFinished',
  84. value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoImportFinished')
  85. )
  86. @Column
  87. myVideoImportFinished: UserNotificationSettingValue
  88. @AllowNull(false)
  89. @Default(null)
  90. @Is(
  91. 'UserNotificationSettingNewUserRegistration',
  92. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newUserRegistration')
  93. )
  94. @Column
  95. newUserRegistration: UserNotificationSettingValue
  96. @AllowNull(false)
  97. @Default(null)
  98. @Is(
  99. 'UserNotificationSettingNewInstanceFollower',
  100. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newInstanceFollower')
  101. )
  102. @Column
  103. newInstanceFollower: UserNotificationSettingValue
  104. @AllowNull(false)
  105. @Default(null)
  106. @Is(
  107. 'UserNotificationSettingNewInstanceFollower',
  108. value => throwIfNotValid(value, isUserNotificationSettingValid, 'autoInstanceFollowing')
  109. )
  110. @Column
  111. autoInstanceFollowing: UserNotificationSettingValue
  112. @AllowNull(false)
  113. @Default(null)
  114. @Is(
  115. 'UserNotificationSettingNewFollow',
  116. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newFollow')
  117. )
  118. @Column
  119. newFollow: UserNotificationSettingValue
  120. @AllowNull(false)
  121. @Default(null)
  122. @Is(
  123. 'UserNotificationSettingCommentMention',
  124. value => throwIfNotValid(value, isUserNotificationSettingValid, 'commentMention')
  125. )
  126. @Column
  127. commentMention: UserNotificationSettingValue
  128. @AllowNull(false)
  129. @Default(null)
  130. @Is(
  131. 'UserNotificationSettingAbuseStateChange',
  132. value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseStateChange')
  133. )
  134. @Column
  135. abuseStateChange: UserNotificationSettingValue
  136. @AllowNull(false)
  137. @Default(null)
  138. @Is(
  139. 'UserNotificationSettingAbuseNewMessage',
  140. value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseNewMessage')
  141. )
  142. @Column
  143. abuseNewMessage: UserNotificationSettingValue
  144. @AllowNull(false)
  145. @Default(null)
  146. @Is(
  147. 'UserNotificationSettingNewPeerTubeVersion',
  148. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newPeerTubeVersion')
  149. )
  150. @Column
  151. newPeerTubeVersion: UserNotificationSettingValue
  152. @AllowNull(false)
  153. @Default(null)
  154. @Is(
  155. 'UserNotificationSettingNewPeerPluginVersion',
  156. value => throwIfNotValid(value, isUserNotificationSettingValid, 'newPluginVersion')
  157. )
  158. @Column
  159. newPluginVersion: UserNotificationSettingValue
  160. @AllowNull(false)
  161. @Default(null)
  162. @Is(
  163. 'UserNotificationSettingMyVideoStudioEditionFinished',
  164. value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoStudioEditionFinished')
  165. )
  166. @Column
  167. myVideoStudioEditionFinished: UserNotificationSettingValue
  168. @ForeignKey(() => UserModel)
  169. @Column
  170. userId: number
  171. @BelongsTo(() => UserModel, {
  172. foreignKey: {
  173. allowNull: false
  174. },
  175. onDelete: 'cascade'
  176. })
  177. User: UserModel
  178. @CreatedAt
  179. createdAt: Date
  180. @UpdatedAt
  181. updatedAt: Date
  182. @AfterUpdate
  183. @AfterDestroy
  184. static removeTokenCache (instance: UserNotificationSettingModel) {
  185. return TokensCache.Instance.clearCacheByUserId(instance.userId)
  186. }
  187. toFormattedJSON (this: MNotificationSettingFormattable): UserNotificationSetting {
  188. return {
  189. newCommentOnMyVideo: this.newCommentOnMyVideo,
  190. newVideoFromSubscription: this.newVideoFromSubscription,
  191. abuseAsModerator: this.abuseAsModerator,
  192. videoAutoBlacklistAsModerator: this.videoAutoBlacklistAsModerator,
  193. blacklistOnMyVideo: this.blacklistOnMyVideo,
  194. myVideoPublished: this.myVideoPublished,
  195. myVideoImportFinished: this.myVideoImportFinished,
  196. newUserRegistration: this.newUserRegistration,
  197. commentMention: this.commentMention,
  198. newFollow: this.newFollow,
  199. newInstanceFollower: this.newInstanceFollower,
  200. autoInstanceFollowing: this.autoInstanceFollowing,
  201. abuseNewMessage: this.abuseNewMessage,
  202. abuseStateChange: this.abuseStateChange,
  203. newPeerTubeVersion: this.newPeerTubeVersion,
  204. myVideoStudioEditionFinished: this.myVideoStudioEditionFinished,
  205. newPluginVersion: this.newPluginVersion
  206. }
  207. }
  208. }