55 lines
1.9 KiB
PHP
55 lines
1.9 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Services\ProjectTranslationService;
|
|
|
|
use App\Models\Project;
|
|
use App\Dto\Service\Admin\Project\ServiceTranslate\Translations;
|
|
use App\Models\ProjectTranslationService;
|
|
|
|
final readonly class ModelSyncCommand
|
|
{
|
|
public function execute(Project $project, Translations $translations): void
|
|
{
|
|
$insert = [];
|
|
$delete = [];
|
|
|
|
$languages = $project->languages()->with(['serviceTranslate'])->get();
|
|
foreach ($translations->getTranslations() as $translation) {
|
|
/* @var \App\Dto\Service\Admin\Project\ServiceTranslate\Translation $translation */
|
|
$language = $languages->firstWhere('id', '=', $translation->getLanguageId());
|
|
if ($language === null) {
|
|
continue;
|
|
}
|
|
$serviceTranslate = $language->serviceTranslate;
|
|
if ($serviceTranslate === null) {
|
|
if ($translation->getCode() !== null) {
|
|
$insert[] = [
|
|
'language_id' => $translation->getLanguageId(),
|
|
'code' => $translation->getCode(),
|
|
'source_language_id' => $translation->getSourceLanguageId(),
|
|
];
|
|
}
|
|
continue;
|
|
}
|
|
|
|
if ($translation->getCode() === null) {
|
|
$delete[] = [$serviceTranslate->id];
|
|
continue;
|
|
}
|
|
|
|
$serviceTranslate->update([
|
|
'code' => $translation->getCode(),
|
|
'source_language_id' => $translation->getSourceLanguageId(),
|
|
]);
|
|
}
|
|
|
|
if (!empty($insert)) {
|
|
ProjectTranslationService::query()->insert($insert);
|
|
}
|
|
|
|
if (!empty($delete)) {
|
|
ProjectTranslationService::query()->whereIn('id', $delete)->delete();
|
|
}
|
|
}
|
|
}
|