add persisted set ordering

This commit is contained in:
Yisroel Baum 2026-07-31 11:00:41 +03:00
parent fde12ad561
commit dc034bf393
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
9 changed files with 340 additions and 6 deletions

View file

@ -3,6 +3,7 @@
namespace App\Set;
use DomainException;
use Illuminate\Support\Facades\DB;
class EloquentSetRepository implements SetRepository
{
@ -12,6 +13,7 @@ class EloquentSetRepository implements SetRepository
'name' => $dto->name,
'description' => $dto->description,
'icon_image_url' => $dto->iconImageUrl,
'sort_order' => $this->nextSortOrder(),
]);
return $this->toDomain($model);
@ -55,7 +57,7 @@ class EloquentSetRepository implements SetRepository
public function getAll(): array
{
$models = SetModel::orderBy('id')->get();
$models = SetModel::orderBy('sort_order')->orderBy('id')->get();
$sets = [];
foreach ($models as $model) {
$sets[] = $this->toDomain($model);
@ -64,6 +66,30 @@ class EloquentSetRepository implements SetRepository
return $sets;
}
public function reorder(array $setIds): array
{
DB::transaction(function () use ($setIds): void {
$sortOrder = 1;
foreach ($setIds as $setId) {
SetModel::where('id', $setId)
->update(['sort_order' => $sortOrder]);
$sortOrder++;
}
});
return $this->getAll();
}
private function nextSortOrder(): int
{
$currentMaxSortOrder = SetModel::max('sort_order');
if ($currentMaxSortOrder === null) {
return 1;
}
return (int) $currentMaxSortOrder + 1;
}
private function toDomain(SetModel $model): Set
{
return new Set(