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 App\Models\Setting;
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
||||||
use Tighten\Ziggy\Ziggy;
|
use Tighten\Ziggy\Ziggy;
|
||||||
|
|
||||||
@ -17,27 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
class ResourceController extends Controller
|
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
|
* Información de la aplicación
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
use App\Http\Controllers\System\NotificationController;
|
use App\Http\Controllers\System\NotificationController;
|
||||||
use App\Http\Controllers\System\SystemController;
|
use App\Http\Controllers\System\SystemController;
|
||||||
use App\Http\Controllers\Admin\UserController;
|
use App\Http\Controllers\Admin\UserController;
|
||||||
|
use App\Http\Controllers\Catalogs\CatalogController;
|
||||||
use App\Http\Controllers\ChangelogController;
|
use App\Http\Controllers\ChangelogController;
|
||||||
use App\Http\Controllers\ServerController;
|
use App\Http\Controllers\ServerController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
@ -76,7 +77,7 @@
|
|||||||
|
|
||||||
Route::post('auth/logout', [LoginController::class, 'logout'])->name('auth.logout');
|
Route::post('auth/logout', [LoginController::class, 'logout'])->name('auth.logout');
|
||||||
Route::get('changelogs', ChangelogController::class)->name('changelogs');
|
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() {
|
Route::prefix('resources')->name('resources.')->group(function() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user