add ordered element queries

This commit is contained in:
Yisroel Baum 2026-08-08 22:24:02 +03:00
parent 88c8a018ad
commit 503d868e29
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
3 changed files with 115 additions and 0 deletions

View file

@ -45,6 +45,48 @@ class EloquentElementRepository implements ElementRepository
return $model === null ? null : $this->toDomain($model);
}
public function findTopLevelBySet(Set $set): array
{
$models = ElementModel::query()
->where('set_id', $set->getId())
->whereNull('parent_element_id')
->orderBy('position')
->orderBy('id')
->get();
$elements = [];
foreach ($models as $model) {
$elements[] = $this->toDomainWithRelations(
model: $model,
set: $set,
parentElement: null,
);
}
return $elements;
}
public function findByParentElement(Element $parentElement): array
{
$models = ElementModel::query()
->where('set_id', $parentElement->getSet()->getId())
->where('parent_element_id', $parentElement->getId())
->orderBy('position')
->orderBy('id')
->get();
$elements = [];
foreach ($models as $model) {
$elements[] = $this->toDomainWithRelations(
model: $model,
set: $parentElement->getSet(),
parentElement: $parentElement,
);
}
return $elements;
}
/**
* @throws DomainException
*/
@ -94,6 +136,18 @@ class EloquentElementRepository implements ElementRepository
}
}
return $this->toDomainWithRelations(
model: $model,
set: $set,
parentElement: $parentElement,
);
}
private function toDomainWithRelations(
ElementModel $model,
Set $set,
?Element $parentElement,
): Element {
return new Element(
id: $model->id,
name: $model->name,