1 import { AllowNull, BelongsTo, Column, CreatedAt, DataType, ForeignKey, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
2 import { isAbuseMessageValid } from '@server/helpers/custom-validators/abuses'
3 import { AbuseMessage } from '@shared/models'
4 import { AccountModel, ScopeNames as AccountScopeNames } from '../account/account'
5 import { throwIfNotValid, getSort } from '../utils'
6 import { AbuseModel } from './abuse'
7 import { MAbuseMessageFormattable, MAbuseMessage } from '@server/types/models'
10 tableName: 'abuseMessage',
16 fields: [ 'accountId' ]
20 export class AbuseMessageModel extends Model<AbuseMessageModel> {
23 @Is('AbuseMessage', value => throwIfNotValid(value, isAbuseMessageValid, 'message'))
24 @Column(DataType.TEXT)
37 @ForeignKey(() => AccountModel)
41 @BelongsTo(() => AccountModel, {
50 @ForeignKey(() => AbuseModel)
54 @BelongsTo(() => AbuseModel, {
63 static listForApi (abuseId: number) {
67 order: getSort('createdAt'),
71 model: AccountModel.scope(AccountScopeNames.SUMMARY),
77 return AbuseMessageModel.findAndCountAll(options)
78 .then(({ rows, count }) => ({ data: rows, total: count }))
81 static loadByIdAndAbuseId (messageId: number, abuseId: number): Promise<MAbuseMessage> {
82 return AbuseMessageModel.findOne({
90 toFormattedJSON (this: MAbuseMessageFormattable): AbuseMessage {
91 const account = this.Account
92 ? this.Account.toFormattedSummaryJSON()
97 createdAt: this.createdAt,
99 byModerator: this.byModerator,
100 message: this.message,