From 04c4a6b4eecde924fa5a7d9c689797674bd58be7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mois=C3=A9s=20Cort=C3=A9s=20C=2E?= Date: Fri, 23 May 2025 13:31:13 -0600 Subject: [PATCH] UPDATE: Los recursos ahora son catalogos. Forma de acceder dinamica por clase en vez de traits. --- .../Catalogs/CatalogController.php | 71 +++++++++++++++++++ app/Http/Controllers/ResourceController.php | 22 ------ routes/core.php | 3 +- 3 files changed, 73 insertions(+), 23 deletions(-) create mode 100644 app/Http/Controllers/Catalogs/CatalogController.php diff --git a/app/Http/Controllers/Catalogs/CatalogController.php b/app/Http/Controllers/Catalogs/CatalogController.php new file mode 100644 index 0000000..700da1a --- /dev/null +++ b/app/Http/Controllers/Catalogs/CatalogController.php @@ -0,0 +1,71 @@ + + * + * @version 1.0.0 + */ +class CatalogController extends Controller +{ + /** + * Obtener cualquier recurso + * + * Procesa la matriz de recursos solicitados y retorna una respuesta con los datos de cada recurso. + */ + public function get(Request $request) + { + $resources = $request->all(); + $response = []; + + foreach ($resources as $resource => $data) { + $exploded = explode(':', $resource); + + try { + $class = "App\Http\Controllers\Catalogs\\{$this->toPascalCase($exploded[0])}Resource"; + $method = $this->toCamelCase($exploded[1]); + + $response[$resource] = (new $class)->{$method}($data); + } catch (\Exception $e) { + $response[$resource] = false; + } + } + + return ApiResponse::OK->onSuccess($response); + } + + /** + * Transforma un string de formato kebab-case o snake_case a PascalCase + * + * @param string $string String a transformar + * @return string String en formato PascalCase + */ + private function toPascalCase(string $string): string + { + return str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $string))); + } + + /** + * Transforma un string de formato kebab-case o snake_case a camelCase + * + * @param string $string String a transformar + * @return string String en formato camelCase + */ + private function toCamelCase(string $string): string + { + return lcfirst(str_replace(' ', '', ucwords(str_replace(['-', '_'], ' ', $string)))); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/ResourceController.php b/app/Http/Controllers/ResourceController.php index 3e9c9d4..db18ce2 100644 --- a/app/Http/Controllers/ResourceController.php +++ b/app/Http/Controllers/ResourceController.php @@ -4,7 +4,6 @@ */ use App\Models\Setting; -use Illuminate\Http\Request; use Notsoweb\ApiResponse\Enums\ApiResponse; use Tighten\Ziggy\Ziggy; @@ -17,27 +16,6 @@ */ class ResourceController extends Controller { - /** - * Obtener cualquier recurso - * - * Los recursos son traits que deben ser importados en este controlador. Para consumir el recurso del trait - * se debe de enviar el nombre de la función que se desea consumir, si esta requiere parámetros, se deben de enviar, - * sino se debe colocar un null. - */ - public function get(Request $request) - { - $resources = $request->all(); - $response = []; - - foreach ($resources as $resource => $data) { - if (method_exists($this, $resource)) { - $response[$resource] = $this->{$resource}($data); - } - } - - return ApiResponse::OK->onSuccess($response); - } - /** * Información de la aplicación */ diff --git a/routes/core.php b/routes/core.php index 5944f5a..f9f35b5 100644 --- a/routes/core.php +++ b/routes/core.php @@ -9,6 +9,7 @@ use App\Http\Controllers\System\NotificationController; use App\Http\Controllers\System\SystemController; use App\Http\Controllers\Admin\UserController; +use App\Http\Controllers\Catalogs\CatalogController; use App\Http\Controllers\ChangelogController; use App\Http\Controllers\ServerController; use Illuminate\Support\Facades\Route; @@ -76,7 +77,7 @@ Route::post('auth/logout', [LoginController::class, 'logout'])->name('auth.logout'); Route::get('changelogs', ChangelogController::class)->name('changelogs'); - Route::post('resources/get', [ResourceController::class, 'get'])->name('resources.get'); + Route::post('catalogs/get', [CatalogController::class, 'get'])->name('catalogs.get'); }); Route::prefix('resources')->name('resources.')->group(function() {