| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | <?php
namespace App\Services;
use Illuminate\Support\Facades\{Cache, Http};
class CurrencyService
{
    public function getExchangeRates($base)
    {
        $api_key = config('services.currency_api.key');
        $base_url = config('services.currency_api.base_url');
        $req_url = "{$base_url}/{$api_key}/latest/{$base}";
        $response = Http::get($req_url);
        if ($response->successful()) {
            $responseData = $response->json();
            if (isset($responseData['conversion_rates'])) {
                return $responseData['conversion_rates'];
            }
        }
        return null;
    }
    public function updateCachedExchangeRates(string $base): void
    {
        $rates = $this->getExchangeRates($base);
        if ($rates !== null) {
            $expirationTimeInSeconds = 60 * 60 * 24; // 1 day (24 hours)
            foreach ($rates as $code => $rate) {
                $cacheKey = 'currency_data_' . $base . '_' . $code;
                Cache::put($cacheKey, $rate, $expirationTimeInSeconds);
            }
        }
    }
    public function getCachedExchangeRate(string $defaultCurrencyCode, string $code): ?float
    {
        $cacheKey = 'currency_data_' . $defaultCurrencyCode . '_' . $code;
        $cachedRate = Cache::get($cacheKey);
        if ($cachedRate === null) {
            $this->updateCachedExchangeRates($defaultCurrencyCode);
            $cachedRate = Cache::get($cacheKey);
        }
        return $cachedRate;
    }
}
 |