
# Darbo eigos šablonai

Darbo eigos šablonai leidžia vieną kartą apibrėžti darbo eigos žingsnių struktūrą ir kelis kartus paleisti ją pagal pavadinimą. Tai naudinga, kai tą patį kelių žingsnių procesą reikia vykdyti su skirtingais duomenų paketais.

## Šablono apibrėžimas

Šablonui sukurti naudokite `Queuety::define_workflow()`, tada jį užregistruokite:

```php
use Queuety\Queuety;
use Queuety\Enums\Priority;

$builder = Queuety::define_workflow( 'onboarding' )
    ->on_queue( 'pipelines' )
    ->with_priority( Priority::Normal )
    ->max_attempts( 5 )
    ->then( CreateAccountHandler::class )
    ->then( SendWelcomeEmailHandler::class )
    ->then( NotifyAdminHandler::class );

Queuety::register_workflow_template( $builder );
```

Užregistruokite šablonus iš anksto, pavyzdžiui, papildinio inicijavimo kabliuke:

```php
add_action( 'init', function () {
    $builder = Queuety::define_workflow( 'onboarding' )
        ->then( CreateAccountHandler::class )
        ->then( SendWelcomeEmailHandler::class )
        ->then( NotifyAdminHandler::class );

    Queuety::register_workflow_template( $builder );
} );
```

## Šablono vykdymas

Užregistruotą šabloną pagal pavadinimą paleiskite naudodami `Queuety::run_workflow()`:

```php
$workflow_id = Queuety::run_workflow( 'onboarding', [ 'email' => 'user@example.com' ] );
```

Antrasis argumentas yra pradiniai duomenys / būsena, kaip ir `->dispatch()` konstruktoriuje. Grąžinamas sveikasis skaičius yra darbo eigos ID.

Jei šablonas neužregistruotas, išmetama `RuntimeException`.

## Užregistruotų šablonų sąrašas

Pasiekite šablonų registrą:

```php
$registry = Queuety::workflow_templates();
$template = $registry->get( 'onboarding' ); // WorkflowTemplate or null
```

## Išsamus pavyzdys

```php
// Register templates on init.
add_action( 'init', function () {
    // User onboarding pipeline
    $onboarding = Queuety::define_workflow( 'onboarding' )
        ->on_queue( 'users' )
        ->then( CreateAccountHandler::class )
        ->then( SetupDefaultsHandler::class )
        ->then( SendWelcomeEmailHandler::class );
    Queuety::register_workflow_template( $onboarding );

    // Content generation pipeline
    $content = Queuety::define_workflow( 'generate_content' )
        ->on_queue( 'llm' )
        ->max_attempts( 5 )
        ->then( BuildPromptHandler::class )
        ->then( CallLLMHandler::class )
        ->then( ReviewOutputHandler::class )
        ->then( PublishHandler::class );
    Queuety::register_workflow_template( $content );
} );

// Dispatch them anywhere in your application.
$wf1 = Queuety::run_workflow( 'onboarding', [ 'email' => 'alice@example.com' ] );
$wf2 = Queuety::run_workflow( 'generate_content', [ 'topic' => 'WordPress performance' ] );
```

## Šablonai ir tiesioginės darbo eigos

| | Tiesioginė darbo eiga | Šablonas |
|---|---|---|
| Apibrėžimas | Paleidimo metu | Vieną kartą registruojant |
| Paleidimas | `Queuety::workflow('name')->then(...)->dispatch()` | `Queuety::run_workflow('name', $payload)` |
| Pakartotinis naudojimas | Kiekvieną kartą sukurkite grandinę | Užregistruokite vieną kartą, paleiskite daug kartų |
| Tinka | Vienkartinėms arba dinamiškai sudaromoms darbo eigoms | Standartiniams, pasikartojantiems procesams |
