onQueue(deployment_queue()); } public function handle(): void { $database = $this->databaseClass::query()->findOrFail($this->databaseId); abort_unless((int) $database->team()->id === $this->teamId, 403); $activity = Activity::query()->findOrFail($this->activityId); $result = match ($database->getMorphClass()) { StandalonePostgresql::class => StartPostgresql::run($database, $activity), StandaloneRedis::class => StartRedis::run($database, $activity), StandaloneMongodb::class => StartMongodb::run($database, $activity), StandaloneMysql::class => StartMysql::run($database, $activity), StandaloneMariadb::class => StartMariadb::run($database, $activity), StandaloneKeydb::class => StartKeydb::run($database, $activity), StandaloneDragonfly::class => StartDragonfly::run($database, $activity), StandaloneClickhouse::class => StartClickhouse::run($database, $activity), }; if (! $result instanceof Activity || data_get($result, 'properties.status') !== ProcessStatus::FINISHED->value) { throw DatabaseStartException::startCommandsDidNotRun(); } event(new DatabaseStatusChanged($this->userId)); } public function failed(?Throwable $exception): void { try { $activity = Activity::query()->find($this->activityId); if (! $activity) { return; } ResourceStartActivity::markFailed( $activity, $exception instanceof DatabaseStartException ? $exception->getMessage() : 'Database start failed.', ); } finally { event(new DatabaseStatusChanged($this->userId)); } } }