From 8f188d95351f2e736e8e76a1e3e7e0e4ec2c5cdb Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 26 Apr 2024 09:14:28 +0200 Subject: [PATCH 1/6] add application api endpoints for database hosts --- .../DatabaseHosts/DatabaseHostController.php | 100 ++++++++++++++++++ .../DeleteDatabaseHostRequest.php | 13 +++ .../DatabaseHosts/GetDatabaseHostRequest.php | 13 +++ .../StoreDatabaseHostRequest.php | 19 ++++ .../UpdateDatabaseHostRequest.php | 16 +++ .../Application/DatabaseHostTransformer.php | 19 ++++ routes/api-application.php | 20 ++++ 7 files changed, 200 insertions(+) create mode 100644 app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php create mode 100644 app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php create mode 100644 app/Http/Requests/Api/Application/DatabaseHosts/GetDatabaseHostRequest.php create mode 100644 app/Http/Requests/Api/Application/DatabaseHosts/StoreDatabaseHostRequest.php create mode 100644 app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php diff --git a/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php b/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php new file mode 100644 index 0000000000..8c9de06e87 --- /dev/null +++ b/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php @@ -0,0 +1,100 @@ +allowedFilters(['name', 'host']) + ->allowedSorts(['id', 'name', 'host']) + ->paginate($request->query('per_page') ?? 10); + + return $this->fractal->collection($databases) + ->transformWith($this->getTransformer(DatabaseHostTransformer::class)) + ->toArray(); + } + + /** + * Return a single database host. + */ + public function view(GetDatabaseHostRequest $request, DatabaseHost $databaseHost): array + { + return $this->fractal->item($databaseHost) + ->transformWith($this->getTransformer(DatabaseHostTransformer::class)) + ->toArray(); + } + + /** + * Store a new database host on the Panel and return an HTTP/201 response code with the + * new database host attached. + * + * @throws \Throwable + */ + public function store(StoreDatabaseHostRequest $request): JsonResponse + { + $databaseHost = $this->creationService->handle($request->validated()); + + return $this->fractal->item($databaseHost) + ->transformWith($this->getTransformer(DatabaseHostTransformer::class)) + ->addMeta([ + 'resource' => route('api.application.databases.view', [ + 'databaseHost' => $databaseHost->id, + ]), + ]) + ->respond(201); + } + + /** + * Update a database host on the Panel and return the updated record to the user. + * + * @throws \Throwable + */ + public function update(UpdateDatabaseHostRequest $request, DatabaseHost $databaseHost): array + { + $databaseHost = $this->updateService->handle($databaseHost->id, $request->validated()); + + return $this->fractal->item($databaseHost) + ->transformWith($this->getTransformer(DatabaseHostTransformer::class)) + ->toArray(); + } + + /** + * Delete a database host from the Panel. + * + * @throws \Exception + */ + public function delete(DeleteDatabaseHostRequest $request, DatabaseHost $databaseHost): Response + { + $databaseHost->delete(); + + return $this->returnNoContent(); + } +} diff --git a/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php b/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php new file mode 100644 index 0000000000..d62311d798 --- /dev/null +++ b/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php @@ -0,0 +1,13 @@ +route()->parameter('databaseHost'); + + return $rules ?? DatabaseHost::getRulesForUpdate($databaseHost->id); + } +} \ No newline at end of file diff --git a/app/Transformers/Api/Application/DatabaseHostTransformer.php b/app/Transformers/Api/Application/DatabaseHostTransformer.php index d01afb43aa..1a47b905a7 100644 --- a/app/Transformers/Api/Application/DatabaseHostTransformer.php +++ b/app/Transformers/Api/Application/DatabaseHostTransformer.php @@ -2,8 +2,10 @@ namespace App\Transformers\Api\Application; +use App\Models\Node; use App\Models\Database; use App\Models\DatabaseHost; +use League\Fractal\Resource\Item; use League\Fractal\Resource\Collection; use League\Fractal\Resource\NullResource; use App\Services\Acl\Api\AdminAcl; @@ -12,6 +14,7 @@ class DatabaseHostTransformer extends BaseTransformer { protected array $availableIncludes = [ 'databases', + 'node', ]; /** @@ -54,4 +57,20 @@ public function includeDatabases(DatabaseHost $model): Collection|NullResource return $this->collection($model->getRelation('databases'), $this->makeTransformer(ServerDatabaseTransformer::class), Database::RESOURCE_NAME); } + + /** + * Include the node associated with this host. + * + * @throws \App\Exceptions\Transformer\InvalidTransformerLevelException + */ + public function includeNode(DatabaseHost $model): Item|NullResource + { + if (!$this->authorize(AdminAcl::RESOURCE_NODES)) { + return $this->null(); + } + + $model->loadMissing('node'); + + return $this->item($model->getRelation('node'), $this->makeTransformer(NodeTransformer::class), Node::RESOURCE_NAME); + } } diff --git a/routes/api-application.php b/routes/api-application.php index 983a9a4933..8171894c0e 100644 --- a/routes/api-application.php +++ b/routes/api-application.php @@ -97,3 +97,23 @@ Route::get('/', [Application\Eggs\EggController::class, 'index'])->name('api.application.eggs.eggs'); Route::get('/{egg:id}', [Application\Eggs\EggController::class, 'view'])->name('api.application.eggs.eggs.view'); }); + +/* +|-------------------------------------------------------------------------- +| Database Host Controller Routes +|-------------------------------------------------------------------------- +| +| Endpoint: /api/application/databasehosts +| +*/ +Route::group(['prefix' => '/databasehosts'], function () { + Route::get('/', [Application\DatabaseHosts\DatabaseHostController::class, 'index'])->name('api.application.databasehosts'); + Route::get('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'view'])->name('api.application.databasehosts.view'); + + Route::post('/', [Application\DatabaseHosts\DatabaseHostController::class, 'store']); + + Route::patch('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'update']); + + Route::delete('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'delete']); +}); + From bd09176f956194393495c17bd395934eddddcbce Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 26 Apr 2024 09:16:21 +0200 Subject: [PATCH 2/6] run pint --- .../Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php | 2 +- .../Api/Application/DatabaseHosts/GetDatabaseHostRequest.php | 2 +- .../Api/Application/DatabaseHosts/StoreDatabaseHostRequest.php | 2 +- .../Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php b/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php index d62311d798..b920790679 100644 --- a/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php +++ b/app/Http/Requests/Api/Application/DatabaseHosts/DeleteDatabaseHostRequest.php @@ -10,4 +10,4 @@ class DeleteDatabaseHostRequest extends ApplicationApiRequest protected ?string $resource = AdminAcl::RESOURCE_DATABASE_HOSTS; protected int $permission = AdminAcl::WRITE; -} \ No newline at end of file +} diff --git a/app/Http/Requests/Api/Application/DatabaseHosts/GetDatabaseHostRequest.php b/app/Http/Requests/Api/Application/DatabaseHosts/GetDatabaseHostRequest.php index af5608e6b7..8cd876fc11 100644 --- a/app/Http/Requests/Api/Application/DatabaseHosts/GetDatabaseHostRequest.php +++ b/app/Http/Requests/Api/Application/DatabaseHosts/GetDatabaseHostRequest.php @@ -10,4 +10,4 @@ class GetDatabaseHostRequest extends ApplicationApiRequest protected ?string $resource = AdminAcl::RESOURCE_DATABASE_HOSTS; protected int $permission = AdminAcl::READ; -} \ No newline at end of file +} diff --git a/app/Http/Requests/Api/Application/DatabaseHosts/StoreDatabaseHostRequest.php b/app/Http/Requests/Api/Application/DatabaseHosts/StoreDatabaseHostRequest.php index 057cb32488..aedd5109ba 100644 --- a/app/Http/Requests/Api/Application/DatabaseHosts/StoreDatabaseHostRequest.php +++ b/app/Http/Requests/Api/Application/DatabaseHosts/StoreDatabaseHostRequest.php @@ -16,4 +16,4 @@ public function rules(array $rules = null): array { return $rules ?? DatabaseHost::getRules(); } -} \ No newline at end of file +} diff --git a/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php b/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php index f8a3c34b7d..33b116e19d 100644 --- a/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php +++ b/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php @@ -13,4 +13,4 @@ public function rules(array $rules = null): array return $rules ?? DatabaseHost::getRulesForUpdate($databaseHost->id); } -} \ No newline at end of file +} From f0c80294a4c6e583fc87ed791be20189b83d1732 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 26 Apr 2024 09:19:33 +0200 Subject: [PATCH 3/6] forgot to lint this one --- routes/api-application.php | 1 - 1 file changed, 1 deletion(-) diff --git a/routes/api-application.php b/routes/api-application.php index 8171894c0e..fb09360c40 100644 --- a/routes/api-application.php +++ b/routes/api-application.php @@ -116,4 +116,3 @@ Route::delete('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'delete']); }); - From b9fabfb59c6dc5c073da4998f8bac2e12cedd19b Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 26 Apr 2024 14:21:59 +0200 Subject: [PATCH 4/6] Update app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php Co-authored-by: Devonte W --- .../Api/Application/DatabaseHosts/DatabaseHostController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php b/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php index 8c9de06e87..58c46c4940 100644 --- a/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php +++ b/app/Http/Controllers/Api/Application/DatabaseHosts/DatabaseHostController.php @@ -66,7 +66,7 @@ public function store(StoreDatabaseHostRequest $request): JsonResponse ->transformWith($this->getTransformer(DatabaseHostTransformer::class)) ->addMeta([ 'resource' => route('api.application.databases.view', [ - 'databaseHost' => $databaseHost->id, + 'database_host' => $databaseHost->id, ]), ]) ->respond(201); From 6e0d29c56bdc0c68ebf2af88935dbaceb4766b1b Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 26 Apr 2024 14:22:10 +0200 Subject: [PATCH 5/6] Update routes/api-application.php Co-authored-by: Devonte W --- routes/api-application.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/api-application.php b/routes/api-application.php index fb09360c40..13acf41326 100644 --- a/routes/api-application.php +++ b/routes/api-application.php @@ -103,10 +103,10 @@ | Database Host Controller Routes |-------------------------------------------------------------------------- | -| Endpoint: /api/application/databasehosts +| Endpoint: /api/application/database-hosts | */ -Route::group(['prefix' => '/databasehosts'], function () { +Route::group(['prefix' => '/database-hosts'], function () { Route::get('/', [Application\DatabaseHosts\DatabaseHostController::class, 'index'])->name('api.application.databasehosts'); Route::get('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'view'])->name('api.application.databasehosts.view'); From 6f82c4f89125528394809b7496578cc2fbc7c5e6 Mon Sep 17 00:00:00 2001 From: Boy132 Date: Fri, 26 Apr 2024 14:26:56 +0200 Subject: [PATCH 6/6] rename all "databaseHost" to "database_host" --- .../Application/DatabaseHosts/UpdateDatabaseHostRequest.php | 2 +- routes/api-application.php | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php b/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php index 33b116e19d..111560bbfd 100644 --- a/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php +++ b/app/Http/Requests/Api/Application/DatabaseHosts/UpdateDatabaseHostRequest.php @@ -9,7 +9,7 @@ class UpdateDatabaseHostRequest extends StoreDatabaseHostRequest public function rules(array $rules = null): array { /** @var DatabaseHost $databaseHost */ - $databaseHost = $this->route()->parameter('databaseHost'); + $databaseHost = $this->route()->parameter('database_host'); return $rules ?? DatabaseHost::getRulesForUpdate($databaseHost->id); } diff --git a/routes/api-application.php b/routes/api-application.php index 13acf41326..e5f7908038 100644 --- a/routes/api-application.php +++ b/routes/api-application.php @@ -108,11 +108,11 @@ */ Route::group(['prefix' => '/database-hosts'], function () { Route::get('/', [Application\DatabaseHosts\DatabaseHostController::class, 'index'])->name('api.application.databasehosts'); - Route::get('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'view'])->name('api.application.databasehosts.view'); + Route::get('/{database_host:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'view'])->name('api.application.databasehosts.view'); Route::post('/', [Application\DatabaseHosts\DatabaseHostController::class, 'store']); - Route::patch('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'update']); + Route::patch('/{database_host:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'update']); - Route::delete('/{databaseHost:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'delete']); + Route::delete('/{database_host:id}', [Application\DatabaseHosts\DatabaseHostController::class, 'delete']); });