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

Úložiská kampaní

Úložisko slúži len na perzistenciu. Dávky, zmeny stavu a udalosti majú na starosti akcie, takže úložisko iba uchováva kampane a ich príjemcov. Nakonfigurované úložisko (konfigurácia: store, env CAMPAIGNS_STORE) je v kontajneri zaregistrované ako Contracts\CampaignStore — scoped, takže každý request či job vo fronte dostane vlastné — a pri čítaní vracia kópie — zmena vráteného objektu sa prejaví až po jeho uložení:

use RoundlyConsulting\Campaigns\Contracts\CampaignStore;

// The configured store, as the actions see it (bound scoped — one per request or queued job):
$store = app(CampaignStore::class);

$store->find('e184d08f-5081-4fbb-9604-7a2460c3fb3a');         // ?Campaign — a copy
$store->recipients('e184d08f-5081-4fbb-9604-7a2460c3fb3a');   // Collection<int, CampaignRecipient>
$store->countRecipients('e184d08f-5081-4fbb-9604-7a2460c3fb3a'); // RecipientCounts: total, processed, failed

Kontrakt

MetódaÚčel
find(string $campaignUuid): ?CampaignUložená kampaň; null, ak neexistuje.
all(int $offset = 0, int $limit = 10): CollectionStránka kampaní v poradí vytvorenia.
insert(Campaign $campaign): boolVloží novú kampaň; false — a nič sa nezapíše — ak je jej uuid obsadené, aj soft-deleted kampaňou. Musí ísť o jeden atomický krok.
save(Campaign $campaign): voidVloží alebo aktualizuje kampaň podľa jej uuid.
saveIfStatus(Campaign $campaign, CampaignStatus $expected): boolUloží kampaň, len kým je uložený stav stále $expected — atomické compare-and-set, cez ktoré ide každá zmena stavu. Pre kampaň, ktorú úložisko nemá, vráti false.
saveRecipients(string $campaignUuid, array $recipients): voidVloží alebo aktualizuje každého príjemcu podľa dvojice (kampaň, uuid) — ten istý príjemca uložený pod dvoma kampaňami zostane v oboch.
recipients(string $campaignUuid, int $offset = 0, ?int $limit = null): CollectionPríjemcovia kampane v poradí pridania; limit null vráti všetkých.
findRecipient(string $campaignUuid, string $recipientUuid): ?CampaignRecipientPríjemca tejto kampane; príjemca inej kampane sa číta ako null.
countRecipients(string $campaignUuid): RecipientCountsPríjemcovia spočítaní podľa výsledku — total, processed, failed — z čoho sa skladá priebeh.

insert() (odmietne obsadené uuid) a saveIfStatus() (zapíše, len kým je uložený stav očakávaný) musia byť každá jedným atomickým krokom: práve vďaka nim sú duplicitné uuid a súbežné spustenia bezpečné.

Dodávané úložiská

  • Stores\InMemoryCampaignStore (predvolené) — drží kampane v pamäti počas aktuálneho requestu, konzolového príkazu alebo jobu vo fronte. Ideálne pre testy a jednorazové odoslanie; potom nič nezostane.
  • Stores\DatabaseCampaignStore — ukladá kampane do modelov CampaignRecord a CampaignRecipientRecord. Pozrite si časť Databázové úložisko.

Obe prechádzajú rovnakou zdieľanou sadou kontraktových testov, takže sa správajú rovnako. Ak chcete kampane ukladať inam, implementujte Contracts\CampaignStore a nastavte ho v konfigurácii — resolvuje sa z kontajnera, takže závislosti v konštruktore sa injektujú:

// config/campaigns.php
'store' => \App\Campaigns\ApiCampaignStore::class, // implements Contracts\CampaignStore

Kód, ktorý kampane odosiela, s úložiskom priamo nepracuje — ide cez fasádu Campaigns, injektovaný CampaignManager alebo akcie (pozrite si časť DI a akcie).

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.