
# Predloge potekov dela

Predloge potekov dela omogočajo, da strukturo korakov poteka dela določite enkrat in jo nato večkrat zaženete po imenu. To je uporabno, kadar je treba isti večstopenjski postopek izvajati z različnimi podatkovnimi nizi.

## Določanje predloge

Za sestavo predloge uporabite `Queuety::define_workflow()`, nato pa jo registrirajte:

```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 );
```

Predloge registrirajte zgodaj, na primer v inicializacijski kljuki vtičnika:

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

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

## Zagon predloge

Registrirano predlogo zaženite po imenu z `Queuety::run_workflow()`:

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

Drugi argument je začetni podatkovni niz/stanje, podobno kot pri `->dispatch()` v gradniku. Vrnjena celoštevilska vrednost je ID poteka dela.

Če predloga ni registrirana, se sproži `RuntimeException`.

## Seznam registriranih predlog

Dostopajte do registra predlog:

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

## Celoten primer

```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' ] );
```

## Predloge in vgrajeni poteki dela

| | Vgrajeni potek dela | Predloga |
|---|---|---|
| Definicija | Ob zagonu | Enkrat, ob registraciji |
| Zagon | `Queuety::workflow('name')->then(...)->dispatch()` | `Queuety::run_workflow('name', $payload)` |
| Ponovna uporaba | Verigo sestavite vsakič | Registrirajte enkrat, zaženite večkrat |
| Najprimernejše za | Enkratne ali dinamično sestavljene poteke dela | Standardne, ponovljive postopke |
