2023-07-31 14:34:36 +02:00
|
|
|
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'
|
2018-12-26 10:36:24 +01:00
|
|
|
import {
|
|
|
|
AfterDestroy,
|
|
|
|
AfterUpdate,
|
|
|
|
AllowNull,
|
|
|
|
BelongsTo,
|
|
|
|
Column,
|
|
|
|
CreatedAt,
|
|
|
|
Default,
|
|
|
|
ForeignKey,
|
2024-02-22 10:12:04 +01:00
|
|
|
Is, Table,
|
2018-12-26 10:36:24 +01:00
|
|
|
UpdatedAt
|
|
|
|
} from 'sequelize-typescript'
|
2023-07-31 14:34:36 +02:00
|
|
|
import { isUserNotificationSettingValid } from '../../helpers/custom-validators/user-notifications.js'
|
2024-02-22 10:12:04 +01:00
|
|
|
import { SequelizeModel, throwIfNotValid } from '../shared/index.js'
|
2023-07-31 14:34:36 +02:00
|
|
|
import { UserModel } from './user.js'
|
2018-12-26 10:36:24 +01:00
|
|
|
|
|
|
|
@Table({
|
|
|
|
tableName: 'userNotificationSetting',
|
|
|
|
indexes: [
|
|
|
|
{
|
|
|
|
fields: [ 'userId' ],
|
|
|
|
unique: true
|
|
|
|
}
|
|
|
|
]
|
|
|
|
})
|
2024-02-22 10:12:04 +01:00
|
|
|
export class UserNotificationSettingModel extends SequelizeModel<UserNotificationSettingModel> {
|
2018-12-26 10:36:24 +01:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewVideoFromSubscription',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newVideoFromSubscription')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newVideoFromSubscription: UserNotificationSettingValueType
|
2018-12-26 10:36:24 +01:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewCommentOnMyVideo',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newCommentOnMyVideo')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newCommentOnMyVideo: UserNotificationSettingValueType
|
2018-12-26 10:36:24 +01:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
2020-07-07 14:34:16 +02:00
|
|
|
'UserNotificationSettingAbuseAsModerator',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseAsModerator')
|
2018-12-26 10:36:24 +01:00
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
abuseAsModerator: UserNotificationSettingValueType
|
2018-12-26 10:36:24 +01:00
|
|
|
|
2019-04-02 11:26:47 +02:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingVideoAutoBlacklistAsModerator',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'videoAutoBlacklistAsModerator')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
videoAutoBlacklistAsModerator: UserNotificationSettingValueType
|
2019-04-02 11:26:47 +02:00
|
|
|
|
2018-12-26 10:36:24 +01:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingBlacklistOnMyVideo',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'blacklistOnMyVideo')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
blacklistOnMyVideo: UserNotificationSettingValueType
|
2018-12-26 10:36:24 +01:00
|
|
|
|
2019-01-02 16:37:43 +01:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingMyVideoPublished',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoPublished')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
myVideoPublished: UserNotificationSettingValueType
|
2019-01-02 16:37:43 +01:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingMyVideoImportFinished',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoImportFinished')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
myVideoImportFinished: UserNotificationSettingValueType
|
2019-01-02 16:37:43 +01:00
|
|
|
|
2019-01-04 08:56:20 +01:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewUserRegistration',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newUserRegistration')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newUserRegistration: UserNotificationSettingValueType
|
2019-01-04 08:56:20 +01:00
|
|
|
|
2019-04-08 17:26:01 +02:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewInstanceFollower',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newInstanceFollower')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newInstanceFollower: UserNotificationSettingValueType
|
2019-04-08 17:26:01 +02:00
|
|
|
|
2019-08-30 16:50:12 +02:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewInstanceFollower',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'autoInstanceFollowing')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
autoInstanceFollowing: UserNotificationSettingValueType
|
2019-08-30 16:50:12 +02:00
|
|
|
|
2019-01-04 08:56:20 +01:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewFollow',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newFollow')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newFollow: UserNotificationSettingValueType
|
2019-01-04 08:56:20 +01:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingCommentMention',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'commentMention')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
commentMention: UserNotificationSettingValueType
|
2019-01-04 08:56:20 +01:00
|
|
|
|
2020-07-27 16:26:25 +02:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingAbuseStateChange',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseStateChange')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
abuseStateChange: UserNotificationSettingValueType
|
2020-07-27 16:26:25 +02:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingAbuseNewMessage',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'abuseNewMessage')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
abuseNewMessage: UserNotificationSettingValueType
|
2020-07-27 16:26:25 +02:00
|
|
|
|
2021-03-11 16:54:52 +01:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewPeerTubeVersion',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newPeerTubeVersion')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newPeerTubeVersion: UserNotificationSettingValueType
|
2021-03-11 16:54:52 +01:00
|
|
|
|
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
|
|
|
'UserNotificationSettingNewPeerPluginVersion',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'newPluginVersion')
|
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
newPluginVersion: UserNotificationSettingValueType
|
2021-03-11 16:54:52 +01:00
|
|
|
|
2022-03-22 14:35:04 +01:00
|
|
|
@AllowNull(false)
|
|
|
|
@Default(null)
|
|
|
|
@Is(
|
2022-03-22 16:58:49 +01:00
|
|
|
'UserNotificationSettingMyVideoStudioEditionFinished',
|
|
|
|
value => throwIfNotValid(value, isUserNotificationSettingValid, 'myVideoStudioEditionFinished')
|
2022-03-22 14:35:04 +01:00
|
|
|
)
|
|
|
|
@Column
|
2023-07-31 14:34:36 +02:00
|
|
|
myVideoStudioEditionFinished: UserNotificationSettingValueType
|
2022-03-22 14:35:04 +01:00
|
|
|
|
2018-12-26 10:36:24 +01:00
|
|
|
@ForeignKey(() => UserModel)
|
|
|
|
@Column
|
|
|
|
userId: number
|
|
|
|
|
|
|
|
@BelongsTo(() => UserModel, {
|
|
|
|
foreignKey: {
|
|
|
|
allowNull: false
|
|
|
|
},
|
|
|
|
onDelete: 'cascade'
|
|
|
|
})
|
2023-07-31 14:34:36 +02:00
|
|
|
User: Awaited<UserModel>
|
2018-12-26 10:36:24 +01:00
|
|
|
|
|
|
|
@CreatedAt
|
|
|
|
createdAt: Date
|
|
|
|
|
|
|
|
@UpdatedAt
|
|
|
|
updatedAt: Date
|
|
|
|
|
|
|
|
@AfterUpdate
|
|
|
|
@AfterDestroy
|
|
|
|
static removeTokenCache (instance: UserNotificationSettingModel) {
|
2021-03-12 15:20:46 +01:00
|
|
|
return TokensCache.Instance.clearCacheByUserId(instance.userId)
|
2018-12-26 10:36:24 +01:00
|
|
|
}
|
|
|
|
|
2024-02-12 10:47:52 +01:00
|
|
|
static updateUserSettings (settings: UserNotificationSetting, userId: number) {
|
|
|
|
const query = {
|
|
|
|
where: {
|
|
|
|
userId
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return UserNotificationSettingModel.update(settings, query)
|
|
|
|
}
|
|
|
|
|
2019-08-20 19:05:31 +02:00
|
|
|
toFormattedJSON (this: MNotificationSettingFormattable): UserNotificationSetting {
|
2018-12-26 10:36:24 +01:00
|
|
|
return {
|
|
|
|
newCommentOnMyVideo: this.newCommentOnMyVideo,
|
|
|
|
newVideoFromSubscription: this.newVideoFromSubscription,
|
2020-07-07 14:34:16 +02:00
|
|
|
abuseAsModerator: this.abuseAsModerator,
|
2019-04-02 11:26:47 +02:00
|
|
|
videoAutoBlacklistAsModerator: this.videoAutoBlacklistAsModerator,
|
2019-01-02 16:37:43 +01:00
|
|
|
blacklistOnMyVideo: this.blacklistOnMyVideo,
|
|
|
|
myVideoPublished: this.myVideoPublished,
|
2019-01-04 08:56:20 +01:00
|
|
|
myVideoImportFinished: this.myVideoImportFinished,
|
|
|
|
newUserRegistration: this.newUserRegistration,
|
|
|
|
commentMention: this.commentMention,
|
2019-04-08 17:26:01 +02:00
|
|
|
newFollow: this.newFollow,
|
2019-08-30 16:50:12 +02:00
|
|
|
newInstanceFollower: this.newInstanceFollower,
|
2020-07-27 16:26:25 +02:00
|
|
|
autoInstanceFollowing: this.autoInstanceFollowing,
|
|
|
|
abuseNewMessage: this.abuseNewMessage,
|
2021-03-11 16:54:52 +01:00
|
|
|
abuseStateChange: this.abuseStateChange,
|
|
|
|
newPeerTubeVersion: this.newPeerTubeVersion,
|
2022-03-22 16:58:49 +01:00
|
|
|
myVideoStudioEditionFinished: this.myVideoStudioEditionFinished,
|
2021-03-11 16:54:52 +01:00
|
|
|
newPluginVersion: this.newPluginVersion
|
2018-12-26 10:36:24 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|