saloon, hetzner requests, spatie/ssh, serverprovider enum

This commit is contained in:
2025-03-27 12:56:28 +00:00
parent 25428dbd31
commit 2c881c9722
10 changed files with 290 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
<?php
namespace App\Enums;
enum ServerProvider: string
{
case Hetzner = 'Hetzner';
case DigitalOcean = 'DigitalOcean';
}

View File

@@ -0,0 +1,22 @@
<?php
namespace App\Http\Integrations\Connectors;
use Saloon\Http\Connector;
class HetznerConnector extends Connector
{
public function resolveBaseUrl(): string
{
return "https://api.hetzner.cloud/v1";
}
protected function defaultHeaders(): array
{
return [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Authorization' => 'Bearer ' . config('services.hetzner.key'),
];
}
}

View File

@@ -0,0 +1,34 @@
<?php
namespace App\Http\Integrations\Requests\Hetzner\Images;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;
class ListImagesRequest extends Request
{
protected Method $method = Method::GET;
public function __construct(
protected ?string $name = null,
protected bool $includeDeprecated = false,
protected ?string $architecture = null,
protected ?string $labelSelector = null,
) {}
protected function defaultQuery(): array
{
return [
'name' => $this->name,
'include_deprecated' => $this->includeDeprecated,
'architecture' => $this->architecture,
'label_selector' => $this->labelSelector,
];
}
public function resolveEndpoint(): string
{
return '/images';
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Http\Integrations\Requests\Hetzner\Locations;
use Saloon\Enums\Method;
use Saloon\Http\Request;
class ListLocationsRequest extends Request
{
protected Method $method = Method::GET;
public function resolveEndpoint(): string
{
return '/locations';
}
}

View File

@@ -0,0 +1,16 @@
<?php
namespace App\Http\Integrations\Requests\Hetzner\ServerTypes;
use Saloon\Enums\Method;
use Saloon\Http\Request;
class ListServerTypesRequest extends Request
{
protected Method $method = Method::GET;
public function resolveEndpoint(): string
{
return '/server_types';
}
}

View File

@@ -0,0 +1,37 @@
<?php
namespace App\Http\Integrations\Requests\Hetzner\Servers;
use Saloon\Contracts\Body\HasBody;
use Saloon\Enums\Method;
use Saloon\Http\Request;
use Saloon\Traits\Body\HasJsonBody;
class CreateServerRequest extends Request implements HasBody
{
use HasJsonBody;
protected Method $method = Method::POST;
public function __construct(
protected ?string $image = null,
protected ?string $name = null,
protected ?string $serverType = null,
protected ?string $location = null,
) {}
protected function defaultBody(): array
{
return [
'image' => $this->image,
'name' => $this->name,
'server_type' => $this->serverType,
'location' => $this->location,
];
}
public function resolveEndpoint(): string
{
return '/servers';
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use App\Enums\ServerProvider;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
@@ -9,6 +10,13 @@ class Server extends Model
{
protected $guarded = [];
protected function casts(): array
{
return [
'provider' => ServerProvider::class,
];
}
public function services(): HasMany
{
return $this->hasMany(Service::class);