55namespace PhpList \RestBundle \Controller ;
66
77use OpenApi \Attributes as OA ;
8+ use PhpList \Core \Domain \Model \Subscription \Subscriber ;
89use PhpList \Core \Domain \Repository \Subscription \SubscriberRepository ;
910use PhpList \Core \Security \Authentication ;
1011use PhpList \RestBundle \Controller \Traits \AuthenticationTrait ;
11- use PhpList \RestBundle \Entity \SubscriberRequest ;
12+ use PhpList \RestBundle \Entity \CreateSubscriberRequest ;
13+ use PhpList \RestBundle \Serializer \SubscriberNormalizer ;
1214use PhpList \RestBundle \Service \Manager \SubscriberManager ;
1315use PhpList \RestBundle \Validator \RequestValidator ;
1416use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
@@ -71,28 +73,7 @@ public function __construct(
7173 new OA \Response (
7274 response: 201 ,
7375 description: 'Success ' ,
74- content: new OA \JsonContent (
75- properties: [
76- new OA \Property (
77- property: 'creation_date ' ,
78- type: 'string ' ,
79- format: 'date-time ' ,
80- example: '2017-12-16T18:44:27+00:00 '
81- ),
82- new OA \
Property (property:
'email ' , type:
'string ' , example:
'[email protected] ' ),
83- new OA \Property (property: 'confirmed ' , type: 'boolean ' , example: false ),
84- new OA \Property (property: 'blacklisted ' , type: 'boolean ' , example: false ),
85- new OA \Property (property: 'bounced ' , type: 'integer ' , example: 0 ),
86- new OA \Property (
87- property: 'unique_id ' ,
88- type: 'string ' ,
89- example: '69f4e92cf50eafca9627f35704f030f4 '
90- ),
91- new OA \Property (property: 'html_email ' , type: 'boolean ' , example: false ),
92- new OA \Property (property: 'disabled ' , type: 'boolean ' , example: false ),
93- new OA \Property (property: 'id ' , type: 'integer ' , example: 1 )
94- ]
95- )
76+ content: new OA \JsonContent (ref: '#/components/schemas/Subscriber ' ),
9677 ),
9778 new OA \Response (
9879 response: 403 ,
@@ -138,8 +119,8 @@ public function postAction(
138119 ): JsonResponse {
139120 $ this ->requireAuthentication ($ request );
140121
141- /** @var SubscriberRequest $subscriberRequest */
142- $ subscriberRequest = $ validator ->validate ($ request , SubscriberRequest ::class);
122+ /** @var CreateSubscriberRequest $subscriberRequest */
123+ $ subscriberRequest = $ validator ->validate ($ request , CreateSubscriberRequest ::class);
143124 $ subscriber = $ this ->subscriberManager ->createSubscriber ($ subscriberRequest );
144125
145126 return new JsonResponse (
@@ -176,48 +157,7 @@ public function postAction(
176157 new OA \Response (
177158 response: 200 ,
178159 description: 'Success ' ,
179- content: new OA \JsonContent (
180- properties: [
181- new OA \Property (property: 'id ' , type: 'integer ' , example: 1 ),
182- new OA \
Property (property:
'email ' , type:
'string ' , example:
'[email protected] ' ),
183- new OA \Property (
184- property: 'creation_date ' ,
185- type: 'string ' ,
186- format: 'date-time ' ,
187- example: '2023-01-01T12:00:00Z '
188- ),
189- new OA \Property (property: 'confirmed ' , type: 'boolean ' , example: true ),
190- new OA \Property (property: 'blacklisted ' , type: 'boolean ' , example: false ),
191- new OA \Property (property: 'bounce_count ' , type: 'integer ' , example: 0 ),
192- new OA \Property (property: 'unique_id ' , type: 'string ' , example: 'abc123 ' ),
193- new OA \Property (property: 'html_email ' , type: 'boolean ' , example: true ),
194- new OA \Property (property: 'disabled ' , type: 'boolean ' , example: false ),
195- new OA \Property (
196- property: 'subscribedLists ' ,
197- type: 'array ' ,
198- items: new OA \Items (
199- properties: [
200- new OA \Property (property: 'id ' , type: 'integer ' , example: 2 ),
201- new OA \Property (property: 'name ' , type: 'string ' , example: 'Newsletter ' ),
202- new OA \Property (
203- property: 'description ' ,
204- type: 'string ' ,
205- example: 'Monthly updates '
206- ),
207- new OA \Property (
208- property: 'creation_date ' ,
209- type: 'string ' ,
210- format: 'date-time ' ,
211- example: '2022-12-01T10:00:00Z '
212- ),
213- new OA \Property (property: 'public ' , type: 'boolean ' , example: true ),
214- ],
215- type: 'object '
216- )
217- ),
218- ],
219- type: 'object '
220- )
160+ content: new OA \JsonContent (ref: '#/components/schemas/Subscriber ' ),
221161 ),
222162 new OA \Response (
223163 response: 403 ,
@@ -238,18 +178,20 @@ public function postAction(
238178 )
239179 ]
240180 )]
241- public function getAction (Request $ request , int $ subscriberId , SerializerInterface $ serializer ): JsonResponse
181+ public function getSubscriber (Request $ request , int $ subscriberId , SubscriberNormalizer $ serializer ): JsonResponse
242182 {
243183 $ this ->requireAuthentication ($ request );
244184
245185 $ subscriber = $ this ->subscriberRepository ->findSubscriberWithSubscriptions ($ subscriberId );
246-
247186 if (!$ subscriber ) {
248187 return new JsonResponse (['error ' => 'Subscriber not found ' ], Response::HTTP_NOT_FOUND );
249188 }
250189
251- $ data = $ serializer ->serialize ($ subscriber , 'json ' );
252-
253- return new JsonResponse ($ data , Response::HTTP_OK , [], true );
190+ return new JsonResponse (
191+ $ serializer ->normalize ($ subscriber , 'json ' ),
192+ Response::HTTP_OK ,
193+ [],
194+ false
195+ );
254196 }
255197}
0 commit comments