Add support for external_id on servers, closes #975

This commit is contained in:
Dane Everitt 2018-02-24 11:57:12 -06:00
parent f655188c58
commit 633bba6d6e
No known key found for this signature in database
GPG key ID: EEA66103B3D71F53
11 changed files with 73 additions and 15 deletions

View file

@ -406,7 +406,7 @@ class ServersController extends Controller
public function setDetails(Request $request, Server $server)
{
$this->detailsModificationService->handle($server, $request->only([
'owner_id', 'name', 'description',
'owner_id', 'external_id', 'name', 'description',
]));
$this->alert->success(trans('admin/server.alerts.details_updated'))->flash();

View file

@ -31,6 +31,7 @@ class StoreServerRequest extends ApplicationApiRequest
$rules = Server::getCreateRules();
return [
'external_id' => $rules['external_id'],
'name' => $rules['name'],
'description' => array_merge(['nullable'], $rules['description']),
'user' => $rules['owner_id'],

View file

@ -53,6 +53,7 @@ class Server extends Model implements CleansAttributes, ValidableContract
* @var array
*/
protected static $applicationRules = [
'external_id' => 'sometimes',
'owner_id' => 'required',
'name' => 'required',
'memory' => 'required',
@ -74,6 +75,7 @@ class Server extends Model implements CleansAttributes, ValidableContract
* @var array
*/
protected static $dataIntegrityRules = [
'external_id' => 'nullable|string|between:1,191|unique:servers',
'owner_id' => 'integer|exists:users,id',
'name' => 'string|min:1|max:255',
'node_id' => 'exists:nodes,id',
@ -122,13 +124,14 @@ class Server extends Model implements CleansAttributes, ValidableContract
* @var array
*/
protected $searchableColumns = [
'name' => 50,
'uuidShort' => 10,
'uuid' => 10,
'pack.name' => 5,
'user.email' => 20,
'user.username' => 20,
'name' => 100,
'uuid' => 80,
'uuidShort' => 80,
'external_id' => 50,
'user.email' => 40,
'user.username' => 30,
'node.name' => 10,
'pack.name' => 10,
];
/**

View file

@ -69,6 +69,7 @@ class DetailsModificationService
$this->connection->beginTransaction();
$response = $this->repository->setFreshModel($this->getUpdatedModel())->update($server->id, [
'external_id' => array_get($data, 'external_id'),
'owner_id' => array_get($data, 'owner_id'),
'name' => array_get($data, 'name'),
'description' => array_get($data, 'description') ?? '',

View file

@ -211,6 +211,7 @@ class ServerCreationService
private function createModel(array $data): Server
{
return $this->repository->create([
'external_id' => array_get($data, 'external_id'),
'uuid' => Uuid::uuid4()->toString(),
'uuidShort' => str_random(8),
'node_id' => array_get($data, 'node_id'),

View file

@ -2,7 +2,6 @@
namespace Pterodactyl\Transformers\Api\Application;
use Cake\Chronos\Chronos;
use Pterodactyl\Models\Server;
use Pterodactyl\Services\Acl\Api\AdminAcl;
use Pterodactyl\Services\Servers\EnvironmentService;
@ -63,6 +62,7 @@ class ServerTransformer extends BaseTransformer
{
return [
'id' => $server->getKey(),
'external_id' => $server->external_id,
'uuid' => $server->uuid,
'identifier' => $server->uuidShort,
'name' => $server->name,
@ -87,8 +87,8 @@ class ServerTransformer extends BaseTransformer
'installed' => (int) $server->installed === 1,
'environment' => $this->environmentService->handle($server),
],
'created_at' => Chronos::createFromFormat(Chronos::DEFAULT_TO_STRING_FORMAT, $server->created_at)->setTimezone('UTC')->toIso8601String(),
'updated_at' => Chronos::createFromFormat(Chronos::DEFAULT_TO_STRING_FORMAT, $server->updated_at)->setTimezone('UTC')->toIso8601String(),
$server->getUpdatedAtColumn() => $this->formatTimestamp($server->updated_at),
$server->getCreatedAtColumn() => $this->formatTimestamp($server->created_at),
];
}