| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
							- <?php
 - 
 - namespace App\Listeners;
 - 
 - use App\Contracts\CurrencyHandler;
 - use App\Events\DefaultCurrencyChanged;
 - use App\Facades\Forex;
 - use App\Models\Setting\Currency;
 - use Illuminate\Support\Facades\DB;
 - 
 - readonly class UpdateCurrencyRates
 - {
 -     /**
 -      * Create the event listener.
 -      */
 -     public function __construct(private CurrencyHandler $currencyService)
 -     {
 -         //
 -     }
 - 
 -     /**
 -      * Handle the event.
 -      */
 -     public function handle(DefaultCurrencyChanged $event): void
 -     {
 -         DB::transaction(function () use ($event) {
 -             $defaultCurrency = $event->currency;
 - 
 -             if (bccomp((string) $defaultCurrency->rate, '1.0', 8) !== 0) {
 -                 $defaultCurrency->update(['rate' => 1]);
 -             }
 - 
 -             if (Forex::isEnabled()) {
 -                 $this->updateOtherCurrencyRates($defaultCurrency);
 -             }
 -         });
 -     }
 - 
 -     private function updateOtherCurrencyRates(Currency $defaultCurrency): void
 -     {
 -         $targetCurrencies = Currency::where('code', '!=', $defaultCurrency->code)
 -             ->pluck('code')
 -             ->toArray();
 - 
 -         $exchangeRates = $this->currencyService->getCachedExchangeRates($defaultCurrency->code, $targetCurrencies);
 - 
 -         foreach ($exchangeRates as $currencyCode => $newRate) {
 -             $currency = Currency::where('code', $currencyCode)->first();
 - 
 -             if ($currency && bccomp((string) $currency->rate, (string) $newRate, 8) !== 0) {
 -                 $currency->update(['rate' => $newRate]);
 -             }
 -         }
 -     }
 - }
 
 
  |