Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

CurrencyService.php 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Services;
  3. use Illuminate\Support\Facades\{Cache, Http};
  4. class CurrencyService
  5. {
  6. public function getExchangeRate($from, $to)
  7. {
  8. $api_key = config('services.currency_api.key');
  9. $base_url = config('services.currency_api.base_url');
  10. $req_url = "{$base_url}/{$api_key}/pair/{$from}/{$to}";
  11. $response = Http::get($req_url);
  12. if ($response->successful()) {
  13. $responseData = $response->json();
  14. if (isset($responseData['conversion_rate'])) {
  15. return $responseData['conversion_rate'];
  16. }
  17. }
  18. return null;
  19. }
  20. public function getCachedExchangeRate(string $defaultCurrencyCode, string $code): ?float
  21. {
  22. $cacheKey = 'currency_data_' . $defaultCurrencyCode . '_' . $code;
  23. $cachedData = Cache::get($cacheKey);
  24. if ($cachedData !== null) {
  25. return $cachedData['rate'];
  26. }
  27. $rate = $this->getExchangeRate($defaultCurrencyCode, $code);
  28. if ($rate !== null) {
  29. $dataToCache = compact('rate');
  30. $expirationTimeInSeconds = 60 * 60 * 24; // 24 hours
  31. Cache::put($cacheKey, $dataToCache, $expirationTimeInSeconds);
  32. }
  33. return $rate;
  34. }
  35. }