29 lines
985 B
PHP
29 lines
985 B
PHP
<?php
|
|
|
|
namespace Modules\Builder\Services;
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Modules\Builder\Models\BuilderDocument;
|
|
|
|
final class BuilderDocumentService
|
|
{
|
|
public function save(BuilderDocument $document, array $payload, ?int $userId = null): BuilderDocument
|
|
{
|
|
return DB::transaction(function () use ($document, $payload, $userId) {
|
|
if ($document->exists && $document->isDirty()) {
|
|
$document->versions()->create(['version' => $document->version, 'document' => $document->getOriginal('document') ?: [], 'settings' => $document->getOriginal('settings') ?: [], 'created_by' => $userId]);
|
|
}
|
|
$document->fill($payload);
|
|
$document->updated_by = $userId;
|
|
if (! $document->exists) {
|
|
$document->created_by = $userId;
|
|
} else {
|
|
$document->version++;
|
|
}
|
|
$document->save();
|
|
|
|
return $document->refresh();
|
|
});
|
|
}
|
|
}
|