aboutsummaryrefslogtreecommitdiffhomepage
path: root/packages/models/src/users/user-notification.model.ts
blob: 991fe672848c02e5746658ac92e152274d7d7ce6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import { FollowState } from '../actors/index.js'
import { AbuseStateType } from '../moderation/index.js'
import { PluginType_Type } from '../plugins/index.js'

export const UserNotificationType = {
  NEW_VIDEO_FROM_SUBSCRIPTION: 1,
  NEW_COMMENT_ON_MY_VIDEO: 2,
  NEW_ABUSE_FOR_MODERATORS: 3,

  BLACKLIST_ON_MY_VIDEO: 4,
  UNBLACKLIST_ON_MY_VIDEO: 5,

  MY_VIDEO_PUBLISHED: 6,

  MY_VIDEO_IMPORT_SUCCESS: 7,
  MY_VIDEO_IMPORT_ERROR: 8,

  NEW_USER_REGISTRATION: 9,
  NEW_FOLLOW: 10,
  COMMENT_MENTION: 11,

  VIDEO_AUTO_BLACKLIST_FOR_MODERATORS: 12,

  NEW_INSTANCE_FOLLOWER: 13,

  AUTO_INSTANCE_FOLLOWING: 14,

  ABUSE_STATE_CHANGE: 15,

  ABUSE_NEW_MESSAGE: 16,

  NEW_PLUGIN_VERSION: 17,
  NEW_PEERTUBE_VERSION: 18,

  MY_VIDEO_STUDIO_EDITION_FINISHED: 19,

  NEW_USER_REGISTRATION_REQUEST: 20
} as const

export type UserNotificationType_Type = typeof UserNotificationType[keyof typeof UserNotificationType]

export interface VideoInfo {
  id: number
  uuid: string
  shortUUID: string
  name: string
}

export interface AvatarInfo {
  width: number
  path: string
}

export interface ActorInfo {
  id: number
  displayName: string
  name: string
  host: string

  avatars: AvatarInfo[]
  avatar: AvatarInfo
}

export interface UserNotification {
  id: number
  type: UserNotificationType_Type
  read: boolean

  video?: VideoInfo & {
    channel: ActorInfo
  }

  videoImport?: {
    id: number
    video?: VideoInfo
    torrentName?: string
    magnetUri?: string
    targetUrl?: string
  }

  comment?: {
    id: number
    threadId: number
    account: ActorInfo
    video: VideoInfo
  }

  abuse?: {
    id: number
    state: AbuseStateType

    video?: VideoInfo

    comment?: {
      threadId: number

      video: VideoInfo
    }

    account?: ActorInfo
  }

  videoBlacklist?: {
    id: number
    video: VideoInfo
  }

  account?: ActorInfo

  actorFollow?: {
    id: number
    follower: ActorInfo
    state: FollowState

    following: {
      type: 'account' | 'channel' | 'instance'
      name: string
      displayName: string
      host: string
    }
  }

  plugin?: {
    name: string
    type: PluginType_Type
    latestVersion: string
  }

  peertube?: {
    latestVersion: string
  }

  registration?: {
    id: number
    username: string
  }

  createdAt: string
  updatedAt: string
}