Ú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, failedKontrakt
| Metóda | Účel |
|---|---|
find(string $campaignUuid): ?Campaign | Uložená kampaň; null, ak neexistuje. |
all(int $offset = 0, int $limit = 10): Collection | Stránka kampaní v poradí vytvorenia. |
insert(Campaign $campaign): bool | Vloží 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): void | Vloží alebo aktualizuje kampaň podľa jej uuid. |
saveIfStatus(Campaign $campaign, CampaignStatus $expected): bool | Uloží 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): void | Vloží 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): Collection | Príjemcovia kampane v poradí pridania; limit null vráti všetkých. |
findRecipient(string $campaignUuid, string $recipientUuid): ?CampaignRecipient | Príjemca tejto kampane; príjemca inej kampane sa číta ako null. |
countRecipients(string $campaignUuid): RecipientCounts | Prí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\CampaignStoreKó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 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.