schedule explicit set levels
This commit is contained in:
parent
a64df64b76
commit
3cf1aff6a9
10 changed files with 156 additions and 38 deletions
|
|
@ -6,11 +6,13 @@ use App\Element\Element;
|
|||
use App\Element\ElementRepository;
|
||||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\SetRepository;
|
||||
use App\Set\SetLevelRepository;
|
||||
|
||||
class GetSetLayout
|
||||
{
|
||||
public function __construct(
|
||||
private SetRepository $setRepository,
|
||||
private SetLevelRepository $setLevelRepository,
|
||||
private ElementRepository $elementRepository,
|
||||
) {}
|
||||
|
||||
|
|
@ -24,10 +26,15 @@ class GetSetLayout
|
|||
throw new NotFoundException('set not found');
|
||||
}
|
||||
|
||||
$elements = $this->elementRepository->findBySet($set);
|
||||
$elementsByParentId = [];
|
||||
foreach ($this->elementRepository->findBySet($set) as $element) {
|
||||
$elementCountsByLevelId = [];
|
||||
foreach ($elements as $element) {
|
||||
$parentId = $element->getParentElement()?->getId() ?? 0;
|
||||
$elementsByParentId[$parentId][] = $element;
|
||||
$levelId = $element->getLevel()->getId();
|
||||
$elementCountsByLevelId[$levelId]
|
||||
= ($elementCountsByLevelId[$levelId] ?? 0) + 1;
|
||||
}
|
||||
|
||||
foreach ($elementsByParentId as &$siblings) {
|
||||
|
|
@ -46,8 +53,17 @@ class GetSetLayout
|
|||
}
|
||||
unset($siblings);
|
||||
|
||||
$layoutLevels = [];
|
||||
foreach ($this->setLevelRepository->findBySet($set) as $level) {
|
||||
$layoutLevels[] = new SetLayoutLevel(
|
||||
level: $level,
|
||||
elementCount: $elementCountsByLevelId[$level->getId()] ?? 0,
|
||||
);
|
||||
}
|
||||
|
||||
return new SetLayout(
|
||||
set: $set,
|
||||
levels: $layoutLevels,
|
||||
elements: $this->buildNodes(0, $elementsByParentId),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,10 +7,12 @@ use App\Set\Set;
|
|||
final readonly class SetLayout
|
||||
{
|
||||
/**
|
||||
* @param list<SetLayoutLevel> $levels
|
||||
* @param list<ElementLayoutNode> $elements
|
||||
*/
|
||||
public function __construct(
|
||||
private Set $set,
|
||||
private array $levels,
|
||||
private array $elements,
|
||||
) {}
|
||||
|
||||
|
|
@ -19,6 +21,14 @@ final readonly class SetLayout
|
|||
return $this->set;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<SetLayoutLevel>
|
||||
*/
|
||||
public function getLevels(): array
|
||||
{
|
||||
return $this->levels;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<ElementLayoutNode>
|
||||
*/
|
||||
|
|
|
|||
23
backend/app/Set/UseCases/GetSetLayout/SetLayoutLevel.php
Normal file
23
backend/app/Set/UseCases/GetSetLayout/SetLayoutLevel.php
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace App\Set\UseCases\GetSetLayout;
|
||||
|
||||
use App\Set\SetLevel;
|
||||
|
||||
final readonly class SetLayoutLevel
|
||||
{
|
||||
public function __construct(
|
||||
private SetLevel $level,
|
||||
private int $elementCount,
|
||||
) {}
|
||||
|
||||
public function getLevel(): SetLevel
|
||||
{
|
||||
return $this->level;
|
||||
}
|
||||
|
||||
public function getElementCount(): int
|
||||
{
|
||||
return $this->elementCount;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue