Pripísanie a odpis kreditov
Každá zmena pridá do knihy pohybov jeden záznam. Pripisujte cez add(), odpisujte cez deduct() — obe prijímajú kladnú sumu — alebo odovzdajte sumu so znamienkom do modify(); voliteľný popis a pole meta sa uložia na záznam:
use RoundlyConsulting\Credits\Facades\Credits;
Credits::for($user)->add(100, 'signup bonus'); // a grant — returns the Credit row
Credits::for($user)->deduct(30, 'purchase', ['order_id' => 42]); // a deduction, passed as a positive amount
Credits::for($user)->balance(); // 70
Credits::for($user)->modify(-5, 'correction'); // a signed changeNa modeli s traitom HasCredits je skratkou modifyCredits() — kladná suma pripisuje, záporná odpisuje:
$user->modifyCredits(100, 'signup bonus');
$user->modifyCredits(-30, 'purchase', ['order_id' => 42]);
$user->creditsBalance(); // 70Metóda vráti zaznamenaný riadok Credit:
$credit = $user->modifyCredits(25, 'referral reward', ['referrer_id' => 7]);
$credit->amount; // 25
$credit->description; // 'referral reward'
$credit->meta; // ['referrer_id' => 7]
$credit->bucket; // 'default'
$credit->created_at; // when the change was recordedPri dlhších volaniach pomôžu pomenované argumenty — celá signatúra je modifyCredits(int $amount, ?string $description = null, ?array $meta = null, bool $allowOverdraft = false, ?string $bucket = null):
$user->modifyCredits(
amount: -30,
description: 'order #42',
meta: ['order_id' => 42],
allowOverdraft: false,
bucket: 'purchased',
);Nastavenie presného zostatku
setTo() vypočíta rozdiel oproti aktuálnemu zostatku a zaznamená jeden vyrovnávací riadok. Ak zostatok už sedí, nezaznamená nič, vráti null a nespustí žiadnu udalosť. Vezme zámok vlastníka a zostatok načíta pod zámkom riadkov v jednej transakcii so zápisom, takže dve súbežné volania sa zoradia za sebou — druhé vypočíta rozdiel zo zostatku, ktorý po sebe nechalo prvé:
Credits::for($user)->setTo(500, 'manual adjustment'); // one delta row; null when already there
Credits::for($user)->bucket('promotional')->setTo(200); // per bucket, like every other callV traite je to setCreditsTo():
$user->creditsBalance(); // 70
$user->setCreditsTo(500, 'manual adjustment'); // records +430, returns the Credit row
$user->setCreditsTo(500); // already 500: records nothing, returns null
$user->setCreditsTo(200, bucket: 'promotional'); // per bucket, like every other methodÚprava smerom nadol sa zaznamená ako odpis, takže sa na ňu vzťahuje ochrana pred prečerpaním — nastaviť zostatok pod hranicu je možné len s allowOverdraft: true.
História, ktorá sa len dopĺňa
Nič sa nikdy neprepisuje: sumy sú celé čísla so znamienkom, každá zmena je samostatný záznam s časom a zostatok je ich súčet. Ak chcete zmenu vrátiť, zaznamenajte vyrovnávací záznam — v histórii potom uvidíte zmenu aj jej opravu.
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.