|
|
<?php
use App\Jobs\AsyncCall;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Http;
use Symfony\Component\HttpFoundation\Request;
if (!function_exists('get')) {
function get(string $service, string $path, array $data, ?string $queue = null)
{
return call(Request::METHOD_GET, $service, $path, $data, $queue);
}
}
if (!function_exists('post')) {
function post(string $service, string $path, array $data, ?string $queue = null)
{
return call(Request::METHOD_POST, $service, $path, $data, $queue);
}
}
if (!function_exists('put')) {
function put(string $service, string $path, array $data, ?string $queue = null)
{
return call(Request::METHOD_PUT, $service, $path, $data, $queue);
}
}
if (!function_exists('delete')) {
function delete(string $service, string $path, array $data, ?string $queue = null)
{
return call(Request::METHOD_DELETE, $service, $path, $data, $queue);
}
}
if (!function_exists('call')) {
/**
* @return \Illuminate\Http\Client\Response
*/
function call(string $method, string $service, string $path, array $data, ?string $queue = null)
{
// token of this service for send data to other service
$token = 'YT76Nt2ofTbmkiP0ubvnlwOJLBtglA3UubjRhieTiTVP7jGPNX0RlueVOgIc';
// url for reaching the target service
$baseUrl = config("services.$service");
// create a pending request for this url
$pendingRequest = Http::retry(3, 100);
// if command data contain file, then it will be attached to the pending request
foreach ($data as $piece) {
if ($piece instanceof UploadedFile) {
$pendingRequest->attach($piece->getFilename(), $piece);
}
}
// if queue set then queue this command
if ($queue !== null) {
return dispatch(new AsyncCall(...func_get_args()));
}
try {
// otherwise execute the pending request
return $pendingRequest
->withToken($token)
->withoutRedirecting()
->withoutVerifying()
->$method($path, $data);
} catch (Throwable $thr) {
return $thr->response;
}
}
}
|