cms-frontend/app/Services/ApiService.php

100 lines
2.8 KiB
PHP

<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Log;
class ApiService
{
protected $baseUrl;
public function __construct()
{
$this->baseUrl = config('app.api_base_url');
}
public function fetchData($url, $token = null)
{
try {
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . ($token ?: Session::get('token', '')),
])->get($this->baseUrl . $url);
if ($response->successful()) {
return $response->json();
} else {
$this->handleError($response);
return null;
}
} catch (\Exception $e) {
Log::error('API Fetch Error: ' . $e->getMessage());
Session::flash('error', 'Failed to fetch data: ' . $e->getMessage());
return null;
}
}
public function logout($token = null)
{
try {
$response = Http::withHeaders([
'Authorization' => 'Bearer ' . ($token ?: Session::get('token', '')),
])->get($this->baseUrl . '/logout');
if ($response->successful()) {
Session::forget('token');
Session::flash('success', 'Logged out successfully.');
return true;
} else {
$this->handleError($response);
return false;
}
} catch (\Exception $e) {
Log::error('Logout Error: ' . $e->getMessage());
Session::flash('error', 'Logout failed: ' . $e->getMessage());
return false;
}
}
public function handleError($response)
{
$status = $response->status();
if ($status === 401) {
Session::forget('token');
throw new \Exception('Session expired. Please login again.');
} elseif ($status === 404) {
throw new \Exception('API resource not found.');
} else {
throw new \Exception('API error: ' . ($response->body() ?: 'Unknown error'));
}
}
public function get($url, $params = [])
{
$token = $this->cookieService->getCookie()['token'] ?? null;
$this->defaultHeaders['Authorization'] = 'Bearer ' . $token;
return $this->makeRequest('get', $url, $params);
}
public function post($url, $params = [])
{
return $this->makeRequest('post', $url, $params);
}
public function put($url, $params = [])
{
return $this->makeRequest('put', $url, $params);
}
public function delete($url, $params = [])
{
return $this->makeRequest('delete', $url, ['params' => $params]);
}
public function postMultipart($url, $data)
{
return $this->makeRequest('postMultipart', $url, $data);
}
}