diff --git a/src/Controller/ApiController.php b/src/Controller/ApiController.php index 555a7cdc6176ef42feb57e32d859cb37c6250ca1..ce521b8d6a3f0a119994809b6908a82b182d8277 100644 --- a/src/Controller/ApiController.php +++ b/src/Controller/ApiController.php @@ -16,6 +16,8 @@ use App\Entity\Transaction; use App\Entity\User; use Doctrine\Persistence\ManagerRegistry; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\PropertyInfo\Extractor\ReflectionExtractor; +use Symfony\Component\Serializer\Normalizer\AbstractNormalizer; use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer; #[IsGranted('ROLE_USER')] @@ -27,8 +29,10 @@ class ApiController extends AbstractController { $classMetadataFactory = new ClassMetadataFactory(new AnnotationLoader(new AnnotationReader())); + $dateNormalizer = new DateTimeNormalizer([DateTimeNormalizer::FORMAT_KEY => "Y-m-d"]); + $encoders = [new JsonEncoder()]; - $normalizers = [new DateTimeNormalizer([DateTimeNormalizer::FORMAT_KEY => "Y-m-d"]), new ObjectNormalizer($classMetadataFactory)]; + $normalizers = [$dateNormalizer, new ObjectNormalizer($classMetadataFactory, null, null, new ReflectionExtractor())]; $this->serializer = new Serializer($normalizers, $encoders); } @@ -76,6 +80,8 @@ class ApiController extends AbstractController $entityManager->remove($transaction); $entityManager->flush(); + + return new Response(); } #[Route('/api/transaction/{id}', name: 'api_transaction_update', methods: ['PATCH'])] @@ -88,8 +94,14 @@ class ApiController extends AbstractController if (!$user->getTransactions()->contains($transaction)) throw $this->createNotFoundException(); $entityManager = $doctrine->getManager(); - $this->serializer->deserialize($request->getContent(), Transaction::class, "json", ["object_to_populate" => $transaction]); + try { + $transaction = $this->serializer->deserialize($request->getContent(), Transaction::class, "json", [DateTimeNormalizer::FORMAT_KEY => "Y-m-d", "object_to_populate" => $transaction]); + } catch (\Exception $error) { + return new Response($error, 400); + } + + $entityManager->flush(); - $doctrine->getManager()->flush(); + return new Response(); } }