NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

Fasády sú odporúčaná predvoľba, nie jediný vstup. K tomu istému kódu vedú tri rovnocenné vstupné body:

  • Fasáda Exchange — najkratší zápis, ktorý používa celá táto dokumentácia.
  • Manažér — RoundlyConsulting\Money\Exchange\ExchangeManager, singleton v kontajneri a koreň fasády Exchange. Injektujte ho: rovnaké API, explicitná závislosť a žiadne statické volania.
  • Akcie — RefreshExchangeRatesAction, StoreExchangeRatesAction a PruneExchangeRatesAction: jednoúčelové triedy s metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

Injektovanie manažéra

use RoundlyConsulting\Money\Exchange\ExchangeManager;

final class RecordCzkRate
{
    public function __construct(private ExchangeManager $exchange) {}

    public function __invoke(string $rate): void
    {
        $this->exchange->rates()->manual('EUR', 'CZK', $rate); // same call as Exchange::rates()->manual()
    }
}

Exchange::fake() nahradí aj injektovanú inštanciu — fake dedí z ExchangeManager, takže trieda s type-hintom na manažér ho v testoch dostane namiesto TypeError. Pre meny injektujte kontrakt RoundlyConsulting\Money\Contracts\CurrencyRegistry:

use RoundlyConsulting\Money\Contracts\CurrencyRegistry;

public function __construct(private CurrencyRegistry $currencies) {}

$this->currencies->get('EUR')->exponent;   // 2 — the same singleton Currencies resolves

Volanie akcie

use RoundlyConsulting\Money\Actions\StoreExchangeRatesAction;
use RoundlyConsulting\Money\Exchange\ExchangeRate;

app(StoreExchangeRatesAction::class)->execute([
    ExchangeRate::fromDecimal('EUR', 'CZK', '25.10', now(), source: 'manual'),
]);
use Carbon\CarbonImmutable;
use RoundlyConsulting\Money\Actions\PruneExchangeRatesAction;
use RoundlyConsulting\Money\Actions\RefreshExchangeRatesAction;
use RoundlyConsulting\Money\DataTransferObjects\PruneExchangeRatesData;
use RoundlyConsulting\Money\DataTransferObjects\RefreshExchangeRatesData;
use RoundlyConsulting\Money\Enums\EcbFeed;

$result = app(RefreshExchangeRatesAction::class)->execute(
    new RefreshExchangeRatesData('ecb', EcbFeed::Recent),
);
$result->stored;                   // rows written
$result->skippedManual;            // manual rows left untouched
$result->skippedUnknownCurrency;   // feed currencies the registry does not know
$result->latestDate;               // ?CarbonImmutable

$deleted = app(PruneExchangeRatesAction::class)->execute(
    new PruneExchangeRatesData(CarbonImmutable::now()->subYear()),
);

Metóda fasády → akcia

Metóda fasádyAkciaPrijímaPoznámka
Exchange::rates()->refresh()RefreshExchangeRatesActionRefreshExchangeRatesDataBeží hneď.
Exchange::rates()->refreshLater()RefreshExchangeRatesActionRefreshExchangeRatesDataCez job RefreshExchangeRates vo fronte.
Exchange::rates()->store(...$rates)StoreExchangeRatesActioniterable<ExchangeRate>Jediná cesta zápisu.
Exchange::rates()->manual(…)StoreExchangeRatesActioniterable<ExchangeRate>Jeden kurz so zdrojom manual.
Exchange::rates()->prune(…)PruneExchangeRatesActionPruneExchangeRatesDataVráti počet zmazaných alebo spočítaných riadkov.
  • RefreshExchangeRatesData prijíma source = 'ecb', feed = EcbFeed::Daily a voliteľné dátumy from a to; PruneExchangeRatesData prijíma before, includeManual = false a pretend = false.
  • Aktualizácia aj uloženie vrátia RefreshResult (source, stored, skippedManual, skippedUnknownCurrency, latestDate); prune vráti int.
  • Príkazy aj job RefreshExchangeRates vo fronte spúšťajú ten istý kód.
  • Exchange::fake() zaznamená všetko, čo ide cez Exchange::rates() — na fasáde aj na injektovanom manažéri. Akcia, ktorú zavoláte priamo, sa vykoná naozaj.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.