Aller au contenu

Modèles de workflow

Les modèles de workflow permettent de définir une seule fois la structure des étapes d’un workflow, puis de le lancer plusieurs fois par son nom. C’est utile lorsqu’un même processus en plusieurs étapes doit s’exécuter avec différentes charges utiles.

Définir un modèle

Utilisez Queuety::define_workflow() pour créer le modèle, puis enregistrez-le :

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

Enregistrez les modèles tôt, par exemple dans le hook d’initialisation d’une extension :

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

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

Exécuter un modèle

Lancez un modèle enregistré par son nom avec Queuety::run_workflow() :

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

Le deuxième argument est la charge utile ou l’état initial, comme pour ->dispatch() sur un générateur. L’entier renvoyé correspond à l’identifiant du workflow.

Si le modèle n’est pas enregistré, une exception RuntimeException est levée.

Lister les modèles enregistrés

Accédez au registre des modèles :

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

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

Modèles et workflows intégrés

Workflow intégré Modèle
Définition Au moment du lancement Une fois, au moment de l’enregistrement
Lancement Queuety::workflow('name')->then(...)->dispatch() Queuety::run_workflow('name', $payload)
Réutilisation Construire la chaîne à chaque fois Enregistrer une fois et lancer plusieurs fois
Idéal pour Workflows ponctuels ou composés dynamiquement Processus standard et répétables