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

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');                               // ?Currency

add() 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ódaVraciaČo robí
bucket($name) / allowOverdraft($allow = true)CreditsScopeNový scope v danej skupine / s povoleným prečerpaním.
buckets($names)CreditBucketsSúčet viacerých skupín len na čítanie — balance($at) a has($amount, $at).
add($amount, $description, $meta)CreditPripíše nezápornú sumu.
deduct($amount, $description, $meta)CreditOdpíše nezápornú sumu; stráži ju spodná hranica.
modify($amount, $description, $meta)CreditZmena so znamienkom — kladná pripisuje, záporná odpisuje.
setTo($amount, $description, $meta)?CreditJeden rozdielový záznam k presnému zostatku; null, ak už sedí.
balance($at) / has($amount = 1, $at)int / boolZostatok skupiny v scope, voliteľne k danému okamihu.
total($at)intVšetky skupiny vlastníka bez ohľadu na skupinu v scope.
currency()?CurrencyMena skupiny, alebo null pre bežné kredity.
money($at)MoneyZostatok skupiny v mene ako Money.
addMoney() / deductMoney() / modifyMoney()CreditVarianty add(), deduct() a modify() pre Money.
format($scale, $rounding, $at)stringZostatok ako desatinný reťazec bez lokalizácie (skupina v mene v exponente meny).
formatMoney($locale)stringZostatok 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žéraVraciaAkciaPoznámka
for($owner)CreditsScope—Vstupný bod pre jedného vlastníka.
format($amount, $scale, $rounding, $storedScale)stringFormatCreditsActionNepotrebuje model.
currency($bucket)?CurrencyResolveBucketCurrencyActionnull = bežné kredity.
balance($owner, $bucket, $at)intGetCreditsBalanceActionJedna skupina.
total($owner, $buckets, $at)intGetCreditsTotalActionnull = všetky skupiny; zoznam bez duplicít; [] je 0.
modify($owner, CreditChangeData $data)CreditModifyCreditsActionSo znamienkom; stráži prečerpanie; spúšťa CreditsModified.
setTo($owner, $amount, $description, $meta, $allowOverdraft, $bucket)?CreditSetCreditsActionJeden 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 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.