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