server.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { AllowNull, Column, CreatedAt, Default, HasMany, Is, Model, Table, UpdatedAt } from 'sequelize-typescript'
  2. import { isHostValid } from '../../helpers/custom-validators/servers'
  3. import { ActorModel } from '../activitypub/actor'
  4. import { throwIfNotValid } from '../utils'
  5. @Table({
  6. tableName: 'server',
  7. indexes: [
  8. {
  9. fields: [ 'host' ],
  10. unique: true
  11. }
  12. ]
  13. })
  14. export class ServerModel extends Model<ServerModel> {
  15. @AllowNull(false)
  16. @Is('Host', value => throwIfNotValid(value, isHostValid, 'valid host'))
  17. @Column
  18. host: string
  19. @AllowNull(false)
  20. @Default(false)
  21. @Column
  22. redundancyAllowed: boolean
  23. @CreatedAt
  24. createdAt: Date
  25. @UpdatedAt
  26. updatedAt: Date
  27. @HasMany(() => ActorModel, {
  28. foreignKey: {
  29. name: 'serverId',
  30. allowNull: true
  31. },
  32. onDelete: 'CASCADE',
  33. hooks: true
  34. })
  35. Actors: ActorModel[]
  36. static loadByHost (host: string) {
  37. const query = {
  38. where: {
  39. host
  40. }
  41. }
  42. return ServerModel.findOne(query)
  43. }
  44. toFormattedJSON () {
  45. return {
  46. host: this.host
  47. }
  48. }
  49. }