X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Fmodels%2Fserver%2Fserver.ts;h=25d9924fb33e7f91b8fc1f8bb6be01fa002ea8cb;hb=5ec3cbdf22fc88ebe57f370fc0bc0e3df7453458;hp=c43146156efad09d366c76df309695ac01ac8f0d;hpb=60650c77c8a2a98e92d869b237ae4900f369a8fc;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/models/server/server.ts b/server/models/server/server.ts index c43146156..25d9924fb 100644 --- a/server/models/server/server.ts +++ b/server/models/server/server.ts @@ -1,6 +1,10 @@ -import { AllowNull, Column, CreatedAt, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { AllowNull, Column, CreatedAt, Default, HasMany, Is, Model, Table, UpdatedAt } from 'sequelize-typescript' +import { MServer, MServerFormattable } from '@server/types/models/server' +import { AttributesOnly } from '@shared/core-utils' import { isHostValid } from '../../helpers/custom-validators/servers' +import { ActorModel } from '../actor/actor' import { throwIfNotValid } from '../utils' +import { ServerBlocklistModel } from './server-blocklist' @Table({ tableName: 'server', @@ -11,16 +15,76 @@ import { throwIfNotValid } from '../utils' } ] }) -export class ServerModel extends Model { +export class ServerModel extends Model>> { @AllowNull(false) @Is('Host', value => throwIfNotValid(value, isHostValid, 'valid host')) @Column host: string + @AllowNull(false) + @Default(false) + @Column + redundancyAllowed: boolean + @CreatedAt createdAt: Date @UpdatedAt updatedAt: Date + + @HasMany(() => ActorModel, { + foreignKey: { + name: 'serverId', + allowNull: true + }, + onDelete: 'CASCADE', + hooks: true + }) + Actors: ActorModel[] + + @HasMany(() => ServerBlocklistModel, { + foreignKey: { + allowNull: false + }, + onDelete: 'CASCADE' + }) + BlockedByAccounts: ServerBlocklistModel[] + + static load (id: number): Promise { + const query = { + where: { + id + } + } + + return ServerModel.findOne(query) + } + + static loadByHost (host: string): Promise { + const query = { + where: { + host + } + } + + return ServerModel.findOne(query) + } + + static async loadOrCreateByHost (host: string) { + let server = await ServerModel.loadByHost(host) + if (!server) server = await ServerModel.create({ host }) + + return server + } + + isBlocked () { + return this.BlockedByAccounts && this.BlockedByAccounts.length !== 0 + } + + toFormattedJSON (this: MServerFormattable) { + return { + host: this.host + } + } }