重新规划项目结构

This commit is contained in:
iVampireSP.com 2022-08-29 01:04:44 +08:00
parent 29ca653ef7
commit 92335ebc0d
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
7 changed files with 32 additions and 37 deletions

View File

@ -1,26 +0,0 @@
<?php
namespace App\Http\Controllers\Remote;
use App\Models\Host;
use Illuminate\Http\Request;
use App\Models\Module\Module;
use App\Http\Controllers\Controller;
class CallController extends Controller
{
// invoke the remote method
public function host(Request $request, Host $host, $func) {
$host->load('module');
$response = $host->module->remoteHost($host->id, $func, $request->all());
return $this->apiResponse($response[0], $response[1]);
}
public function module(Request $request, Module $module, $func)
{
$response = $module->remote($func, $request->all());
return $this->apiResponse($response[0], $response[1]);
}
}

View File

@ -28,7 +28,13 @@ public function index()
*/ */
public function store(Request $request) public function store(Request $request)
{ {
// // 保存服务器
$request->validate([
'name' => 'required|string',
'ip' => 'sometimes|ip',
// status only allow online or offline
'status' => 'required|in:online,offline,maintenance',
]);
} }
/** /**

View File

@ -2,8 +2,10 @@
namespace App\Http\Controllers\Remote; namespace App\Http\Controllers\Remote;
use App\Http\Controllers\Controller; use Illuminate\Support\Str;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Module\Module;
use App\Http\Controllers\Controller;
class ModuleController extends Controller class ModuleController extends Controller
{ {
@ -11,4 +13,20 @@ public function index()
{ {
return $this->success(auth('remote')->user()); return $this->success(auth('remote')->user());
} }
public function call(Request $request, Module $module, $func)
{
$request->validate([
'func' => 'required|string'
]);
// 不能让 func 的首个字符为 /
if (Str::startsWith($func, '/')) {
$func = substr($func, 1);
}
$response = $module->remote($func, $request->all());
return $this->apiResponse($response[0], $response[1]);
}
} }

View File

@ -31,15 +31,15 @@ public function boot()
$this->routes(function () { $this->routes(function () {
Route::middleware('api') Route::middleware('api')
->prefix('api') ->prefix('api')
->group(base_path('routes/api/client.php')); ->group(base_path('routes/api.php'));
Route::middleware('auth:admin') Route::middleware('auth:admin')
->prefix('admin') ->prefix('admin')
->group(base_path('routes/api/admin.php')); ->group(base_path('routes/admin.php'));
Route::middleware('auth:remote') Route::middleware('auth:remote')
->prefix('remote') ->prefix('remote')
->group(base_path('routes/api/remote.php')); ->group(base_path('routes/remote.php'));
Route::middleware('web') Route::middleware('web')
->group(base_path('routes/web.php')); ->group(base_path('routes/web.php'));

View File

@ -5,22 +5,19 @@
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Http\Controllers\User\TaskController; use App\Http\Controllers\User\TaskController;
Route::name('client.')->middleware(['api', 'auth:sanctum'])->group(function () { Route::name('api.')->middleware(['api', 'auth:sanctum'])->group(function () {
// Route::apiResource('users', Controllers\User\UserController::class); // Route::apiResource('users', Controllers\User\UserController::class);
Route::apiResource('/modules/{module}/hosts', User\HostController::class);
Route::apiResource('drops', User\DropController::class); Route::apiResource('drops', User\DropController::class);
Route::get('tasks', [TaskController::class, 'index']); Route::get('tasks', [TaskController::class, 'index']);
Route::apiResource('work-orders', User\WorkOrder\WorkOrderController::class); Route::apiResource('work-orders', User\WorkOrder\WorkOrderController::class);
Route::apiResource('work-orders.replies', User\WorkOrder\ReplyController::class); Route::apiResource('work-orders.replies', User\WorkOrder\ReplyController::class);
// 调用远程 API // 调用远程 API
Route::post('hosts/{host}/func/{func}', [Remote\CallController::class, 'host'])->name('host.call'); // Route::post('hosts/{host}/func/{func}', [Remote\CallController::class, 'host'])->name('host.call');
Route::post('/modules/{module}/func/{func}', [Remote\CallController::class, 'module'])->name('module.call'); Route::post('/modules/{module}', [Remote\ModuleController::class, 'call'])->name('module.call');
}); });