Intervention devinsto
Thème :
Junior
1 vues ·4/8 leçons

04 - Intégration dans le flux STALL

J’ai intégré le service directement dans vos Actions pour que le traitement soit automatique et transparent.

1. Création d’un Article (StorePostAction)

J’ai modifié l’action pour qu’elle injecte mon service et traite l’image juste après le store().

Code de app/Actions/Blog/Post/StorePostAction.php :

<?php

declare(strict_types=1);

namespace App\Actions\Blog\Post;

use App\Enums\Blog\PostStatus;
use App\Models\Blog\Post;
use App\Models\User;
use App\Services\ImageProcessingService;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

final readonly class StorePostAction
{
    public function __construct(
        private ImageProcessingService $imageProcessingService
    ) {}

    public function execute(User $author, array $data): Post
    {
        return DB::transaction(function () use ($author, $data) {
            $imagePath = null;

            if (isset($data['cover_image']) && $data['cover_image'] instanceof UploadedFile) {
                // Stockage
                $imagePath = $data['cover_image']->store('blog/covers', 'public');
                $data['cover_image'] = $imagePath;

                // Mon ajout : Traitement de l'image
                $this->imageProcessingService->processBlogCover($imagePath);
            }

            // ... suite de la logique (slug, dates, sync)
            $post = $author->posts()->create($data);

            return $post;
        });
    }
}

2. Mise à jour d’un Article (UpdatePostAction)

J’ai appliqué la même logique pour l’édition. Si une nouvelle image est envoyée, elle est traitée avant d’écraser l’ancienne.

Code de app/Actions/Blog/Post/UpdatePostAction.php :

if (isset($data['cover_image']) && $data['cover_image'] instanceof UploadedFile) {
    // Nettoyage de l'ancienne image
    $this->cleanupImage($post->getRawOriginal('cover_image'));

    // Stockage de la nouvelle
    $imagePath = $data['cover_image']->store('blog/covers', 'public');
    $data['cover_image'] = $imagePath;

    // Traitement automatique
    $this->imageProcessingService->processBlogCover($imagePath);
}

Pourquoi j’ai mis le traitement ICI ?

En plaçant le code dans l’Action :

  1. Fiabilité : On est sûr que le traitement ne se fait que si le fichier est bien arrivé sur le disque.
  2. Performance : L’utilisateur n’attend que l’upload. Le traitement se fait immédiatement après, avant que le navigateur ne soit redirigé vers l’article.
  3. Propreté : Vos contrôleurs restent totalement ignorants de la technique de traitement d’image.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur 04 - Intégration dans le flux STALL. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.