diff --git a/app/Http/Controllers/Application/Nodes/NodeController.php b/app/Http/Controllers/Application/Nodes/NodeController.php index 8dfaa804..5eab9e07 100644 --- a/app/Http/Controllers/Application/Nodes/NodeController.php +++ b/app/Http/Controllers/Application/Nodes/NodeController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Application\Nodes; use App\Http\Controllers\ApplicationApiController; use App\Http\Controllers\Controller; use App\Models\Node; +use App\Transformers\Application\NodeTransformer; use Illuminate\Http\Request; use Spatie\QueryBuilder\QueryBuilder; @@ -17,13 +18,11 @@ class NodeController extends ApplicationApiController ->allowedSorts(['id', 'port']) ->paginate($request->query('per_page') ?? 50); - return $nodes; + return fractal($nodes, new NodeTransformer())->respond(); } public function show(Node $node) { - return $this->returnContent([ - 'data' => $node, - ]); + return fractal($node, new NodeTransformer())->respond(); } } diff --git a/app/Http/Controllers/Application/Servers/ServerController.php b/app/Http/Controllers/Application/Servers/ServerController.php index 8f7b7331..5315b5d1 100644 --- a/app/Http/Controllers/Application/Servers/ServerController.php +++ b/app/Http/Controllers/Application/Servers/ServerController.php @@ -12,6 +12,8 @@ use App\Services\Servers\CreationService; use App\Services\Servers\InstallService; use App\Services\Servers\NetworkService; use App\Services\Servers\ResourceService; +use App\Transformers\Application\ServerTransformer; +use App\Transformers\Application\SpecificationTransformer; use Illuminate\Http\Request; use Spatie\QueryBuilder\QueryBuilder; @@ -29,24 +31,19 @@ class ServerController extends ApplicationApiController ->allowedSorts(['id', 'user_id', 'node_id', 'vmid']) ->paginate($request->query('per_page') ?? 50); - return $servers; + return fractal($servers, new ServerTransformer())->respond(); } public function store(StoreServerRequest $request) { $server = $this->creationService->handle($request->type, $request->validated(), $request->is_template, $request->is_visible); - return $this->returnContent([ - 'data' => $server, - 'message' => 'Created server' - ]); + return fractal($server, new ServerTransformer())->respond(); } public function show(Server $server) { - return $this->returnContent([ - 'data' => $server - ]); + return fractal($server, new ServerTransformer())->respond(); } public function destroy(Server $server, Request $request) @@ -57,26 +54,21 @@ class ServerController extends ApplicationApiController $server->delete(); - return $this->returnContent([ - 'message' => 'Deleted server' - ]); + return $this->returnNoContent(); } public function update(Server $server, UpdateServerRequest $request) { $server = $server->update($request->validated()); - return $this->returnContent([ - 'data' => $server, - 'message' => 'Updated server' - ]); + return fractal($server, new ServerTransformer())->respond(); } public function getSpecifications(Server $server) { - return $this->returnContent([ - 'data' => $this->resourceService->setServer($server)->getSpecifications() - ]); + $data = $this->resourceService->setServer($server)->getSpecifications(); + + return fractal()->item($data)->transformWith(new SpecificationTransformer()); } public function updateSpecifications(Server $server, UpdateSpecificationsRequest $request) diff --git a/app/Http/Controllers/Application/Users/UserController.php b/app/Http/Controllers/Application/Users/UserController.php index 4e7da5ee..392d1306 100644 --- a/app/Http/Controllers/Application/Users/UserController.php +++ b/app/Http/Controllers/Application/Users/UserController.php @@ -7,6 +7,7 @@ use App\Http\Controllers\Controller; use App\Http\Requests\Application\Users\StoreUserRequest; use App\Http\Requests\Application\Users\UpdateUserRequest; use App\Models\User; +use App\Transformers\Application\UserTransformer; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Hash; @@ -19,33 +20,31 @@ class UserController extends ApplicationApiController { /** * @param Request $request - * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator + * @return \Illuminate\Http\JsonResponse */ - public function index(Request $request) + public function index(Request $request): \Illuminate\Http\JsonResponse { $users = QueryBuilder::for(User::query()) ->allowedFilters(['name', 'email', 'root_admin']) ->allowedSorts(['id']) ->paginate($request->query('per_page') ?? 50); - return $users; + return fractal($users, new UserTransformer())->respond(); } /** * @param User $user - * @return Response + * @return \Illuminate\Http\JsonResponse */ public function show(User $user) { - return new Response([ - 'data' => $user - ]); + return fractal($user, new UserTransformer())->respond(); } /** * @param StoreUserRequest $request - * @return Response + * @return \Illuminate\Http\JsonResponse */ public function store(StoreUserRequest $request) { @@ -56,10 +55,7 @@ class UserController extends ApplicationApiController 'root_admin' => $request->root_admin ]); - return $this->returnContent([ - 'data' => $user, - 'message' => 'User created', - ]); + return fractal($user, new UserTransformer())->respond(); } /** @@ -70,15 +66,13 @@ class UserController extends ApplicationApiController { $user->delete(); - return $this->returnContent([ - 'message' => 'User deleted' - ]); + return $this->returnNoContent(); } /** * @param User $user * @param UpdateUserRequest $request - * @return Response + * @return \Illuminate\Http\JsonResponse */ public function update(User $user, UpdateUserRequest $request) { @@ -93,9 +87,6 @@ class UserController extends ApplicationApiController $user->update($request->safe()->except(['password'])); } - return $this->returnContent([ - 'data' => $user, - 'message' => 'User updated', - ]); + return fractal($user, new UserTransformer())->respond(); } } diff --git a/app/Transformers/Application/NodeTransformer.php b/app/Transformers/Application/NodeTransformer.php new file mode 100644 index 00000000..b5629dfa --- /dev/null +++ b/app/Transformers/Application/NodeTransformer.php @@ -0,0 +1,45 @@ + $node->id, + 'name' => $node->name, + 'cluster' => $node->cluster, + 'hostname' => $node->hostname, + 'port' => (int) $node->port, + 'auth_type' => $node->auth_type, + 'latency_in_ms' => $node->latency, + ]; + } +} diff --git a/app/Transformers/Application/ServerTransformer.php b/app/Transformers/Application/ServerTransformer.php index a96c86da..5d62c976 100644 --- a/app/Transformers/Application/ServerTransformer.php +++ b/app/Transformers/Application/ServerTransformer.php @@ -15,7 +15,7 @@ class ServerTransformer extends TransformerAbstract protected array $defaultIncludes = [ // ]; - + /** * List of resources possible to include * @@ -24,7 +24,7 @@ class ServerTransformer extends TransformerAbstract protected array $availableIncludes = [ // ]; - + /** * A Fractal transformer. * diff --git a/app/Transformers/Application/SpecificationTransformer.php b/app/Transformers/Application/SpecificationTransformer.php new file mode 100644 index 00000000..01677cd0 --- /dev/null +++ b/app/Transformers/Application/SpecificationTransformer.php @@ -0,0 +1,49 @@ + Arr::get($data, 'node'), + 'cores' => Arr::get($data, 'cores'), + 'memory' => Arr::get($data, 'memory'), + 'disk' => Arr::get($data, 'maxmem'), + 'disks' => Arr::get($data, 'disks'), + 'ipconfig' => Arr::get($data, 'ipconfig'), + ]; + } + + public function getResourceName(): string + { + return 'server_specifications'; + } +} diff --git a/app/Transformers/Application/UserTransformer.php b/app/Transformers/Application/UserTransformer.php new file mode 100644 index 00000000..2faea15a --- /dev/null +++ b/app/Transformers/Application/UserTransformer.php @@ -0,0 +1,44 @@ + $user->id, + 'name' => $user->name, + 'email' => $user->email, + 'root_admin' => (bool) $user->root_admin, + 'created_at' => $user->created_at, + 'updated_at' => $user->updated_at, + ]; + } +}