fix(data-integrity) : prevent data loss in clone, slots, conversion and custom fields

- Clone: CustomFieldValue now references cloned CustomField, not source
- Slots: validate piece type matches slot requirement + 404 on missing piece
- Conversion: check slot tables before allowing category conversion + clean orphan skeleton requirements
- CustomFieldValue: prevent creation of orphan CustomField without target entity

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matthieu
2026-03-23 17:15:05 +01:00
parent d5a43fc9bb
commit 043f6b1ce6
4 changed files with 81 additions and 13 deletions

View File

@@ -43,6 +43,18 @@ class ComposantPieceSlotController extends AbstractController
$slot->setSelectedPiece(null);
} else {
$piece = $this->entityManager->find(Piece::class, $payload['selectedPieceId']);
if (!$piece) {
return $this->json(['success' => false, 'error' => 'Pièce introuvable.'], 404);
}
$slotTypePiece = $slot->getTypePiece();
if ($slotTypePiece && $piece->getTypePiece()?->getId() !== $slotTypePiece->getId()) {
return $this->json([
'success' => false,
'error' => sprintf('La pièce doit être de type « %s ».', $slotTypePiece->getName()),
], 422);
}
$slot->setSelectedPiece($piece);
}
}