44
55namespace PhpList \RestBundle \Controller ;
66
7- use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
8- use FOS \RestBundle \View \View ;
97use PhpList \Core \Domain \Model \Messaging \SubscriberList ;
8+ use PhpList \Core \Domain \Repository \Subscription \SubscriberRepository ;
9+ use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
1010use PhpList \Core \Domain \Repository \Messaging \SubscriberListRepository ;
1111use PhpList \Core \Security \Authentication ;
1212use PhpList \RestBundle \Controller \Traits \AuthenticationTrait ;
13+ use Symfony \Component \HttpFoundation \JsonResponse ;
1314use Symfony \Component \HttpFoundation \Request ;
15+ use Symfony \Component \HttpFoundation \Response ;
16+ use Symfony \Component \Routing \Attribute \Route ;
17+ use Symfony \Component \Serializer \Normalizer \AbstractNormalizer ;
18+ use Symfony \Component \Serializer \SerializerInterface ;
1419
1520/**
1621 * This controller provides REST API access to subscriber lists.
@@ -22,94 +27,81 @@ class ListController extends AbstractController
2227{
2328 use AuthenticationTrait;
2429
25- /**
26- * @var SubscriberListRepository
27- */
2830 private SubscriberListRepository $ subscriberListRepository ;
31+ private SubscriberRepository $ subscriberRepository ;
32+ private SerializerInterface $ serializer ;
2933
3034 /**
3135 * @param Authentication $authentication
3236 * @param SubscriberListRepository $repository
37+ * @param SubscriberRepository $subscriberRepository
38+ * @param SerializerInterface $serializer
3339 */
34- public function __construct (Authentication $ authentication , SubscriberListRepository $ repository )
35- {
40+ public function __construct (
41+ Authentication $ authentication ,
42+ SubscriberListRepository $ repository ,
43+ SubscriberRepository $ subscriberRepository ,
44+ SerializerInterface $ serializer
45+ ) {
3646 $ this ->authentication = $ authentication ;
3747 $ this ->subscriberListRepository = $ repository ;
48+ $ this ->subscriberRepository = $ subscriberRepository ;
49+ $ this ->serializer = $ serializer ;
3850 }
3951
40- /**
41- * Gets a list of all subscriber lists.
42- *
43- * @param Request $request
44- *
45- * @return View
46- */
47- public function cgetAction (Request $ request ): View
52+ #[Route('/lists ' , name: 'get_lists ' , methods: ['GET ' ])]
53+ public function getLists (Request $ request ): JsonResponse
4854 {
4955 $ this ->requireAuthentication ($ request );
56+ $ data = $ this ->subscriberListRepository ->findAll ();
57+ $ json = $ this ->serializer ->serialize ($ data , 'json ' , [
58+ AbstractNormalizer::GROUPS => 'SubscriberList ' ,
59+ ]);
5060
51- return View:: create ()-> setData ( $ this -> subscriberListRepository -> findAll () );
61+ return new JsonResponse ( $ json , Response:: HTTP_OK , [], true );
5262 }
5363
54- /**
55- * Gets a subscriber list.
56- *
57- * @param Request $request
58- * @param SubscriberList $list
59- *
60- * @return View
61- */
62- public function getAction (Request $ request , SubscriberList $ list ): View
64+ #[Route('/lists/{id} ' , name: 'get_list ' , methods: ['GET ' ])]
65+ public function getList (Request $ request , SubscriberList $ list ): JsonResponse
6366 {
6467 $ this ->requireAuthentication ($ request );
68+ $ json = $ this ->serializer ->serialize ($ list , 'json ' , [
69+ AbstractNormalizer::GROUPS => 'SubscriberList ' ,
70+ ]);
6571
66- return View:: create ()-> setData ( $ list );
72+ return new JsonResponse ( $ json , Response:: HTTP_OK , [], true );
6773 }
6874
69- /**
70- * Deletes a subscriber list.
71- *
72- * @param Request $request
73- * @param SubscriberList $list
74- *
75- * @return View
76- */
77- public function deleteAction (Request $ request , SubscriberList $ list ): View
75+ #[Route('/lists/{id} ' , name: 'delete_list ' , methods: ['DELETE ' ])]
76+ public function deleteList (Request $ request , SubscriberList $ list ): JsonResponse
7877 {
7978 $ this ->requireAuthentication ($ request );
8079
8180 $ this ->subscriberListRepository ->remove ($ list );
8281
83- return View:: create ( );
82+ return new JsonResponse ( null , Response:: HTTP_OK , [], true );
8483 }
8584
86- /**
87- * Gets a list of all subscribers (members) of a subscriber list.
88- *
89- * @param Request $request
90- * @param SubscriberList $list
91- *
92- * @return View
93- */
94- public function getMembersAction (Request $ request , SubscriberList $ list ): View
85+ #[Route('/lists/{id}/members ' , name: 'get_subscriber_from_list ' , methods: ['GET ' ])]
86+ public function getListMembers (Request $ request , SubscriberList $ list ): JsonResponse
9587 {
9688 $ this ->requireAuthentication ($ request );
9789
98- return View::create ()->setData ($ list ->getSubscribers ());
90+ $ subscribers = $ this ->subscriberRepository ->findSubscribersBySubscribedList ($ list ->getId ());
91+
92+ $ json = $ this ->serializer ->serialize ($ subscribers , 'json ' , [
93+ AbstractNormalizer::GROUPS => 'SubscriberListMembers ' ,
94+ ]);
95+
96+ return new JsonResponse ($ json , Response::HTTP_OK , [], true );
9997 }
10098
101- /**
102- * Gets the total number of subscribers of a list.
103- *
104- * @param Request $request
105- * @param SubscriberList $list
106- *
107- * @return View
108- */
109- public function getSubscribersCountAction (Request $ request , SubscriberList $ list ): View
99+ #[Route('/lists/{id}/count ' , name: 'get_subscribers_count_from_list ' , methods: ['GET ' ])]
100+ public function getSubscribersCount (Request $ request , SubscriberList $ list ): JsonResponse
110101 {
111102 $ this ->requireAuthentication ($ request );
103+ $ json = $ this ->serializer ->serialize (count ($ list ->getSubscribers ()), 'json ' );
112104
113- return View:: create ()-> setData ( count ( $ list -> getSubscribers ()) );
105+ return new JsonResponse ( $ json , Response:: HTTP_OK , [], true );
114106 }
115107}
0 commit comments