优化 代码

This commit is contained in:
iVampireSP.com 2022-11-20 22:16:04 +08:00
parent 49c46eaaa1
commit 4d2c52284d
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
2 changed files with 37 additions and 74 deletions

View File

@ -4,19 +4,18 @@
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Module; use App\Models\Module;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Str; use Illuminate\Support\Str;
class ModuleController extends Controller class ModuleController extends Controller
{ {
public function index() public function index()
{ {
$module = auth('module')->user(); $module = auth('module')->user()->calculate();
$calc = $module->calculate(); return $this->success($module);
return $this->success($calc);
} }
public function call(Request $request, Module $module) public function call(Request $request, Module $module)
@ -27,7 +26,6 @@ public function call(Request $request, Module $module)
$path = preg_replace('/[^a-zA-Z0-9\/]/', '', $path); $path = preg_replace('/[^a-zA-Z0-9\/]/', '', $path);
$method = Str::lower($request->method()); $method = Str::lower($request->method());
// 如果 method 为 post, 检查用户余额 // 如果 method 为 post, 检查用户余额
@ -39,17 +37,16 @@ public function call(Request $request, Module $module)
// } // }
// } // }
$response = $module->request($method, $path, $request->all());
$response = $module->remoteRequest($method, $path, $request->all());
if ($response['json'] === null && $response['body'] !== null) { if ($response['json'] === null && $response['body'] !== null) {
return response($response['body'], $response['status']); return response($response['body'], $response['status']);
} }
return $this->remoteResponse($response['json'], $response['status']); return $this->moduleResponse($response['json'], $response['status']);
} }
public function exportCall(Request $request, Module $module): \Illuminate\Http\Response|\Illuminate\Http\JsonResponse|\Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\Routing\ResponseFactory public function exportCall(Request $request, Module $module): Response|JsonResponse
{ {
$path = request()->path(); $path = request()->path();
@ -64,6 +61,6 @@ public function exportCall(Request $request, Module $module): \Illuminate\Http\R
return response($response['body'], $response['status']); return response($response['body'], $response['status']);
} }
return $this->remoteResponse($response['json'], $response['status']); return $this->moduleResponse($response['json'], $response['status']);
} }
} }

View File

@ -4,6 +4,7 @@
use GeneaLabs\LaravelModelCaching\Traits\Cachable; use GeneaLabs\LaravelModelCaching\Traits\Cachable;
use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\ConnectException;
use Illuminate\Http\Client\Response;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Http; use Illuminate\Support\Facades\Http;
@ -81,45 +82,32 @@ protected static function boot()
}); });
} }
public function remoteHost($host_id, $func, $requests) // public function moduleHostFunctions($host_id, $func, $requests): array
{ // {
$http = Http::module($this->api_token, $this->url); // $http = Http::module($this->api_token, $this->url);
$response = $http->post("hosts/{$host_id}/functions/" . $func, $requests); // $response = $http->post("hosts/{$host_id}/functions/" . $func, $requests);
//
$json = $response->json(); // return $this->getResponse($response);
$status = $response->status(); // }
return [$json, $status];
}
// post, get, patch, delete 等请求 // post, get, patch, delete 等请求
public function remote($func, $requests): array
public function remote($func, $requests)
{ {
$http = Http::module($this->api_token, $this->url); $http = Http::module($this->api_token, $this->url);
$response = $http->post('functions/' . $func, $requests); $response = $http->post('functions/' . $func, $requests);
$json = $response->json(); return $this->getResponse($response);
$status = $response->status();
return [$json, $status];
} }
public function remoteRequest($method, $path, $requests) public function request($method, $path, $requests): array
{ {
$user = auth()->user(); $user = auth()->user();
$http = Http::module($this->api_token, $this->url); $http = Http::module($this->api_token, $this->url);
// add Headers
$http->withHeaders([
'X-User' => $user->id
]);
$requests['user_id'] = $user->id; $requests['user_id'] = $user->id;
if ($method == 'post') { if ($method == 'post') {
// add user to requests // add user to requests
$requests['user'] = $user; $requests['user'] = $user;
@ -127,18 +115,10 @@ public function remoteRequest($method, $path, $requests)
$response = $http->{$method}("functions/{$path}", $requests); $response = $http->{$method}("functions/{$path}", $requests);
$json = $response->json(); return $this->getResponse($response);
$status = $response->status();
return [
'body' => $response->body(),
'json' => $json,
'status' => $status
];
} }
public function moduleRequest($method, $path, $requests) public function moduleRequest($method, $path, $requests): array
{ {
$module_id = auth('module')->id(); $module_id = auth('module')->id();
@ -153,9 +133,14 @@ public function moduleRequest($method, $path, $requests)
$response = $http->{$method}("exports/{$path}", $requests); $response = $http->{$method}("exports/{$path}", $requests);
$json = $response->json(); return $this->getResponse($response);
}
private function getResponse(Response $response): array
{
$json = $response->json();
$status = $response->status(); $status = $response->status();
return [ return [
'body' => $response->body(), 'body' => $response->body(),
'json' => $json, 'json' => $json,
@ -163,27 +148,7 @@ public function moduleRequest($method, $path, $requests)
]; ];
} }
public function remotePost($path = '', $data = []) public function check($module_id = null): bool
{
$http = Http::module($this->api_token, $this->url);
$response = $http->post($path, $data);
$json = $response->json();
$status = $response->status();
return [$json, $status];
}
// // get cached modules
// public static function cached_modules()
// {
// return Cache::remember('modules', 600, function () {
// return Module::all();
// });
// }
public function check($module_id = null)
{ {
if ($module_id) { if ($module_id) {
$module = Module::find($module_id); $module = Module::find($module_id);
@ -191,26 +156,27 @@ public function check($module_id = null)
$module = $this; $module = $this;
} }
$http = Http::module($module->api_token, $module->url);
$success = 0;
try { try {
$http = Http::module($module->api_token, $module->url);
// dd($module->url);
$response = $http->get('remote'); $response = $http->get('remote');
if ($response->status() == 200) {
$success = 1;
}
} catch (ConnectException $e) { } catch (ConnectException $e) {
Log::error($e->getMessage()); Log::error($e->getMessage());
} }
if ($response->status() == 200) { return $success;
return true;
} else {
return false;
}
} }
#[ArrayShape(['transactions' => "array"])] #[ArrayShape(['transactions' => "array"])]
public function calculate(): array public function calculate(): array
{ {
$cache_key = 'module_earning_' . $this->id; $cache_key = 'module_earning_' . $this->id;
return Cache::get($cache_key, []); return Cache::get($cache_key, []);
} }
} }