'array', 'last_health_check_at' => 'datetime', 'last_usage_sync_at' => 'datetime', 'is_default' => 'boolean', 'db_port' => 'integer', 'ssh_port' => 'integer', ]; protected $hidden = [ 'db_password', 'ssh_private_key', ]; public function primary(): BelongsTo { return $this->belongsTo(self::class, 'primary_email_server_id'); } public function extensions(): HasMany { return $this->hasMany(self::class, 'primary_email_server_id'); } public function emailDomains(): HasMany { return $this->hasMany(EmailDomain::class); } public function domains(): HasMany { return $this->hasMany(Domain::class); } public function capacityAlerts(): HasMany { return $this->hasMany(MailServerCapacityAlert::class); } public function isPrimary(): bool { return $this->role === self::ROLE_PRIMARY; } public function isExtension(): bool { return $this->role === self::ROLE_EXTENSION; } public function isAvailable(): bool { return $this->status === self::STATUS_ACTIVE; } public function poolRoot(): self { return $this->isExtension() && $this->primary ? $this->primary : $this; } public function mailDatabaseServer(): self { return $this->poolRoot(); } public function scopePrimaries(Builder $query): Builder { return $query->where('role', self::ROLE_PRIMARY); } public function scopeAvailable(Builder $query): Builder { return $query->where('status', self::STATUS_ACTIVE); } }