改进 主机和模块控制逻辑

This commit is contained in:
iVampireSP.com 2022-08-29 01:17:57 +08:00
parent 92335ebc0d
commit 9b0f050828
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
6 changed files with 53 additions and 67 deletions

View File

@ -1,21 +0,0 @@
<?php
namespace App\Http\Controllers\Remote\Host;
use App\Http\Controllers\Controller;
use App\Models\Host;
use Illuminate\Http\Request;
class DropController extends Controller
{
public function update(Request $request, Host $host) {
$request->validate([
'managed_price' => 'sometimes|numeric|max:1000|nullable',
]);
$host->managed_price = $request->managed_price;
$host->save();
return $this->updated($host);
}
}

View File

@ -17,7 +17,7 @@ class HostController extends Controller
public function index() public function index()
{ {
// //
Host::all(); // Host::all();
} }
/** /**
@ -28,13 +28,8 @@ 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

@ -14,12 +14,14 @@ public function index()
return $this->success(auth('remote')->user()); return $this->success(auth('remote')->user());
} }
public function call(Request $request, Module $module, $func) public function call(Request $request, Module $module)
{ {
$request->validate([ $request->validate([
'func' => 'required|string' 'func' => 'required|string'
]); ]);
$func = $request->func;
// 不能让 func 的首个字符为 / // 不能让 func 的首个字符为 /
if (Str::startsWith($func, '/')) { if (Str::startsWith($func, '/')) {
$func = substr($func, 1); $func = substr($func, 1);

View File

@ -110,41 +110,49 @@ public function cost($price = null)
return true; return true;
} }
/**
* 创建主机
*
* 在此之后,所有的主机都将由 module 创建,并且主机的数据仅被用作计费。
*
* 废弃
* @deprecated
*/
// on create // on create
protected static function boot() // protected static function boot()
{ // {
parent::boot(); // parent::boot();
static::creating(function ($model) { // // static::creating(function ($model) {
// if sanctum // // // if sanctum
if (auth('sanctum')->check()) { // // // if (auth('sanctum')->check()) {
$model->user_id = auth('sanctum')->id(); // // // $model->user_id = auth('sanctum')->id();
} else { // // // } else {
// if user_id is null // // // // if user_id is null
// check user_id is exists // // // // check user_id is exists
throw_if(!User::find($model->user_id), CommonException::class, 'user is not exists'); // // // throw_if(!User::find($model->user_id), CommonException::class, 'user is not exists');
} // // // }
// set price to 0 // // // // set price to 0
$model->price = 0; // // // $model->price = 0;
// $model->load('module'); // // // $model->load('module');
// $model->module->load(['provider', 'module']); // // // $model->module->load(['provider', 'module']);
// add to queue // // // add to queue
}); // // });
// when Updated // // when Updated
static::updated(function ($model) { // static::updated(function ($model) {
dispatch(new \App\Jobs\Remote\Host($model, 'put')); // dispatch(new \App\Jobs\Remote\Host($model, 'put'));
}); // });
// when delete // // when delete
static::deleting(function ($model) { // static::deleting(function ($model) {
// return false; // // return false;
dispatch(new \App\Jobs\Remote\Host($model, 'delete')); // dispatch(new \App\Jobs\Remote\Host($model, 'delete'));
}); // });
} // }
} }

View File

@ -1,23 +1,25 @@
<?php <?php
use App\Http\Controllers\User; use User\WorkOrder\ReplyController;
use App\Http\Controllers\Remote;
use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
use App\Http\Controllers\User\TaskController; use User\WorkOrder\WorkOrderController;
use App\Http\Controllers\User\DropController;
use App\Http\Controllers\Remote\ModuleController;
use App\Http\Controllers\Admin\User\UserController;
Route::name('api.')->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', UserController::class);
Route::apiResource('drops', User\DropController::class); Route::apiResource('drops', 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', WorkOrderController::class);
Route::apiResource('work-orders.replies', User\WorkOrder\ReplyController::class); Route::apiResource('work-orders.replies', 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}', [Remote\ModuleController::class, 'call'])->name('module.call'); Route::post('/modules/{module}', [ModuleController::class, 'call'])->name('module.call');
}); });

View File

@ -7,7 +7,7 @@
Route::apiResource('modules', Remote\ModuleController::class)->only(['index']); Route::apiResource('modules', Remote\ModuleController::class)->only(['index']);
Route::apiResource('servers', Remote\ServerController::class); Route::apiResource('servers', Remote\ServerController::class);
Route::apiResource('hosts', Remote\Host\HostController::class); Route::apiResource('hosts', Remote\Host\HostController::class);
Route::patch('hosts/{host}', [Remote\Host\DropController::class, 'update']); // Route::patch('hosts/{host}', [Remote\Host\DropController::class, 'update']);
// Route::patch('tasks', Remote\Host\TaskController::class); // Route::patch('tasks', Remote\Host\TaskController::class);
Route::apiResource('tasks', Remote\Host\TaskController::class); Route::apiResource('tasks', Remote\Host\TaskController::class);