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

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
CouponCreatedKupón vznikne cez create() alebo generate() — nie cez createQuietly().Coupon $coupon
CouponRedeemedUplatnenie prebehne úspešne.Coupon $coupon, RedemptionResult $result
CouponRedemptionFailedPokus o uplatnenie je odmietnutý — výnimka sa aj tak vyhodí.string $code, RedemptionFailureReason $reason, ?Model $redeemer
CouponExhaustedUplatnenie spotrebuje posledné dostupné použitie (spustí sa raz).Coupon $coupon
CouponRevokedKupó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 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.