Files
Twyco 8b25421e7c
linter / quality (pull_request) Successful in 1m18s
tests / ci (8.4) (pull_request) Successful in 1m28s
Add application API and OpenAPI docs
2026-04-20 13:22:56 +02:00

42 lines
1.2 KiB
PHP

<?php
namespace App\Actions\ProjectTicketMetadata;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
trait ReordersProjectMetadata
{
/**
* @param Collection<int, Model> $models
*/
private function persistOrderedModels(Collection $models): void
{
$temporaryOffset = ((int) $models->max('position')) + $models->count() + 1;
$models->each(function (Model $model, int $index) use ($temporaryOffset): void {
$model->forceFill([
'position' => $temporaryOffset + $index,
])->saveQuietly();
});
$models->each(function (Model $model, int $index): void {
$model->forceFill([
'position' => $index + 1,
])->saveQuietly();
});
}
/**
* @param Collection<int, Model> $existingModels
*/
private function reorderModels(Collection $existingModels, Model $movingModel, int $desiredPosition): void
{
$insertAt = max(0, min($desiredPosition - 1, $existingModels->count()));
$existingModels->splice($insertAt, 0, [$movingModel]);
$this->persistOrderedModels($existingModels->values());
}
}