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

RoundlyConsulting\Credits\Events\CreditsModified sa spustí po každej zaznamenanej zmene. Nesie entitu s kreditmi, nový záznam Credit a výsledný zostatok:

use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Credits\Events\CreditsModified;

Event::listen(function (CreditsModified $event): void {
    // $event->creditable, $event->credit, $event->balance
});

Obsah udalosti

final class CreditsModified implements ShouldDispatchAfterCommit
{
    use Dispatchable;

    public function __construct(
        public readonly Model&Creditable $creditable,
        public readonly Credit $credit,
        public readonly int $balance,   // the bucket's balance this change produced
    ) {}
}

balance je zostatok skupiny, ktorá sa zmenila — zistíte ju z $event->credit->bucket — nie súčet naprieč skupinami. Je to zostatok, ktorý táto zmena vytvorila, načítaný pod zámkom vlastníka v transakcii zmeny, takže doň nikdy nepresiakne súbežná zmena.

Kedy sa spúšťa

  • Po každom úspešnom zápise — add(), deduct(), modify(), setTo() a ich podobách pre Money na scope, ako aj príslušných metódach traitu — a pre každú entitu, ktorú zmení credits:modify.
  • Až keď je zmena potvrdená: CreditsModified implementuje ShouldDispatchAfterCommit, takže v setTo() alebo vo vašej vlastnej DB::transaction() ju listenery dostanú až po potvrdení vonkajšej transakcie — a pri zmene, ktorá sa vráti späť, vôbec. Listener, ktorý vyhodí výnimku, zmenu nevráti; ak ju chcete zastaviť, overte podmienky ešte pred zmenou.
  • Nie, keď je setCreditsTo() bez účinku, lebo zostatok už sedí.
  • Nie, keď zmenu odmietne ochrana pred prečerpaním, 64-bitový limit alebo kontrola meny — nič sa nezapísalo.

Listener

Pošlite potvrdenie, aktualizujte dashboard alebo upozornite na nízky zostatok:

use Illuminate\Support\Facades\Log;

Event::listen(function (CreditsModified $event): void {
    Log::info("Balance for {$event->creditable->getKey()} is now {$event->balance}");

    if ($event->credit->amount < 0 && $event->balance < 10) {
        // $event->credit->bucket is running low — notify the owner
    }
});

Udalosti rezervácií

Rezervácie spúšťajú vlastné udalosti, všetky ShouldDispatchAfterCommit — listenery ich dostanú až po potvrdení transakcie. Obnovenie spustí CreditsModified pre svoj rozdielový záznam (žiadnu, ak zostatok už sedel):

UdalosťVlastnostiKedy
CreditsHeldcreditable, hold, availableVznikla rezervácia; available je dostupný zostatok skupiny po nej.
CreditHoldCapturedcreditable, hold, credit, releasedRezervácia bola strhnutá; credit je odpis, released uvoľnená časť (0 pri strhnutí celej). Pre odpis sa spustí aj CreditsModified.
CreditHoldReleasedholdRezervácia bola uvoľnená.
CreditHoldExpiredholdUpratovanie rezerváciu expirovalo; vlastník cez $hold->creditable, ktorý už nemusí existovať.
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Credits\Events\CreditHoldCaptured;
use RoundlyConsulting\Credits\Events\CreditHoldExpired;

Event::listen(function (CreditHoldCaptured $event): void {
    // $event->creditable, $event->hold, $event->credit (the debit), $event->released (0 for a full capture)
});

Event::listen(function (CreditHoldExpired $event): void {
    // $event->hold — the owner via $event->hold->creditable, which may be gone
});

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.