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;
- }
- }
|