Path: blob/1.0-develop/app/Services/Databases/DeployServerDatabaseService.php
10262 views
<?php12namespace Pterodactyl\Services\Databases;34use Webmozart\Assert\Assert;5use Pterodactyl\Models\Server;6use Pterodactyl\Models\Database;7use Pterodactyl\Models\DatabaseHost;8use Pterodactyl\Exceptions\Service\Database\NoSuitableDatabaseHostException;910class DeployServerDatabaseService11{12/**13* DeployServerDatabaseService constructor.14*/15public function __construct(private DatabaseManagementService $managementService)16{17}1819/**20* @throws \Throwable21* @throws \Pterodactyl\Exceptions\Service\Database\TooManyDatabasesException22* @throws \Pterodactyl\Exceptions\Service\Database\DatabaseClientFeatureNotEnabledException23*/24public function handle(Server $server, array $data): Database25{26Assert::notEmpty($data['database'] ?? null);27Assert::notEmpty($data['remote'] ?? null);2829$hosts = DatabaseHost::query()->get()->toBase();30if ($hosts->isEmpty()) {31throw new NoSuitableDatabaseHostException();32} else {33$nodeHosts = $hosts->where('node_id', $server->node_id)->toBase();3435if ($nodeHosts->isEmpty() && !config('pterodactyl.client_features.databases.allow_random')) {36throw new NoSuitableDatabaseHostException();37}38}3940return $this->managementService->create($server, [41'database_host_id' => $nodeHosts->isEmpty()42? $hosts->random()->id43: $nodeHosts->random()->id,44'database' => DatabaseManagementService::generateUniqueDatabaseName($data['database'], $server->id),45'remote' => $data['remote'],46]);47}48}495051