Udalosti
Všetky udalosti sú v RoundlyConsulting\Coupons\Events. CouponCreated, CouponRedeemed, CouponExhausted a CouponRevoked implementujú ShouldDispatchAfterCommit z Laravelu; CouponRedemptionFailed sa spustí okamžite:
| Udalosť | Kedy | Údaje |
|---|---|---|
CouponCreated | Kupón vznikne cez create() alebo generate() — nie cez createQuietly(). | Coupon $coupon |
CouponRedeemed | Uplatnenie prebehne úspešne. | Coupon $coupon, RedemptionResult $result |
CouponRedemptionFailed | Pokus o uplatnenie je odmietnutý — výnimka sa aj tak vyhodí. | string $code, RedemptionFailureReason $reason, ?Model $redeemer |
CouponExhausted | Uplatnenie spotrebuje posledné dostupné použitie (spustí sa raz). | Coupon $coupon |
CouponRevoked | Kupón je odvolaný cez Coupons::revoke(), Coupons::expireAll() alebo coupons:expire (raz na kupón). | Coupon $coupon |
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Coupons\Events\CouponExhausted;
use RoundlyConsulting\Coupons\Events\CouponRedeemed;
use RoundlyConsulting\Coupons\Events\CouponRedemptionFailed;
Event::listen(function (CouponRedeemed $event): void {
logger()->info('Coupon redeemed', [
'code' => $event->coupon->code,
'discount' => (string) $event->result->discount, // "12.50 EUR"
]);
});
Event::listen(function (CouponRedemptionFailed $event): void {
logger()->warning('Coupon rejected', [
'code' => $event->code,
'reason' => $event->reason->value, // e.g. "expired", "at_max_usage"
]);
});
Event::listen(function (CouponExhausted $event): void {
logger()->info('Coupon exhausted', ['code' => $event->coupon->code]);
});Záruky
- CouponRedemptionFailed sa spustí raz pri každom odmietnutom pokuse o uplatnenie — nikdy z Coupons::check(), pravidla Redeemable ani z isRedeemableBy() — a zodpovedajúca výnimka sa aj tak vyhodí. $event->reason je RedemptionFailureReason: not_found, currency_mismatch, minimum_spend_not_met, expired, at_max_usage alebo already_redeemed.
- CouponExhausted sa spustí presne raz — pri uplatnení, ktoré dotiahne usage na max_usage — nikdy pri neobmedzených kupónoch a už nikdy pri neskoršom odmietnutom pokuse.
- CouponRevoked sa spustí pri Coupons::revoke() a raz pre každý kupón, ktorému ukončí platnosť Coupons::expireAll() alebo coupons:expire.
- CouponCreated sa pri createQuietly() nespustí.
Udalosti a transakcie
CouponCreated, CouponRedeemed, CouponExhausted a CouponRevoked počkajú, kým sa vonkajšia transakcia — vaša alebo vlastná transakcia uplatnenia — potvrdí, a ak sa vráti späť, nespustia sa vôbec. Objednávka, ktorá uplatní kupón a potom jej zlyhá platba, tak uplatnenie nikdy neohlási.
CouponRedemptionFailed sa spustí okamžite, aj vnútri transakcie: pokus sa udial tak či tak. Neúspešná kontrola ju vyvolá vnútri uzamknutej transakcie uplatnenia, ktorá sa pri vyhodení výnimky vráti späť, takže databázové zápisy synchrónneho listenera CouponRedemptionFailed sa vrátia spolu s ňou. Neznámy kód sa odmietne ešte pred otvorením transakcie.
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.