File manager - Edit - /var/www/html/homologBancodetalentos/app/Http/Services/TalentBank/LegacyApiService.php
Back
<?php namespace App\Http\Services\TalentBank; use App\Support\TalentBank\IntegrationCircuitBreaker; use App\Support\TalentBank\IntegrationLog; use App\Support\SsoWebSession; use Illuminate\Http\Client\ConnectionException; use Illuminate\Http\Client\Response; use Illuminate\Http\Request; use Illuminate\Support\Facades\Http; class LegacyApiService { private const LEGACY_INTEGRATION = 'legacy_api'; public function get(Request $request, string $uri, array $query = []): Response { return $this->requestWithCircuitBreaker( fn () => $this->client($request)->get($this->url($uri), $query), 'get', $uri ); } public function post(Request $request, string $uri, array $payload = []): Response { return $this->requestWithCircuitBreaker( fn () => $this->client($request)->post($this->url($uri), $payload), 'post', $uri ); } public function put(Request $request, string $uri, array $payload = []): Response { return $this->requestWithCircuitBreaker( fn () => $this->client($request)->put($this->url($uri), $payload), 'put', $uri ); } public function delete(Request $request, string $uri, array $payload = []): Response { return $this->requestWithCircuitBreaker( fn () => $this->client($request)->delete($this->url($uri), $payload), 'delete', $uri ); } private function correlationHeaders(): array { if (! function_exists('request') || ! request()) { return []; } $cid = request()->attributes->get('correlation_id'); return is_string($cid) && $cid !== '' ? ['X-Correlation-ID' => $cid] : []; } private function client(Request $request) { $headers = array_merge([ 'Accept' => 'application/json', 'App' => env('APP_ID'), ], $this->correlationHeaders()); $authHeader = $request->bearerToken() ? 'Bearer '.$request->bearerToken() : $this->sessionAuthorization(); if (is_string($authHeader) && $authHeader !== '') { $headers['Authorization'] = $authHeader; } return Http::withHeaders($headers) ->timeout((int) config('talent_bank.http_timeout_seconds', 20)) ->retry( (int) config('talent_bank.http_retry_times', 2), (int) config('talent_bank.http_retry_sleep_ms', 350), static function ($exception): bool { return $exception instanceof ConnectionException; } ); } private function sessionAuthorization(): ?string { if (! SsoWebSession::hasToken()) { return null; } return session(SsoWebSession::TOKEN_TYPE, 'Bearer').' '.session(SsoWebSession::ACCESS_TOKEN); } private function url(string $uri): string { $base = rtrim((string) config('services.talent_bank_legacy.base_url'), '/'); $path = ltrim($uri, '/'); return $base.'/'.$path; } private function requestWithCircuitBreaker(\Closure $callback, string $method, string $uri): Response { if (IntegrationCircuitBreaker::isOpen(self::LEGACY_INTEGRATION)) { IntegrationLog::warning(self::LEGACY_INTEGRATION, 'circuit_breaker_short_circuit', [ 'method' => $method, 'uri' => $uri, ]); return Http::response([ 'message' => 'Integração legada temporariamente indisponível.', ], 503); } try { $response = $callback(); } catch (ConnectionException $e) { IntegrationCircuitBreaker::recordFailure(self::LEGACY_INTEGRATION); throw $e; } if ($response->serverError() || $response->status() === 429) { IntegrationCircuitBreaker::recordFailure(self::LEGACY_INTEGRATION); } else { IntegrationCircuitBreaker::recordSuccess(self::LEGACY_INTEGRATION); } return $response; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.02 |
proxy
|
phpinfo
|
Settings