Introduced new Data Transfer Objects (DTOs), exceptions, and jobs to enhance the translation service functionality. Updated namespaces for consistency and added rate limiting to the translation provider. Expanded the README with detailed usage instructions.
62 lines
2.3 KiB
PHP
62 lines
2.3 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\Contracts\TranslationCompletedListener;
|
|
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 TranslationCompletedListener $translationCompletedListener,
|
|
) { }
|
|
|
|
/**
|
|
* 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, $this->translationCompletedListener, $translated);
|
|
|
|
Bus::chain($chains)->dispatch();
|
|
}
|
|
} |