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

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 change

Na 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(); // 70

Metó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 recorded

Pri 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 call

V 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 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.