Merge branch 'issue378_normalize_requestor' into 'master'

accompanying course: normalize the requestor entity

See merge request Chill-Projet/chill-bundles!329
This commit is contained in:
Julien Fastré 2022-02-11 14:45:32 +00:00
commit 58c8373c81
3 changed files with 17 additions and 12 deletions

View File

@ -11,6 +11,7 @@ and this project adheres to
## Unreleased ## Unreleased
<!-- write down unreleased development here --> <!-- write down unreleased development here -->
* fix normalisation of accompanying course requestor api (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/378)
* [person] add a returnPath when clicking on some Person or ThirdParty badge (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/427) * [person] add a returnPath when clicking on some Person or ThirdParty badge (https://gitlab.com/champs-libres/departement-de-la-vendee/chill/-/issues/427)
* [person] accompanying course work: fix on-the-fly update of thirdParty * [person] accompanying course work: fix on-the-fly update of thirdParty
* [on-the-fly] close modal only after validation * [on-the-fly] close modal only after validation

View File

@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\MainBundle\Serializer\Normalizer; namespace Chill\MainBundle\Serializer\Normalizer;
use LogicException; use LogicException;
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
use Symfony\Component\Serializer\Exception\RuntimeException; use Symfony\Component\Serializer\Exception\RuntimeException;
use Symfony\Component\Serializer\Normalizer\ContextAwareDenormalizerInterface; use Symfony\Component\Serializer\Normalizer\ContextAwareDenormalizerInterface;
use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface; use Symfony\Component\Serializer\Normalizer\DenormalizerAwareInterface;
@ -44,7 +45,7 @@ class DiscriminatedObjectDenormalizer implements ContextAwareDenormalizerInterfa
if ($this->denormalizer->supportsDenormalization($data, $localType, $format)) { if ($this->denormalizer->supportsDenormalization($data, $localType, $format)) {
try { try {
return $this->denormalizer->denormalize($data, $localType, $format, $context); return $this->denormalizer->denormalize($data, $localType, $format, $context);
} catch (RuntimeException $e) { } catch (RuntimeException|NotNormalizableValueException $e) {
$lastException = $e; $lastException = $e;
} }
} }

View File

@ -16,6 +16,7 @@ use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Serializer\Model\Collection; use Chill\MainBundle\Serializer\Model\Collection;
use Chill\MainBundle\Serializer\Model\Counter; use Chill\MainBundle\Serializer\Model\Counter;
use Chill\MainBundle\Serializer\Normalizer\DiscriminatedObjectDenormalizer;
use Chill\PersonBundle\AccompanyingPeriod\Suggestion\ReferralsSuggestionInterface; use Chill\PersonBundle\AccompanyingPeriod\Suggestion\ReferralsSuggestionInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork; use Chill\PersonBundle\Entity\AccompanyingPeriod\AccompanyingPeriodWork;
@ -234,17 +235,19 @@ final class AccompanyingCourseApiController extends ApiController
$requestor = null; $requestor = null;
$exceptions = []; $exceptions = [];
foreach ([Person::class, ThirdParty::class] as $class) {
try { try {
$requestor = $this->getSerializer() $requestor = $this->getSerializer()->deserialize(
->deserialize($request->getContent(), $class, $_format, []); $request->getContent(),
'@multi',
$_format,
[DiscriminatedObjectDenormalizer::ALLOWED_TYPES => [Person::class, ThirdParty::class]]
);
} catch (RuntimeException $e) { } catch (RuntimeException $e) {
$exceptions[] = $e; $exceptions[] = $e;
} }
}
if (null === $requestor) { if (null === $requestor) {
throw new BadRequestException('Could not find any person or requestor', 0, $exceptions[0]); throw new BadRequestException('Could not find any person or thirdparty', 0, null);
} }
$accompanyingPeriod->setRequestor($requestor); $accompanyingPeriod->setRequestor($requestor);