teamId}"), ]; } public function broadcastAs(): string { return 'v5.canvas.resource.updated'; } /** * @return array{application: array|null, caddyIngress: array|null} */ public function broadcastWith(): array { $application = $this->applicationId !== null ? V5Application::query()->with('server')->find($this->applicationId) : null; $caddyIngress = $this->caddyIngressServerId !== null ? V5Server::query()->find($this->caddyIngressServerId) : null; return [ 'application' => $application instanceof V5Application ? $this->serializeApplication($application) : null, 'caddyIngress' => $caddyIngress instanceof V5Server && $caddyIngress->isIngress() ? $this->serializeCaddyIngress($caddyIngress) : null, ]; } /** * @return array */ private function serializeApplication(V5Application $application): array { return [ 'id' => (string) $application->id, 'name' => $application->name, 'image' => $application->image, 'containerName' => $application->container_name, 'status' => $application->status, 'statusMessage' => $application->status_message, 'runtimeContainerId' => $application->runtime_container_id, 'serverName' => $application->server?->name, 'meshNamespace' => $application->mesh_namespace, 'meshFqdn' => $application->container_name.'.'.($application->mesh_namespace ?: 'default').'.coolify.internal', 'canvasX' => $application->canvas_x, 'canvasY' => $application->canvas_y, ]; } /** * @return array */ private function serializeCaddyIngress(V5Server $server): array { return [ 'id' => (string) $server->id, 'name' => $server->name, 'host' => $server->host, 'type' => $server->ingressType(), 'status' => $server->ingressStatus(), 'canvasX' => $server->canvas_x ?? -352, 'canvasY' => $server->canvas_y ?? 0, ]; } }