UPDATE: Los recursos ahora son catalogos. Forma de acceder dinamica por clase en vez de traits.
This commit is contained in:
parent
8b7ed8a6e4
commit
04c4a6b4ee
71
app/Http/Controllers/Catalogs/CatalogController.php
Normal file
71
app/Http/Controllers/Catalogs/CatalogController.php
Normal file
@ -0,0 +1,71 @@
|
||||
<?php namespace App\Http\Controllers\Catalogs;
|
||||
/**
|
||||
* @copyright (c) 2025 Notsoweb Software (https://notsoweb.com) - All Rights Reserved
|
||||
*/
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
||||
|
||||
/**
|
||||
* Catálogos de la aplicación
|
||||
*
|
||||
* Permite obtener múltiples catálogos de la aplicación en una sola petición, estas son clases que se encuentran dinámicamente
|
||||
* en el directorio app/Http/Controllers/Catalogs.
|
||||
*
|
||||
* Estas clases solo retornan los datos de una consulta y este controlador los retorna en una solo respuesta.
|
||||
*
|
||||
* @author Moisés Cortés C. <moises.cortes@notsoweb.com>
|
||||
*
|
||||
* @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))));
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
*/
|
||||
|
||||
@ -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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user