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 }