
# Samostatné použitie

Queuety je zabalený ako plugin pre WordPress, no väčšina behového prostredia
v skutočnosti nepotrebuje aktívnu požiadavku WordPress.

Front, nástroj na vykonávanie workflow, stavové automaty, signály, artefakty, dávkové spracovanie,
plánovanie, zaznamenávanie udalostí, metriky a správa zdrojov používajú tie isté
MySQL tabuľky. Ak iný proces PHP dokáže otvoriť tú istú databázu, môže toto
jadro používať priamo.

To je hranica samostatného používania v Queuety. Nástroj na orchestráciu založený na databáze
možno používať mimo WordPress. Mosty WordPress však naďalej patria do
WordPress.

## Čo funguje mimo WordPress

Pri priamom pripojení `Connection` môže samostatný proces inicializovať Queuety a používať
rovnaké metódy rozhrania, aké plugin používa pre základné behové prostredie:

- odosielať úlohy
- spúšťať workery a skupiny workerov
- vytvárať a odosielať workflow
- odosielať signály, žiadosti o schválenie a vstupy workflow
- vytvárať a odosielať stavové automaty
- kontrolovať stav workflow a automatov
- ukladať a čítať artefakty
- riadiť dávkové spracovanie, reťazenie a opakujúce sa plány
- vyhľadávať v záznamoch, metrikách a frontoch a kontrolovať stav behového prostredia

Externý produkt tak môže pristupovať k rovnakému stavu orchestrácie bez predchádzajúceho spustenia WordPress, pokiaľ používa tú istú databázu a názvy tabuliek.

Skupiny workerov sú v súčasnosti jedinou výnimkou: `Queuety::run_worker_pool()` a
`Queuety::run_auto_scaling_worker_pool()` čítajú konštanty WordPress `DB_HOST`,
`DB_NAME`, `DB_USER` a `DB_PASSWORD` namiesto inicializovaného
pripojenia, takže samostatný proces musí tieto konštanty definovať ešte pred
spustením skupiny workerov ([#5](https://github.com/inline0/queuety/issues/5)).

## Čo zostáva v WordPress

Vrstva mostov špecifická pre WordPress naďalej závisí od načítania WordPress.

Patrí sem:

- zavádzanie pluginu a jeho aktivačné správanie v `queuety.php`
- `Queuety::on_action()`, ktoré vyžaduje `add_action()`
- `Queuety::replace_wp_cron()` a `Queuety::restore_wp_cron()`, ktoré závisia od filtrov WordPress cron a `do_action()`
- skutočná cesta registrácie príkazu `wp queuety ...`, ktorá závisí od načítania WordPress pomocou WP-CLI

Tieto časti sú adaptéry okolo základného behového prostredia. Samy osebe ním nie sú.

## Inicializácia

Samostatná cesta je zámerne jednoduchá. Otvorte databázové pripojenie `Connection`,
inicializujte rozhranie a uistite sa, že schéma existuje.

```php
use Queuety\Connection;
use Queuety\Queuety;

$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
);

Queuety::init( $conn );
Queuety::ensure_schema();
```

Potom budú k dispozícii bežné metódy behového prostredia API:

```php
Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );

$workflow_id = Queuety::workflow( 'report' )
    ->then( FetchReportData::class )
    ->then( RenderReport::class )
    ->dispatch( [ 'report_id' => 42 ] );

$machine_id = Queuety::machine( 'agent_session' )
    ->state( 'awaiting_input' )
    ->on( 'message', 'planning' )
    ->state( 'planning' )
    ->action( PlanSessionAction::class )
    ->dispatch();
```

## Pomenovanie tabuliek

Na samostatné použitie nie sú potrebné konkrétne názvy tabuliek WordPress. Potrebná je iba
stabilná stratégia predpôn.

Ak pripojíte Queuety k databáze WordPress, použite rovnakú predponu, akú tam používa
plugin. Ak použijete Queuety v samostatnej databáze, predpona pripojenia môže byť ľubovoľná, akú očakáva vaša hostiteľská aplikácia. Časť názvu tabuľky špecifická pre Queuety je stále riadená pomocou `QUEUETY_TABLE_PREFIX` a individuálnych
nastavení pre jednotlivé tabuľky.

Vstavané behové prostredia, ktoré zdieľajú jednu databázu, môžu nastaviť túto časť špecifickú pre Queuety pre každé pripojenie:

```php
$conn = new Connection(
    host: '127.0.0.1:3306',
    dbname: 'wordpress',
    user: 'root',
    password: 'secret',
    prefix: 'wp_',
    table_prefix: 'themequeue_',
);
```

Predpona databázy WordPress tak zostane nezmenená a názvy tabuliek, ako napríklad
`queuety_jobs`, sa prevedú na `wp_themequeue_jobs`.

## Koncepčný model

Rozdelenie možno jednoducho chápať takto:

- jadro Queuety = front, workeri, workflow, stavové automaty, signály, artefakty a metadáta behového prostredia
- adaptér WordPress = zavádzanie pluginu, mosty hákov, náhrada WP-Cron a registrácia WP-CLI

Tak zostane zachovaný jeden nástroj na orchestráciu a integrácia udalostí a požiadaviek špecifická pre WordPress zostane tam, kam patrí.
