]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/models/abuse/abuse-message.ts
Prevent video import on non unicast ips
[github/Chocobozzz/PeerTube.git] / server / models / abuse / abuse-message.ts
CommitLineData
edbc9325
C
1import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
2import { isAbuseMessageValid } from '@server/helpers/custom-validators/abuses'
b49f22d8 3import { MAbuseMessage, MAbuseMessageFormattable } from '@server/types/models'
16c016e8 4import { AttributesOnly } from '@shared/core-utils'
edbc9325
C
5import { AbuseMessage } from '@shared/models'
6import { AccountModel, ScopeNames as AccountScopeNames } from '../account/account'
b49f22d8 7import { getSort, throwIfNotValid } from '../utils'
edbc9325 8import { AbuseModel } from './abuse'
edbc9325
C
9
10@Table({
11 tableName: 'abuseMessage',
12 indexes: [
13 {
14 fields: [ 'abuseId' ]
15 },
16 {
17 fields: [ 'accountId' ]
18 }
19 ]
20})
16c016e8 21export class AbuseMessageModel extends Model<Partial<AttributesOnly<AbuseMessageModel>>> {
edbc9325
C
22
23 @AllowNull(false)
24 @Is('AbuseMessage', value => throwIfNotValid(value, isAbuseMessageValid, 'message'))
25 @Column(DataType.TEXT)
26 message: string
27
28 @AllowNull(false)
29 @Column
30 byModerator: boolean
31
32 @CreatedAt
33 createdAt: Date
34
35 @UpdatedAt
36 updatedAt: Date
37
38 @ForeignKey(() => AccountModel)
39 @Column
40 accountId: number
41
42 @BelongsTo(() => AccountModel, {
43 foreignKey: {
44 name: 'accountId',
45 allowNull: true
46 },
47 onDelete: 'set null'
48 })
49 Account: AccountModel
50
51 @ForeignKey(() => AbuseModel)
52 @Column
53 abuseId: number
54
55 @BelongsTo(() => AbuseModel, {
56 foreignKey: {
57 name: 'abuseId',
58 allowNull: false
59 },
60 onDelete: 'cascade'
61 })
62 Abuse: AbuseModel
63
64 static listForApi (abuseId: number) {
65 const options = {
66 where: { abuseId },
67
68 order: getSort('createdAt'),
69
70 include: [
71 {
72 model: AccountModel.scope(AccountScopeNames.SUMMARY),
73 required: false
74 }
75 ]
76 }
77
78 return AbuseMessageModel.findAndCountAll(options)
79 .then(({ rows, count }) => ({ data: rows, total: count }))
80 }
81
82 static loadByIdAndAbuseId (messageId: number, abuseId: number): Promise<MAbuseMessage> {
83 return AbuseMessageModel.findOne({
84 where: {
85 id: messageId,
86 abuseId
87 }
88 })
89 }
90
91 toFormattedJSON (this: MAbuseMessageFormattable): AbuseMessage {
92 const account = this.Account
93 ? this.Account.toFormattedSummaryJSON()
94 : null
95
96 return {
97 id: this.id,
441e453a
C
98 createdAt: this.createdAt,
99
edbc9325
C
100 byModerator: this.byModerator,
101 message: this.message,
102
103 account
104 }
105 }
106}