删除 ServerController.php
This commit is contained in:
parent
9a9868a964
commit
d8c4425456
@ -1,151 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Convoy\Http\Controllers\Admin;
|
||||
|
||||
use Convoy\Enums\Server\Status;
|
||||
use Convoy\Enums\Server\SuspensionAction;
|
||||
use Convoy\Exceptions\Repository\Proxmox\ProxmoxConnectionException;
|
||||
use Convoy\Http\Controllers\ApiController;
|
||||
use Convoy\Http\Requests\Admin\Servers\Settings\UpdateBuildRequest;
|
||||
use Convoy\Http\Requests\Admin\Servers\Settings\UpdateGeneralInfoRequest;
|
||||
use Convoy\Http\Requests\Admin\Servers\StoreServerRequest;
|
||||
use Convoy\Models\Filters\FiltersServerByAddressPoolId;
|
||||
use Convoy\Models\Filters\FiltersServerWildcard;
|
||||
use Convoy\Models\Server;
|
||||
use Convoy\Services\Servers\CloudinitService;
|
||||
use Convoy\Services\Servers\NetworkService;
|
||||
use Convoy\Services\Servers\ServerCreationService;
|
||||
use Convoy\Services\Servers\ServerDeletionService;
|
||||
use Convoy\Services\Servers\ServerSuspensionService;
|
||||
use Convoy\Services\Servers\SyncBuildService;
|
||||
use Convoy\Transformers\Admin\ServerBuildTransformer;
|
||||
use Illuminate\Database\ConnectionInterface;
|
||||
use Illuminate\Http\Request;
|
||||
use Spatie\QueryBuilder\AllowedFilter;
|
||||
use Spatie\QueryBuilder\QueryBuilder;
|
||||
use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException;
|
||||
|
||||
class ServerController extends ApiController
|
||||
{
|
||||
public function __construct(
|
||||
private ConnectionInterface $connection,
|
||||
private ServerDeletionService $deletionService,
|
||||
private NetworkService $networkService,
|
||||
private ServerSuspensionService $suspensionService,
|
||||
private ServerCreationService $creationService,
|
||||
private CloudinitService $cloudinitService,
|
||||
private SyncBuildService $buildModificationService,
|
||||
)
|
||||
{
|
||||
}
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$servers = QueryBuilder::for(Server::query())
|
||||
->with(['addresses', 'user', 'node'])
|
||||
->defaultSort('-id')
|
||||
->allowedFilters(
|
||||
[
|
||||
AllowedFilter::custom(
|
||||
'*', new FiltersServerWildcard(),
|
||||
),
|
||||
AllowedFilter::custom(
|
||||
'address_pool_id',
|
||||
new FiltersServerByAddressPoolId(),
|
||||
),
|
||||
AllowedFilter::exact('node_id'),
|
||||
AllowedFilter::exact('user_id'),
|
||||
'name',
|
||||
],
|
||||
)
|
||||
->paginate(min($request->query('per_page', 50), 100))->appends(
|
||||
$request->query(),
|
||||
);
|
||||
|
||||
return fractal($servers, new ServerBuildTransformer())->parseIncludes($request->include)
|
||||
->respond();
|
||||
}
|
||||
|
||||
public function show(Request $request, Server $server)
|
||||
{
|
||||
$server->load(['addresses', 'user', 'node']);
|
||||
|
||||
return fractal($server, new ServerBuildTransformer())->parseIncludes($request->include)
|
||||
->respond();
|
||||
}
|
||||
|
||||
public function store(StoreServerRequest $request)
|
||||
{
|
||||
$server = $this->creationService->handle($request->validated());
|
||||
|
||||
$server->load(['addresses', 'user', 'node']);
|
||||
|
||||
return fractal($server, new ServerBuildTransformer())->parseIncludes(['user', 'node'])
|
||||
->respond();
|
||||
}
|
||||
|
||||
public function update(UpdateGeneralInfoRequest $request, Server $server)
|
||||
{
|
||||
$this->connection->transaction(function () use ($request, $server) {
|
||||
if ($request->hostname !== $server->hostname && !empty($request->hostname)) {
|
||||
try {
|
||||
$this->cloudinitService->updateHostname($server, $request->hostname);
|
||||
} catch (ProxmoxConnectionException) {
|
||||
throw new ServiceUnavailableHttpException(
|
||||
message: "Server {$server->uuid} failed to sync hostname.",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$server->update($request->validated());
|
||||
});
|
||||
|
||||
$server->load(['addresses', 'user', 'node']);
|
||||
|
||||
return fractal($server, new ServerBuildTransformer())->parseIncludes(['user', 'node'])
|
||||
->respond();
|
||||
}
|
||||
|
||||
public function updateBuild(UpdateBuildRequest $request, Server $server)
|
||||
{
|
||||
$server->update($request->safe()->except('address_ids'));
|
||||
|
||||
$this->networkService->updateAddresses($server, $request->address_ids ?? []);
|
||||
|
||||
try {
|
||||
$this->buildModificationService->handle($server);
|
||||
} catch (ProxmoxConnectionException $e) {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
$server->load(['addresses', 'user', 'node']);
|
||||
|
||||
return fractal($server, new ServerBuildTransformer())->parseIncludes(['user', 'node'])
|
||||
->respond();
|
||||
}
|
||||
|
||||
public function suspend(Server $server)
|
||||
{
|
||||
$this->suspensionService->toggle($server);
|
||||
|
||||
return $this->returnNoContent();
|
||||
}
|
||||
|
||||
public function unsuspend(Server $server)
|
||||
{
|
||||
$this->suspensionService->toggle($server, SuspensionAction::UNSUSPEND);
|
||||
|
||||
return $this->returnNoContent();
|
||||
}
|
||||
|
||||
public function destroy(Request $request, Server $server)
|
||||
{
|
||||
$this->connection->transaction(function () use ($server, $request) {
|
||||
$server->update(['status' => Status::DELETING->value]);
|
||||
|
||||
$this->deletionService->handle($server, $request->input('no_purge', false));
|
||||
});
|
||||
|
||||
return $this->returnNoContent();
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user