1 import { Transaction } from 'sequelize'
2 import { AllowNull, Column, CreatedAt, Default, HasMany, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
3 import { MServer, MServerFormattable } from '@server/types/models/server'
4 import { AttributesOnly } from '@shared/typescript-utils'
5 import { isHostValid } from '../../helpers/custom-validators/servers'
6 import { ActorModel } from '../actor/actor'
7 import { throwIfNotValid } from '../utils'
8 import { ServerBlocklistModel } from './server-blocklist'
19 export class ServerModel extends Model<Partial<AttributesOnly<ServerModel>>> {
22 @Is('Host', value => throwIfNotValid(value, isHostValid, 'valid host'))
29 redundancyAllowed: boolean
37 @HasMany(() => ActorModel, {
47 @HasMany(() => ServerBlocklistModel, {
53 BlockedBy: ServerBlocklistModel[]
55 static load (id: number, transaction?: Transaction): Promise<MServer> {
63 return ServerModel.findOne(query)
66 static loadByHost (host: string): Promise<MServer> {
73 return ServerModel.findOne(query)
76 static async loadOrCreateByHost (host: string) {
77 let server = await ServerModel.loadByHost(host)
78 if (!server) server = await ServerModel.create({ host })
84 return this.BlockedBy && this.BlockedBy.length !== 0
87 toFormattedJSON (this: MServerFormattable) {