mirror of
https://github.com/pelican-dev/panel.git
synced 2025-08-03 16:22:13 +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\DeleteMountRequest;
|
||||||
use App\Http\Requests\Api\Application\Mounts\UpdateMountRequest;
|
use App\Http\Requests\Api\Application\Mounts\UpdateMountRequest;
|
||||||
use App\Exceptions\Service\HasActiveServersException;
|
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
|
class MountController extends ApplicationApiController
|
||||||
{
|
{
|
||||||
@ -113,6 +119,42 @@ class MountController extends ApplicationApiController
|
|||||||
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
|
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
|
* Assign eggs to mount
|
||||||
*
|
*
|
||||||
@ -123,13 +165,11 @@ class MountController extends ApplicationApiController
|
|||||||
public function addEggs(Request $request, Mount $mount): array
|
public function addEggs(Request $request, Mount $mount): array
|
||||||
{
|
{
|
||||||
$validatedData = $request->validate([
|
$validatedData = $request->validate([
|
||||||
'eggs' => 'required|exists:eggs,id',
|
'eggs' => 'required|array|exists:eggs,id',
|
||||||
|
'eggs.*' => 'integer',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$eggs = $validatedData['eggs'] ?? [];
|
$mount->eggs()->attach($validatedData['eggs']);
|
||||||
if (count($eggs) > 0) {
|
|
||||||
$mount->eggs()->attach($eggs);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->fractal->item($mount)
|
return $this->fractal->item($mount)
|
||||||
->transformWith($this->getTransformer(MountTransformer::class))
|
->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.
|
* Adds nodes to the mount's many-to-many relation.
|
||||||
*
|
*
|
||||||
@ -145,13 +185,34 @@ class MountController extends ApplicationApiController
|
|||||||
*/
|
*/
|
||||||
public function addNodes(Request $request, Mount $mount): array
|
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'] ?? [];
|
$mount->nodes()->attach($validatedData['nodes']);
|
||||||
if (count($nodes) > 0) {
|
|
||||||
$mount->nodes()->attach($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)
|
return $this->fractal->item($mount)
|
||||||
->transformWith($this->getTransformer(MountTransformer::class))
|
->transformWith($this->getTransformer(MountTransformer::class))
|
||||||
->toArray();
|
->toArray();
|
||||||
@ -180,4 +241,16 @@ class MountController extends ApplicationApiController
|
|||||||
|
|
||||||
return new JsonResponse([], JsonResponse::HTTP_NO_CONTENT);
|
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::prefix('mounts')->group(function () {
|
||||||
Route::get('/', [Application\Mounts\MountController::class, 'index'])->name('api.application.mounts');
|
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}', [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('/', [Application\Mounts\MountController::class, 'store']);
|
||||||
Route::post('/{mount:id}/eggs', [Application\Mounts\MountController::class, 'addEggs'])->name('api.application.mounts.eggs');
|
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}/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::patch('/{mount:id}', [Application\Mounts\MountController::class, 'update']);
|
||||||
|
|
||||||
Route::delete('/{mount:id}', [Application\Mounts\MountController::class, 'delete']);
|
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}/eggs/{egg_id}', [Application\Mounts\MountController::class, 'deleteEgg']);
|
||||||
Route::delete('/{mount:id}/nodes/{node_id}', [Application\Mounts\MountController::class, 'deleteNode']);
|
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