From 49da5fe060edbc26d8d47c767860b8afd3185ec8 Mon Sep 17 00:00:00 2001 From: nobohan Date: Thu, 2 Dec 2021 12:00:57 +0100 Subject: [PATCH] person: fix altname denormalisation --- .../ChillPersonBundle/Entity/PersonAltName.php | 3 +++ .../Serializer/Normalizer/PersonJsonNormalizer.php | 12 ++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php b/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php index d233082c4..4fe1e5fca 100644 --- a/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php +++ b/src/Bundle/ChillPersonBundle/Entity/PersonAltName.php @@ -12,6 +12,7 @@ declare(strict_types=1); namespace Chill\PersonBundle\Entity; use Doctrine\ORM\Mapping as ORM; +use Symfony\Component\Serializer\Annotation\Groups; /** * PersonAltName. @@ -34,6 +35,7 @@ class PersonAltName * @var string * * @ORM\Column(name="key", type="string", length=255) + * @Groups({"write"}) */ private $key; @@ -41,6 +43,7 @@ class PersonAltName * @var string * * @ORM\Column(name="label", type="text") + * @Groups({"write"}) */ private $label; diff --git a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php index ea385d149..a9310606d 100644 --- a/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php +++ b/src/Bundle/ChillPersonBundle/Serializer/Normalizer/PersonJsonNormalizer.php @@ -138,10 +138,14 @@ class PersonJsonNormalizer implements case 'altNames': foreach($data[$item] as $altName){ - $object = $this->denormalizer->denormalize($altName, PersonAltName::class, $format, $context); - dump($object); //TODO not working - if ($object instanceof PersonAltName) { - $person->addAltName($object); + $oldAltName = $person->getAltNames()->filter(function (PersonAltName $n) use ($altName) { return $n->getKey() === $altName['key']; })->first(); + if (false === $oldAltName) { + $newAltName = new PersonAltName(); + $newAltName->setKey($altName['key']); + $newAltName->setLabel($altName['label']); + $person->addAltName($newAltName); + } else { + $oldAltName->setLabel($altName['label']); } } break;