Fasáda Credits
RoundlyConsulting\Credits\Facades\Credits (automaticky zaregistrovaná aj ako globálny alias Credits) je odporúčaný vstupný bod. Credits::for($owner) vráti nemenný scope: bucket() aj allowOverdraft() vrátia nový scope, takže si ho môžete odložiť a použiť opakovane:
use RoundlyConsulting\Credits\Facades\Credits;
use RoundlyConsulting\Money\Money;
Credits::for($user)->add(100, 'Welcome'); // Credit row
Credits::for($user)->deduct(30, 'Order #42', ['order_id' => 42]); // InsufficientCreditsException below the floor
Credits::for($user)->modify(-5); // a signed change
Credits::for($user)->allowOverdraft()->deduct(500); // may go below the floor
Credits::for($user)->setTo(0, 'Reset'); // one delta row; null when already there
Credits::for($user)->balance(); // int — the default bucket
Credits::for($user)->balance(now()->subWeek()); // as of a point in time
Credits::for($user)->has(50); // bool
Credits::for($user)->total(); // int — every bucket
$points = Credits::for($user)->bucket('points');
$points->add(100, 'Welcome');
$points->balance(); // 100
Credits::for($user)->buckets(['promotional', 'purchased'])->balance(); // summed, read-only
Credits::for($user)->buckets(['promotional', 'purchased'])->has(50);
// A currency-denominated bucket reads and writes Money:
$store = Credits::for($user)->bucket('store_credit');
$store->addMoney(Money::ofMajor('25.00', 'EUR'), 'Gift card');
$store->deductMoney(Money::ofMinor(1050, 'EUR'), 'Order #42');
$store->money(); // Money EUR 14.50
$store->currency(); // Currency EUR
$store->format(); // "14.50"
$store->formatMoney('en'); // money's locale formatter (symbol + amount)
// Owner-free helpers:
Credits::format(1250, scale: 2); // "1250.00" at credits.scale = 0
Credits::currency('store_credit'); // ?Currencyadd() a deduct() prijímajú nezápornú sumu, inak vyhodia InvalidArgumentException — na zmenu so znamienkom použite modify(). To isté platí pre addMoney(), deductMoney() a modifyMoney(). buckets([...]) len číta, pretože každý zápis pomenúva práve jednu skupinu.
Metódy scope
| Metóda | Vracia | Čo robí |
|---|---|---|
bucket($name) / allowOverdraft($allow = true) | CreditsScope | Nový scope v danej skupine / s povoleným prečerpaním. |
buckets($names) | CreditBuckets | Súčet viacerých skupín len na čítanie — balance($at) a has($amount, $at). |
add($amount, $description, $meta) | Credit | Pripíše nezápornú sumu. |
deduct($amount, $description, $meta) | Credit | Odpíše nezápornú sumu; stráži ju spodná hranica. |
modify($amount, $description, $meta) | Credit | Zmena so znamienkom — kladná pripisuje, záporná odpisuje. |
setTo($amount, $description, $meta) | ?Credit | Jeden rozdielový záznam k presnému zostatku; null, ak už sedí. |
balance($at) / has($amount = 1, $at) | int / bool | Zostatok skupiny v scope, voliteľne k danému okamihu. |
total($at) | int | Všetky skupiny vlastníka bez ohľadu na skupinu v scope. |
currency() | ?Currency | Mena skupiny, alebo null pre bežné kredity. |
money($at) | Money | Zostatok skupiny v mene ako Money. |
addMoney() / deductMoney() / modifyMoney() | Credit | Varianty add(), deduct() a modify() pre Money. |
format($scale, $rounding, $at) | string | Zostatok ako desatinný reťazec bez lokalizácie (skupina v mene v exponente meny). |
formatMoney($locale) | string | Zostatok skupiny v mene cez lokalizovaný formátovač money. |
Ploché metódy
Fasáda vystavuje aj ploché metódy, ktorými sa končí každý scope — hodia sa jobom, ktoré už majú CreditChangeData:
| Metóda fasády / manažéra | Vracia | Akcia | Poznámka |
|---|---|---|---|
for($owner) | CreditsScope | — | Vstupný bod pre jedného vlastníka. |
format($amount, $scale, $rounding, $storedScale) | string | FormatCreditsAction | Nepotrebuje model. |
currency($bucket) | ?Currency | ResolveBucketCurrencyAction | null = bežné kredity. |
balance($owner, $bucket, $at) | int | GetCreditsBalanceAction | Jedna skupina. |
total($owner, $buckets, $at) | int | GetCreditsTotalAction | null = všetky skupiny; zoznam bez duplicít; [] je 0. |
modify($owner, CreditChangeData $data) | Credit | ModifyCreditsAction | So znamienkom; stráži prečerpanie; spúšťa CreditsModified. |
setTo($owner, $amount, $description, $meta, $allowOverdraft, $bucket) | ?Credit | SetCreditsAction | Jeden rozdielový záznam; null, ak už sedí. |
fake() | CreditsFake | — | Statická, na fasáde — pozrite Testovanie. |
Metódy modelu z HasCredits ($user->modifyCredits(), $user->creditsBalance(), …) sú skratkou pre tie isté volania — každá ide cez Credits::for($user), takže sa správajú presne ako fasáda a fake ich zaznamená.
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 kryptomienOdoslaní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.