mirror of
https://github.com/pelican-dev/panel.git
synced 2025-08-03 00:12:19 +02:00
Improve Mounts API (#1531)
This commit is contained in:
parent
1f67054777
commit
4d03d6b948
@ -14,6 +14,12 @@ use App\Http\Requests\Api\Application\Mounts\StoreMountRequest;
|
||||
use App\Http\Requests\Api\Application\Mounts\DeleteMountRequest;
|
||||
use App\Http\Requests\Api\Application\Mounts\UpdateMountRequest;
|
||||
use App\Exceptions\Service\HasActiveServersException;
|
||||
use App\Http\Requests\Api\Application\Eggs\GetEggsRequest;
|
||||
use App\Http\Requests\Api\Application\Nodes\GetNodesRequest;
|
||||
use App\Http\Requests\Api\Application\Servers\GetServerRequest;
|
||||
use App\Transformers\Api\Application\EggTransformer;
|
||||
use App\Transformers\Api\Application\NodeTransformer;
|
||||
use App\Transformers\Api\Application\ServerTransformer;
|
||||
|
||||
class MountController extends ApplicationApiController
|
||||
{
|
||||
@ -113,6 +119,42 @@ class MountController extends ApplicationApiController
|
||||
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* List assigned eggs
|
||||
*
|
||||
* @return array<array-key, mixed>
|
||||
*/
|
||||
public function getEggs(GetEggsRequest $request, Mount $mount): array
|
||||
{
|
||||
return $this->fractal->collection($mount->eggs)
|
||||
->transformWith($this->getTransformer(EggTransformer::class))
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* List assigned nodes
|
||||
*
|
||||
* @return array<array-key, mixed>
|
||||
*/
|
||||
public function getNodes(GetNodesRequest $request, Mount $mount): array
|
||||
{
|
||||
return $this->fractal->collection($mount->nodes)
|
||||
->transformWith($this->getTransformer(NodeTransformer::class))
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* List assigned servers
|
||||
*
|
||||
* @return array<array-key, mixed>
|
||||
*/
|
||||
public function getServers(GetServerRequest $request, Mount $mount): array
|
||||
{
|
||||
return $this->fractal->collection($mount->servers)
|
||||
->transformWith($this->getTransformer(ServerTransformer::class))
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign eggs to mount
|
||||
*
|
||||
@ -123,13 +165,11 @@ class MountController extends ApplicationApiController
|
||||
public function addEggs(Request $request, Mount $mount): array
|
||||
{
|
||||
$validatedData = $request->validate([
|
||||
'eggs' => 'required|exists:eggs,id',
|
||||
'eggs' => 'required|array|exists:eggs,id',
|
||||
'eggs.*' => 'integer',
|
||||
]);
|
||||
|
||||
$eggs = $validatedData['eggs'] ?? [];
|
||||
if (count($eggs) > 0) {
|
||||
$mount->eggs()->attach($eggs);
|
||||
}
|
||||
$mount->eggs()->attach($validatedData['eggs']);
|
||||
|
||||
return $this->fractal->item($mount)
|
||||
->transformWith($this->getTransformer(MountTransformer::class))
|
||||
@ -137,7 +177,7 @@ class MountController extends ApplicationApiController
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign mounts to mount
|
||||
* Assign nodes to mount
|
||||
*
|
||||
* Adds nodes to the mount's many-to-many relation.
|
||||
*
|
||||
@ -145,12 +185,33 @@ class MountController extends ApplicationApiController
|
||||
*/
|
||||
public function addNodes(Request $request, Mount $mount): array
|
||||
{
|
||||
$data = $request->validate(['nodes' => 'required|exists:nodes,id']);
|
||||
$validatedData = $request->validate([
|
||||
'nodes' => 'required|array|exists:nodes,id',
|
||||
'nodes.*' => 'integer',
|
||||
]);
|
||||
|
||||
$nodes = $data['nodes'] ?? [];
|
||||
if (count($nodes) > 0) {
|
||||
$mount->nodes()->attach($nodes);
|
||||
}
|
||||
$mount->nodes()->attach($validatedData['nodes']);
|
||||
|
||||
return $this->fractal->item($mount)
|
||||
->transformWith($this->getTransformer(MountTransformer::class))
|
||||
->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign servers to mount
|
||||
*
|
||||
* Adds servers to the mount's many-to-many relation.
|
||||
*
|
||||
* @return array<array-key, mixed>
|
||||
*/
|
||||
public function addServers(Request $request, Mount $mount): array
|
||||
{
|
||||
$validatedData = $request->validate([
|
||||
'servers' => 'required|array|exists:servers,id',
|
||||
'servers.*' => 'integer',
|
||||
]);
|
||||
|
||||
$mount->servers()->attach($validatedData['servers']);
|
||||
|
||||
return $this->fractal->item($mount)
|
||||
->transformWith($this->getTransformer(MountTransformer::class))
|
||||
@ -180,4 +241,16 @@ class MountController extends ApplicationApiController
|
||||
|
||||
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unassign server from mount
|
||||
*
|
||||
* Deletes a server from the mount's many-to-many relation.
|
||||
*/
|
||||
public function deleteServer(Mount $mount, int $server_id): JsonResponse
|
||||
{
|
||||
$mount->servers()->detach($server_id);
|
||||
|
||||
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
|
||||
}
|
||||
}
|
||||
|
@ -133,16 +133,21 @@ Route::prefix('/database-hosts')->group(function () {
|
||||
Route::prefix('mounts')->group(function () {
|
||||
Route::get('/', [Application\Mounts\MountController::class, 'index'])->name('api.application.mounts');
|
||||
Route::get('/{mount:id}', [Application\Mounts\MountController::class, 'view'])->name('api.application.mounts.view');
|
||||
Route::get('/{mount:id}/eggs', [Application\Mounts\MountController::class, 'getEggs']);
|
||||
Route::get('/{mount:id}/nodes', [Application\Mounts\MountController::class, 'getNodes']);
|
||||
Route::get('/{mount:id}/servers', [Application\Mounts\MountController::class, 'getServers']);
|
||||
|
||||
Route::post('/', [Application\Mounts\MountController::class, 'store']);
|
||||
Route::post('/{mount:id}/eggs', [Application\Mounts\MountController::class, 'addEggs'])->name('api.application.mounts.eggs');
|
||||
Route::post('/{mount:id}/nodes', [Application\Mounts\MountController::class, 'addNodes'])->name('api.application.mounts.nodes');
|
||||
Route::post('/{mount:id}/servers', [Application\Mounts\MountController::class, 'addServers'])->name('api.application.mounts.servers');
|
||||
|
||||
Route::patch('/{mount:id}', [Application\Mounts\MountController::class, 'update']);
|
||||
|
||||
Route::delete('/{mount:id}', [Application\Mounts\MountController::class, 'delete']);
|
||||
Route::delete('/{mount:id}/eggs/{egg_id}', [Application\Mounts\MountController::class, 'deleteEgg']);
|
||||
Route::delete('/{mount:id}/nodes/{node_id}', [Application\Mounts\MountController::class, 'deleteNode']);
|
||||
Route::delete('/{mount:id}/servers/{server_id}', [Application\Mounts\MountController::class, 'deleteServer']);
|
||||
});
|
||||
|
||||
/*
|
||||
|
Loading…
x
Reference in New Issue
Block a user