feat(skeleton) : expose skeleton relations via API and create SkeletonStructureService

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-03-12 17:58:18 +01:00
parent 100e24725c
commit e2326064ba
2 changed files with 106 additions and 3 deletions

View File

@@ -271,9 +271,9 @@ class ModelType
public function getStructure(): ?array
{
return match ($this->category) {
ModelCategory::COMPONENT => $this->componentSkeleton,
ModelCategory::PIECE => $this->pieceSkeleton,
ModelCategory::PRODUCT => $this->productSkeleton,
ModelCategory::COMPONENT => $this->getComponentStructureFromRelations(),
ModelCategory::PIECE => $this->getPieceStructureFromRelations(),
ModelCategory::PRODUCT => ['customFields' => []],
};
}
@@ -390,6 +390,45 @@ class ModelType
return $this;
}
private function getComponentStructureFromRelations(): array
{
$structure = ['customFields' => [], 'pieces' => [], 'products' => [], 'subcomponents' => []];
foreach ($this->skeletonPieceRequirements as $req) {
$structure['pieces'][] = [
'typePieceId' => $req->getTypePiece()->getId(),
];
}
foreach ($this->skeletonProductRequirements as $req) {
$structure['products'][] = [
'typeProductId' => $req->getTypeProduct()->getId(),
'familyCode' => $req->getFamilyCode(),
];
}
foreach ($this->skeletonSubcomponentRequirements as $req) {
$structure['subcomponents'][] = [
'alias' => $req->getAlias(),
'familyCode' => $req->getFamilyCode(),
'typeComposantId' => $req->getTypeComposant()?->getId(),
];
}
return $structure;
}
private function getPieceStructureFromRelations(): array
{
return [
'customFields' => [],
'products' => array_map(fn (SkeletonProductRequirement $req) => [
'typeProductId' => $req->getTypeProduct()->getId(),
'familyCode' => $req->getFamilyCode(),
], $this->skeletonProductRequirements->toArray()),
];
}
private function applyStructureForCategory(?array $structure, ModelCategory $category): void
{
if (ModelCategory::COMPONENT === $category) {