
# İş Akışı Şablonları

İş akışı şablonları, bir iş akışının adım yapısını bir kez tanımlamanıza ve adını kullanarak birden çok kez çalıştırmanıza olanak tanır. Aynı çok adımlı sürecin farklı yüklerle çalışması gerektiğinde kullanışlıdır.

## Şablon tanımlama

Şablonu oluşturmak için `Queuety::define_workflow()` kullanın, ardından kaydedin:

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

Şablonları erken, örneğin bir eklentinin başlatma kancasına kaydedin:

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

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

## Şablon çalıştırma

Kayıtlı bir şablonu adıyla çalıştırmak için `Queuety::run_workflow()` kullanın:

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

İkinci bağımsız değişken, oluşturucudaki `->dispatch()` gibi başlangıç yükü/durumudur. Döndürülen tam sayı, iş akışı kimliğidir.

Şablon kayıtlı değilse `RuntimeException` fırlatılır.

## Kayıtlı şablonları listeleme

Şablon kayıt defterine erişin:

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

## Tam örnek

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

## Şablonlar ve satır içi iş akışları

| | Satır içi iş akışı | Şablon |
|---|---|---|
| Tanımlama | Çalıştırma sırasında | Bir kez, kayıt sırasında |
| Çalıştırma | `Queuety::workflow('name')->then(...)->dispatch()` | `Queuety::run_workflow('name', $payload)` |
| Yeniden kullanım | Zinciri her seferinde oluşturun | Bir kez kaydedin, birçok kez çalıştırın |
| En uygun kullanım | Tek seferlik veya dinamik olarak oluşturulan iş akışları | Standart, tekrarlanabilir süreçler |
