From 4bd70f0fc7b515af0d2aaa1a4bbaaa295323f6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Touz=C3=A9?= Date: Sun, 26 Apr 2020 13:04:29 +0200 Subject: [PATCH] Fix serialization with JMS Serializer for remainitn controllers anc methods. --- src/Controller/CommentController.php | 20 +++-- src/Controller/PollController.php | 56 ++++++------ src/Controller/VoteController.php | 129 +++++++++++++++------------ 3 files changed, 114 insertions(+), 91 deletions(-) diff --git a/src/Controller/CommentController.php b/src/Controller/CommentController.php index 9a5c690..18765d3 100644 --- a/src/Controller/CommentController.php +++ b/src/Controller/CommentController.php @@ -11,8 +11,10 @@ use FOS\RestBundle\Controller\Annotations\Get; use FOS\RestBundle\Controller\Annotations\Post; use FOS\RestBundle\Controller\Annotations\Route; use JMS\Serializer\SerializerBuilder; +use JMS\Serializer\SerializerInterface; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; /** * Class DefaultController @@ -30,13 +32,19 @@ class CommentController extends FramadateController { */ public function getPollCommentsAction( - Poll $poll + SerializerInterface $serializer, + Poll $poll ) { - return $this->json( [ - 'message' => 'here are your comments of the poll', - 'data' => $poll->getComments(), - ], - 200 ); + $jsonResponse = $serializer->serialize([ + 'message' => 'here are your comments of the poll', + 'data' => $poll->getComments()], 'json'); + + $response = new Response($jsonResponse); + $response->headers->set('Content-Type', 'application/json'); + $response->setStatusCode(200); + + return $response; + } /** diff --git a/src/Controller/PollController.php b/src/Controller/PollController.php index baa1d60..31ff4a3 100644 --- a/src/Controller/PollController.php +++ b/src/Controller/PollController.php @@ -50,6 +50,7 @@ class PollController extends FramadateController { * @param SerializerInterface $serializer * @param Poll $poll * @param Request $request + * * @return JsonResponse|Response */ public function getPollConfig( @@ -102,8 +103,7 @@ class PollController extends FramadateController { * requirements = {"content"="\w+", "poll_id"="\d+"} * ) */ - public - function updatePollConfig( + public function updatePollConfig( Poll $poll, string $token, Request $request @@ -211,7 +211,7 @@ class PollController extends FramadateController { // different hours spans $choices = $data[ 'dateList' ]; } else { - +//TODO (Sébastien) I assume this shouldn't be empty ? // all days have the same hour spans } @@ -350,46 +350,46 @@ class PollController extends FramadateController { } - - /** - * Get Admin poll config - * @Get( - * path = "/admin/{token}", - * name = "get_admin_config", - * ) - */ - public function getAdministrationConfig( $token ) { + /** + * Get Admin poll config + * @Get( + * path = "/admin/{token}", + * name = "get_admin_config", + * ) + * @param SerializerInterface $serializer + * @param $token + * + * @return JsonResponse|Response + */ + public function getAdministrationConfig(SerializerInterface $serializer, $token ) { $emPoll = $this->getDoctrine()->getRepository( Poll::class ); $pollFound = $emPoll->findOneByAdminKey( $token ); + if ( $pollFound ) { $poll = $pollFound; - $comments = []; - $stacks = []; - $choices = []; - foreach ( $poll->getComments() as $c ) { - $comments[] = $c->display(); - } - foreach ( $poll->getStacksOfVotes() as $c ) { - $stacks[] = $c->display(); - } - foreach ( $poll->getChoices() as $c ) { - $choices[] = $c->display(); - } + $comments = $poll->getComments(); + $stacks = $poll->getStacksOfVotes(); + $returnedPoll = [ 'message' => 'your poll config', 'poll' => $poll, - 'stacks_count' => count( $poll->getStacksOfVotes() ), + 'stacks_count' => count( $stacks ), 'stacks' => $stacks, 'choices_count' => $poll->computeAnswers(), - 'choices' => $choices, + 'choices' => $poll->getChoices(), 'comments' => $comments, 'comments_count' => count( $comments ), 'token' => $token, ]; - return $this->json( $returnedPoll, - 200 ); + $jsonResponse = $serializer->serialize($returnedPoll, 'json'); + + $response = new Response($jsonResponse); + $response->headers->set('Content-Type', 'application/json'); + $response->setStatusCode(200); + + return $response; } return $this->json( [ diff --git a/src/Controller/VoteController.php b/src/Controller/VoteController.php index 41fb41d..1b4687e 100644 --- a/src/Controller/VoteController.php +++ b/src/Controller/VoteController.php @@ -11,8 +11,10 @@ use FOS\RestBundle\Controller\Annotations\Delete; use FOS\RestBundle\Controller\Annotations\Patch; use FOS\RestBundle\Controller\Annotations\Post; use FOS\RestBundle\Controller\Annotations\Route; +use JMS\Serializer\SerializerInterface; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\Response; /** * Class DefaultController @@ -21,18 +23,23 @@ use Symfony\Component\HttpFoundation\Request; */ class VoteController extends FramadateController { - /** - * add a vote stack on a poll - * @Post( - * path = "/poll/{id}/vote", - * name = "new_vote_stack", - * requirements = {"content"="\w+", "poll_id"="\d+"} - * ) - */ - public - function newVoteStackAction( - Poll $poll, - Request $request + /** + * add a vote stack on a poll + * @Post( + * path = "/poll/{id}/vote", + * name = "new_vote_stack", + * requirements = {"content"="\w+", "poll_id"="\d+"} + * ) + * @param SerializerInterface $serializer + * @param Poll $poll + * @param Request $request + * + * @return JsonResponse|Response + */ + public function newVoteStackAction( + SerializerInterface $serializer, + Poll $poll, + Request $request ) { if ( ! $poll ) { return $this->json( [ 'message' => 'poll not found' ], 404 ); @@ -106,55 +113,57 @@ class VoteController extends FramadateController { if ( $existingOwner ) { $precision = ' from an existing owner : ' . $foundOwner->getEmail(); } - $comments = []; - $stacks = []; - $choices = []; - foreach ( $poll->getComments() as $c ) { - $comments[] = $c->display(); - } - foreach ( $poll->getStacksOfVotes() as $c ) { - $stacks[] = $c->display(); - } - foreach ( $poll->getChoices() as $c ) { - $choices[] = $c->display(); - } - + $stacks = $poll->getStacksOfVotes(); if($poll->getMailOnVote()){ $this->sendVoteNotificationAction($stack->getOwner(), $stack); } + $returnedVoteStack = [ + 'message' => 'you created a vote stack' . $precision, + 'poll' => $poll, + 'vote_stack' => $stack, + 'stacks' => $stacks, + 'comments' => $poll->getComments(), + 'choices' => $poll->getChoices(), + 'choices_count' => $poll->computeAnswers(), + 'vote_count' => count( $stacks ), + 'owner' => $stack->getOwner(), + 'owner_modifier_token' => $stack->getOwner()->getModifierToken(), + 'admin_key' => $poll->getAdminKey(), + 'json_you_sent' => $data, + ]; + + $jsonResponse = $serializer->serialize($returnedVoteStack, 'json'); + + $response = new Response($jsonResponse); + $response->headers->set('Content-Type', 'application/json'); + $response->setStatusCode(200); + + return $response; - return $this->json( [ - 'message' => 'you created a vote stack' . $precision, - 'poll' => $poll, - 'vote_stack' => $stack->display(), - 'stacks' => $stacks, - 'comments' => $comments, - 'choices' => $choices, - 'choices_count' => $poll->computeAnswers(), - 'vote_count' => count( $poll->getStacksOfVotes() ), - 'owner' => $stack->getOwner(), - 'owner_modifier_token' => $stack->getOwner()->getModifierToken(), - 'admin_key' => $poll->getAdminKey(), - 'json_you_sent' => $data, - ], - 201 ); } - /** - * update vote stack - * @Patch( - * path = "/vote-stack/{id}/token/{modifierToken}", - * name = "update_vote_stack", - * requirements = { "id"="\d+"} - * ) - */ + /** + * update vote stack + * @Patch( + * path = "/vote-stack/{id}/token/{modifierToken}", + * name = "update_vote_stack", + * requirements = { "id"="\d+"} + * ) + * @param SerializerInterface $serializer + * @param StackOfVotes $id + * @param $modifierToken + * @param Request $request + * + * @return JsonResponse|Response + */ public function updateVoteStackAction( - StackOfVotes $id, - $modifierToken, - Request $request + SerializerInterface $serializer, + StackOfVotes $id, + $modifierToken, + Request $request ) { $voteStack = $id; if ( ! $voteStack ) { @@ -173,12 +182,18 @@ class VoteController extends FramadateController { // update answers // save evrything - return $this->json( [ - 'message' => 'ok', - 'modifier_token' => $voteStack->getOwner()->getModifierToken(), - 'vote_stack' => $voteStack->display(), - ], - 200 ); + + $jsonResponse = $serializer->serialize([ + 'message' => 'ok', + 'modifier_token' => $voteStack->getOwner()->getModifierToken(), + 'vote_stack' => $voteStack, + ], 'json'); + + $response = new Response($jsonResponse); + $response->headers->set('Content-Type', 'application/json'); + $response->setStatusCode(200); + + return $response; }