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

Fasáda je odporúčaná voľba, nie jediná cesta. Balík ponúka tri rovnocenné vstupné body a všetky spúšťajú ten istý kód:

  • Fasáda Coupons — najkratší zápis, odporúčaný na bežné volania.
  • Manažér RoundlyConsulting\Coupons\CouponManager — koreň fasády. Injektujte ho cez konštruktor a získate rovnaké API ako explicitnú závislosť, bez statických volaní.
  • Akcie — jednoúčelové triedy v RoundlyConsulting\Coupons\Actions s jedinou metódou execute(), ktoré skladáte do vlastných akcií, jobov a príkazov.

Injektovanie manažéra

use RoundlyConsulting\Coupons\CouponManager;
use RoundlyConsulting\Coupons\DataTransferObjects\RedemptionResult;
use RoundlyConsulting\Money\Money;

final class ApplyCoupon
{
    public function __construct(private CouponManager $coupons) {}

    public function __invoke(string $code, Money $cart, User $user): RedemptionResult
    {
        return $this->coupons->code($code)->redeem($cart, $user);
    }
}

Coupons::fake() nahradí manažéra pre fasádu aj pre každý injektovaný CouponManager — manažér nie je final, aby ho fake mohol rozšíriť —, takže triedu s injektovaným manažérom testujete rovnako ako triedu, ktorá volá fasádu.

Spustenie akcie

Každá operácia je aj samostatná trieda akcie, ktorú si môžete vyžiadať z kontajnera a spustiť sami. Väčšina berie bežné argumenty; CreateCouponAction berie DTO CreateCouponData a RedeemCouponAction DTO RedeemCouponData:

use RoundlyConsulting\Coupons\Actions\{CheckCouponAction, CreateCouponAction, ExpireCouponsAction,
    PruneCouponsAction, RedeemCouponAction, RevokeCouponAction};
use RoundlyConsulting\Coupons\DataTransferObjects\RedeemCouponData;

app(CreateCouponAction::class)->execute($data);                  // Coupon; quiet: true skips CouponCreated
app(CheckCouponAction::class)->execute('SUMMER', $cart, $user);   // ?RedemptionFailureReason
app(RedeemCouponAction::class)->execute(new RedeemCouponData(coupon: 'SUMMER', price: $cart, redeemer: $user));
app(RevokeCouponAction::class)->execute($coupon);
app(ExpireCouponsAction::class)->execute();                       // int
app(PruneCouponsAction::class)->execute(days: 30, force: false);  // int

Manažér si akciu vyžiada z kontajnera až pri volaní metódy. Akcia, ktorú spustíte sami, manažéra obíde, takže ju Coupons::fake() nezaznamená — v testoch preto overujte databázu a udalosti. Model Coupon, trait HasCoupons, pravidlo Redeemable aj oba Artisan príkazy idú cez manažéra.

Metóda fasády → akcia

Metóda fasádyAkciaPoznámka
generate(), create()CreateCouponActionBerie DTO CreateCouponData; generate() ho zostaví za vás.
createQuietly()CreateCouponActionexecute($data, quiet: true) — bez CouponCreated.
check()CheckCouponActionexecute($coupon, $price, $redeemer) — nevyhadzuje výnimky, nezamyká ani nezapisuje.
redeem()RedeemCouponActionBerie DTO RedeemCouponData (coupon, price, redeemer).
revoke()RevokeCouponActionBerie model Coupon; kód najprv prevedie na model manažér.
expireAll()ExpireCouponsActionexecute(?string $code = null): int
prune()PruneCouponsActionexecute(int $days = 30, bool $force = false): int
preview()—Coupon::previewDiscount() nad nájdeným modelom.
find(), findOrFail(), exists(), redeemable()—Dopyt nad modelom nastaveným v coupons.model.
code()—Handle CouponCode nad check(), preview(), redeem() a revoke().

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.