fix(custom-fields) : populate customFields in ModelType structure from relations

getStructure() was returning hardcoded empty customFields arrays after
the JSON-to-tables migration. Now reads from the relational CustomField
entities via serializeCustomFields() for all three categories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-03-13 11:19:42 +01:00
parent 6f1756e82e
commit 8871440c9a

View File

@@ -221,7 +221,7 @@ class ModelType
return match ($this->category) {
ModelCategory::COMPONENT => $this->getComponentStructureFromRelations(),
ModelCategory::PIECE => $this->getPieceStructureFromRelations(),
ModelCategory::PRODUCT => ['customFields' => []],
ModelCategory::PRODUCT => ['customFields' => $this->serializeCustomFields($this->productCustomFields)],
};
}
@@ -344,7 +344,7 @@ class ModelType
private function getComponentStructureFromRelations(): array
{
$structure = ['customFields' => [], 'pieces' => [], 'products' => [], 'subcomponents' => []];
$structure = ['customFields' => $this->serializeCustomFields($this->customFields), 'pieces' => [], 'products' => [], 'subcomponents' => []];
foreach ($this->skeletonPieceRequirements as $req) {
$structure['pieces'][] = [
@@ -373,11 +373,34 @@ class ModelType
private function getPieceStructureFromRelations(): array
{
return [
'customFields' => [],
'customFields' => $this->serializeCustomFields($this->pieceCustomFields),
'products' => array_map(fn (SkeletonProductRequirement $req) => [
'typeProductId' => $req->getTypeProduct()->getId(),
'familyCode' => $req->getFamilyCode(),
], $this->skeletonProductRequirements->toArray()),
];
}
/**
* @param Collection<int, CustomField> $fields
*/
private function serializeCustomFields(Collection $fields): array
{
$items = [];
foreach ($fields as $cf) {
$items[] = [
'id' => $cf->getId(),
'name' => $cf->getName(),
'type' => $cf->getType(),
'required' => $cf->isRequired(),
'options' => $cf->getOptions(),
'defaultValue' => $cf->getDefaultValue(),
'orderIndex' => $cf->getOrderIndex(),
];
}
usort($items, static fn (array $a, array $b) => $a['orderIndex'] <=> $b['orderIndex']);
return $items;
}
}