partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

GetPreferencesAction.php (1917B)


      1 <?php
      2 
      3 namespace PartKeepr\AuthBundle\Action;
      4 
      5 use Dunglas\ApiBundle\Action\ActionUtilTrait;
      6 use Dunglas\ApiBundle\Api\ResourceInterface;
      7 use Dunglas\ApiBundle\Exception\RuntimeException;
      8 use PartKeepr\AuthBundle\Services\UserPreferenceService;
      9 use PartKeepr\AuthBundle\Services\UserService;
     10 use PartKeepr\CategoryBundle\Exception\RootNodeNotFoundException;
     11 use Symfony\Component\HttpFoundation\JsonResponse;
     12 use Symfony\Component\HttpFoundation\Request;
     13 use Symfony\Component\Serializer\Serializer;
     14 
     15 /**
     16  * Returns the tree root node.
     17  */
     18 class GetPreferencesAction
     19 {
     20     use ActionUtilTrait;
     21 
     22     /**
     23      * @var UserService
     24      */
     25     private $userService;
     26 
     27     /**
     28      * @var UserPreferenceService
     29      */
     30     private $userPreferenceService;
     31 
     32     /**
     33      * @var Serializer
     34      */
     35     private $serializer;
     36 
     37     public function __construct(
     38         UserService $userService,
     39         UserPreferenceService $userPreferenceService,
     40         Serializer $serializer
     41     ) {
     42         $this->userService = $userService;
     43         $this->userPreferenceService = $userPreferenceService;
     44         $this->serializer = $serializer;
     45     }
     46 
     47     /**
     48      * Retrieves a collection of resources.
     49      *
     50      * @param Request $request
     51      *
     52      * @throws RuntimeException|RootNodeNotFoundException
     53      *
     54      * @return array|\Dunglas\ApiBundle\Model\PaginatorInterface|\Traversable
     55      */
     56     public function __invoke(Request $request)
     57     {
     58         $user = $this->userService->getUser();
     59 
     60         $preferences = $this->userPreferenceService->getPreferences($user);
     61 
     62         list($resourceType) = $this->extractAttributes($request);
     63 
     64         /*
     65          * @var ResourceInterface $resourceType
     66          */
     67         $serializedData = $this->serializer->normalize(
     68             $preferences,
     69             'json',
     70             $resourceType->getNormalizationContext()
     71         );
     72 
     73         return new JsonResponse($serializedData);
     74     }
     75 }