RegistryType::class, 'credentials' => 'encrypted:array', 'readiness_checks' => 'array', 'health_checked_at' => 'datetime', 'ready_at' => 'datetime', ]; } public function organisation(): BelongsTo { return $this->belongsTo(Organisation::class); } public function controlServer(): BelongsTo { return $this->belongsTo(Server::class, 'control_server_id'); } public function markHealthy(?string $message = null): void { $this->forceFill([ 'health_status' => 'healthy', 'health_message' => $message, 'health_checked_at' => Carbon::now(), 'ready_at' => $this->ready_at ?? Carbon::now(), ])->save(); } public function markUnhealthy(string $message): void { $this->forceFill([ 'health_status' => 'unhealthy', 'health_message' => $message, 'health_checked_at' => Carbon::now(), 'ready_at' => null, ])->save(); } public function isReady(): bool { return $this->type !== RegistryType::MANAGED || ($this->ready_at !== null && $this->health_status === 'healthy'); } }