
# Șabloane de fluxuri de lucru

Șabloanele de fluxuri de lucru vă permit să definiți o singură dată structura pașilor și să lansați apoi fluxul de mai multe ori după nume. Sunt utile când același proces cu mai mulți pași trebuie rulat cu date inițiale diferite.

## Definirea unui șablon

Folosiți `Queuety::define_workflow()` pentru a crea șablonul, apoi înregistrați-l:

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

Înregistrați șabloanele devreme, de exemplu în funcția hook de inițializare a unui plugin:

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

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

## Rularea unui șablon

Lansați un șablon înregistrat după nume folosind `Queuety::run_workflow()`:

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

Al doilea argument reprezintă datele/starea inițială, la fel ca `->dispatch()` pentru un constructor. Numărul întreg returnat este ID-ul fluxului de lucru.

Dacă șablonul nu este înregistrat, se aruncă o excepție `RuntimeException`.

## Listarea șabloanelor înregistrate

Accesați registrul de șabloane:

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

## Exemplu complet

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

## Șabloane și fluxuri de lucru inline

| | Flux de lucru inline | Șablon |
|---|---|---|
| Definire | La lansare | O singură dată, la înregistrare |
| Lansare | `Queuety::workflow('name')->then(...)->dispatch()` | `Queuety::run_workflow('name', $payload)` |
| Reutilizare | Construiți lanțul de fiecare dată | Înregistrați o dată, lansați de mai multe ori |
| Potrivit pentru | Fluxuri de lucru unice sau compuse dinamic | Procese standard, repetabile |
