62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php declare(strict_types=1);
 | 
						|
 | 
						|
namespace KorElf\TranslateLaravel\Jobs;
 | 
						|
 | 
						|
use Illuminate\Bus\Queueable;
 | 
						|
use Illuminate\Contracts\Queue\ShouldBeEncrypted;
 | 
						|
use Illuminate\Contracts\Queue\ShouldQueue;
 | 
						|
use Illuminate\Foundation\Bus\Dispatchable;
 | 
						|
use Illuminate\Queue\InteractsWithQueue;
 | 
						|
use Illuminate\Queue\SerializesModels;
 | 
						|
use Illuminate\Support\Facades\Bus;
 | 
						|
use Illuminate\Support\Str;
 | 
						|
use KorElf\TranslateLaravel\DTO\AfterTranslateDto;
 | 
						|
use KorElf\TranslateLaravel\DTO\ProcessTranslateDto;
 | 
						|
use korElf\TranslateLaravel\DTO\RunTranslateDto;
 | 
						|
use KorElf\TranslateLaravel\DTO\Translated;
 | 
						|
use KorElf\TranslateLaravel\Translate\SplitTextIntoPartsCommand;
 | 
						|
 | 
						|
final class RunTranslate implements ShouldQueue, ShouldBeEncrypted
 | 
						|
{
 | 
						|
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 | 
						|
 | 
						|
    /**
 | 
						|
     * Create a new job instance.
 | 
						|
     */
 | 
						|
    public function __construct(
 | 
						|
        private readonly RunTranslateDto    $runTranslateDto,
 | 
						|
        private readonly AfterTranslateDto $afterTranslateDto,
 | 
						|
    ) { }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Execute the job.
 | 
						|
     */
 | 
						|
    public function handle(SplitTextIntoPartsCommand $splitTextIntoPartsCommand): void
 | 
						|
    {
 | 
						|
        $chains = [];
 | 
						|
        $groupName = 'KorElf\TranslateLaravel\Jobs-' . Str::uuid()->toString();
 | 
						|
        $translated = new Translated();
 | 
						|
        foreach ($this->runTranslateDto->getParams() as $key => $param) {
 | 
						|
            /* @var \KorElf\TranslateLaravel\DTO\Parameter $param */
 | 
						|
 | 
						|
            $texts = $splitTextIntoPartsCommand->execute($param->getText(), $param->getTextType(), $param->getDriver());
 | 
						|
            foreach ($texts as $part => $partText) {
 | 
						|
                $processTranslateDto = new ProcessTranslateDto(
 | 
						|
                    $groupName,
 | 
						|
                    $key,
 | 
						|
                    $part,
 | 
						|
                    $partText,
 | 
						|
                    $param->getTextType(),
 | 
						|
                    $param->getTargetLanguageCode(),
 | 
						|
                    $param->getSourceLanguageCode(),
 | 
						|
                    $param->getDriver(),
 | 
						|
                );
 | 
						|
                $chains[] = new ProcessTranslate($processTranslateDto);
 | 
						|
            }
 | 
						|
            $translated->add($key, count($texts));
 | 
						|
        }
 | 
						|
        $chains[] = new AfterTranslate($groupName, $translated, $this->afterTranslateDto);
 | 
						|
 | 
						|
        Bus::chain($chains)->dispatch();
 | 
						|
    }
 | 
						|
} |