9
9
use PhpList \Core \Domain \Repository \Messaging \TemplateRepository ;
10
10
use PhpList \Core \Security \Authentication ;
11
11
use PhpList \RestBundle \Controller \Traits \AuthenticationTrait ;
12
+ use PhpList \RestBundle \Entity \Request \CreateTemplateRequest ;
12
13
use PhpList \RestBundle \Serializer \TemplateNormalizer ;
14
+ use PhpList \RestBundle \Service \Manager \TemplateManager ;
15
+ use PhpList \RestBundle \Validator \RequestValidator ;
13
16
use Symfony \Bridge \Doctrine \Attribute \MapEntity ;
14
17
use Symfony \Bundle \FrameworkBundle \Controller \AbstractController ;
15
18
use Symfony \Component \HttpFoundation \JsonResponse ;
@@ -29,15 +32,21 @@ class TemplateController extends AbstractController
29
32
30
33
private TemplateRepository $ templateRepository ;
31
34
private TemplateNormalizer $ normalizer ;
35
+ private RequestValidator $ validator ;
36
+ private TemplateManager $ templateManager ;
32
37
33
38
public function __construct (
34
39
Authentication $ authentication ,
35
40
TemplateRepository $ templateRepository ,
36
41
TemplateNormalizer $ normalizer ,
42
+ RequestValidator $ validator ,
43
+ TemplateManager $ templateManager
37
44
) {
38
45
$ this ->authentication = $ authentication ;
39
46
$ this ->templateRepository = $ templateRepository ;
40
47
$ this ->normalizer = $ normalizer ;
48
+ $ this ->validator = $ validator ;
49
+ $ this ->templateManager = $ templateManager ;
41
50
}
42
51
43
52
#[Route('' , name: 'get_templates ' , methods: ['GET ' ])]
@@ -130,4 +139,104 @@ public function getTemplate(
130
139
131
140
return new JsonResponse ($ this ->normalizer ->normalize ($ template ), Response::HTTP_OK );
132
141
}
142
+
143
+ #[Route('' , name: 'create_template ' , methods: ['POST ' ])]
144
+ #[OA \Post(
145
+ path: '/templates ' ,
146
+ description: 'Returns a JSON response of created template. ' ,
147
+ summary: 'Create a new template. ' ,
148
+ requestBody: new OA \RequestBody (
149
+ description: 'Pass session credentials ' ,
150
+ required: true ,
151
+ content: new OA \MediaType (
152
+ mediaType: 'multipart/form-data ' ,
153
+ schema: new OA \Schema (
154
+ required: ['title ' ],
155
+ properties: [
156
+ new OA \Property (
157
+ property: 'title ' ,
158
+ type: 'string ' ,
159
+ example: 'Newsletter Template '
160
+ ),
161
+ new OA \Property (
162
+ property: 'content ' ,
163
+ type: 'string ' ,
164
+ example: '<html><body>[CONTENT]</body></html> '
165
+ ),
166
+ new OA \Property (
167
+ property: 'text ' ,
168
+ type: 'string ' ,
169
+ example: '[CONTENT] '
170
+ ),
171
+ new OA \Property (
172
+ property: 'file ' ,
173
+ description: 'Optional file upload for HTML content ' ,
174
+ type: 'string ' ,
175
+ format: 'binary '
176
+ ),
177
+ new OA \Property (
178
+ property: 'check_links ' ,
179
+ description: 'Check that all links have full URLs ' ,
180
+ type: 'boolean ' ,
181
+ example: true
182
+ ),
183
+ new OA \Property (
184
+ property: 'check_images ' ,
185
+ description: 'Check that all images have full URLs ' ,
186
+ type: 'boolean ' ,
187
+ example: false
188
+ ),
189
+ new OA \Property (
190
+ property: 'check_external_images ' ,
191
+ description: 'Check that all external images exist ' ,
192
+ type: 'boolean ' ,
193
+ example: true
194
+ ),
195
+ ],
196
+ type: 'object '
197
+ )
198
+ )
199
+ ),
200
+ tags: ['templates ' ],
201
+ parameters: [
202
+ new OA \Parameter (
203
+ name: 'session ' ,
204
+ description: 'Session ID obtained from authentication ' ,
205
+ in: 'header ' ,
206
+ required: true ,
207
+ schema: new OA \Schema (
208
+ type: 'string '
209
+ )
210
+ )
211
+ ],
212
+ responses: [
213
+ new OA \Response (
214
+ response: 201 ,
215
+ description: 'Success ' ,
216
+ content: new OA \JsonContent (
217
+ type: 'array ' ,
218
+ items: new OA \Items (ref: '#/components/schemas/Template ' )
219
+ )
220
+ ),
221
+ new OA \Response (
222
+ response: 403 ,
223
+ description: 'Failure ' ,
224
+ content: new OA \JsonContent (ref: '#/components/schemas/UnauthorizedResponse ' )
225
+ ),
226
+ new OA \Response (
227
+ response: 422 ,
228
+ description: 'Failure ' ,
229
+ content: new OA \JsonContent (ref: '#/components/schemas/ValidationErrorResponse ' )
230
+ ),
231
+ ]
232
+ )]
233
+ public function createTemplates (Request $ request ): JsonResponse
234
+ {
235
+ $ this ->requireAuthentication ($ request );
236
+
237
+ /** @var CreateTemplateRequest $createTemplateRequest */
238
+ $ createTemplateRequest = $ this ->validator ->validate ($ request , CreateTemplateRequest::class);
239
+
240
+ return new JsonResponse ($ this ->templateManager ->create ($ createTemplateRequest ), Response::HTTP_CREATED );
241
+ }
133
242
}
0 commit comments