5
5
namespace PhpList \RestBundle \Controller ;
6
6
7
7
use OpenApi \Attributes as OA ;
8
+ use PhpList \Core \Domain \Model \Subscription \Subscriber ;
8
9
use PhpList \Core \Domain \Repository \Subscription \SubscriberRepository ;
9
10
use PhpList \Core \Security \Authentication ;
10
11
use PhpList \RestBundle \Controller \Traits \AuthenticationTrait ;
11
- use PhpList \RestBundle \Entity \SubscriberRequest ;
12
+ use PhpList \RestBundle \Entity \CreateSubscriberRequest ;
13
+ use PhpList \RestBundle \Serializer \SubscriberNormalizer ;
12
14
use PhpList \RestBundle \Service \Manager \SubscriberManager ;
13
15
use PhpList \RestBundle \Validator \RequestValidator ;
14
16
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
@@ -71,28 +73,7 @@ public function __construct(
71
73
new OA \Response (
72
74
response: 201 ,
73
75
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 ' ),
96
77
),
97
78
new OA \Response (
98
79
response: 403 ,
@@ -138,8 +119,8 @@ public function postAction(
138
119
): JsonResponse {
139
120
$ this ->requireAuthentication ($ request );
140
121
141
- /** @var SubscriberRequest $subscriberRequest */
142
- $ subscriberRequest = $ validator ->validate ($ request , SubscriberRequest ::class);
122
+ /** @var CreateSubscriberRequest $subscriberRequest */
123
+ $ subscriberRequest = $ validator ->validate ($ request , CreateSubscriberRequest ::class);
143
124
$ subscriber = $ this ->subscriberManager ->createSubscriber ($ subscriberRequest );
144
125
145
126
return new JsonResponse (
@@ -176,48 +157,7 @@ public function postAction(
176
157
new OA \Response (
177
158
response: 200 ,
178
159
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 ' ),
221
161
),
222
162
new OA \Response (
223
163
response: 403 ,
@@ -238,18 +178,20 @@ public function postAction(
238
178
)
239
179
]
240
180
)]
241
- public function getAction (Request $ request , int $ subscriberId , SerializerInterface $ serializer ): JsonResponse
181
+ public function getSubscriber (Request $ request , int $ subscriberId , SubscriberNormalizer $ serializer ): JsonResponse
242
182
{
243
183
$ this ->requireAuthentication ($ request );
244
184
245
185
$ subscriber = $ this ->subscriberRepository ->findSubscriberWithSubscriptions ($ subscriberId );
246
-
247
186
if (!$ subscriber ) {
248
187
return new JsonResponse (['error ' => 'Subscriber not found ' ], Response::HTTP_NOT_FOUND );
249
188
}
250
189
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
+ );
254
196
}
255
197
}
0 commit comments