20
20
21
21
use Closure ;
22
22
use CloudCreativity \LaravelJsonApi \Auth \AuthorizesRequests ;
23
+ use CloudCreativity \LaravelJsonApi \Contracts \Queue \AsynchronousProcess ;
23
24
use CloudCreativity \LaravelJsonApi \Contracts \Store \StoreInterface ;
24
25
use CloudCreativity \LaravelJsonApi \Http \Requests \CreateResource ;
25
26
use CloudCreativity \LaravelJsonApi \Http \Requests \DeleteResource ;
33
34
use CloudCreativity \LaravelJsonApi \Http \Requests \UpdateResource ;
34
35
use CloudCreativity \LaravelJsonApi \Http \Requests \ValidatedRequest ;
35
36
use CloudCreativity \LaravelJsonApi \Utils \Str ;
37
+ use Illuminate \Contracts \Support \Responsable ;
36
38
use Illuminate \Http \Response ;
37
39
use Illuminate \Routing \Controller ;
38
40
@@ -71,7 +73,7 @@ public function index(StoreInterface $store, FetchResources $request)
71
73
{
72
74
$ result = $ this ->doSearch ($ store , $ request );
73
75
74
- if ($ result instanceof Response ) {
76
+ if ($ this -> isResponse ( $ result) ) {
75
77
return $ result ;
76
78
}
77
79
@@ -93,7 +95,13 @@ public function read(StoreInterface $store, FetchResource $request)
93
95
$ request ->getParameters ()
94
96
);
95
97
96
- if ($ record && $ result = $ this ->invoke ('reading ' , $ record , $ request )) {
98
+ if (!$ record ) {
99
+ return $ this ->reply ()->content (null );
100
+ }
101
+
102
+ $ result = $ this ->invoke ('reading ' , $ record , $ request );
103
+
104
+ if ($ this ->isResponse ($ result )) {
97
105
return $ result ;
98
106
}
99
107
@@ -113,7 +121,7 @@ public function create(StoreInterface $store, CreateResource $request)
113
121
return $ this ->doCreate ($ store , $ request );
114
122
});
115
123
116
- if ($ record instanceof Response ) {
124
+ if ($ this -> isResponse ( $ record) ) {
117
125
return $ record ;
118
126
}
119
127
@@ -133,7 +141,7 @@ public function update(StoreInterface $store, UpdateResource $request)
133
141
return $ this ->doUpdate ($ store , $ request );
134
142
});
135
143
136
- if ($ record instanceof Response ) {
144
+ if ($ this -> isResponse ( $ record) ) {
137
145
return $ record ;
138
146
}
139
147
@@ -153,7 +161,7 @@ public function delete(StoreInterface $store, DeleteResource $request)
153
161
return $ this ->doDelete ($ store , $ request );
154
162
});
155
163
156
- if ($ result instanceof Response ) {
164
+ if ($ this -> isResponse ( $ result) ) {
157
165
return $ result ;
158
166
}
159
167
@@ -170,8 +178,9 @@ public function delete(StoreInterface $store, DeleteResource $request)
170
178
public function readRelatedResource (StoreInterface $ store , FetchRelated $ request )
171
179
{
172
180
$ record = $ request ->getRecord ();
181
+ $ result = $ this ->beforeReadingRelationship ($ record , $ request );
173
182
174
- if ($ result = $ this ->beforeReadingRelationship ( $ record , $ request )) {
183
+ if ($ this ->isResponse ( $ result )) {
175
184
return $ result ;
176
185
}
177
186
@@ -194,8 +203,9 @@ public function readRelatedResource(StoreInterface $store, FetchRelated $request
194
203
public function readRelationship (StoreInterface $ store , FetchRelationship $ request )
195
204
{
196
205
$ record = $ request ->getRecord ();
206
+ $ result = $ this ->beforeReadingRelationship ($ record , $ request );
197
207
198
- if ($ result = $ this ->beforeReadingRelationship ( $ record , $ request )) {
208
+ if ($ this ->isResponse ( $ result )) {
199
209
return $ result ;
200
210
}
201
211
@@ -221,7 +231,7 @@ public function replaceRelationship(StoreInterface $store, UpdateRelationship $r
221
231
return $ this ->doReplaceRelationship ($ store , $ request );
222
232
});
223
233
224
- if ($ result instanceof Response ) {
234
+ if ($ this -> isResponse ( $ result) ) {
225
235
return $ result ;
226
236
}
227
237
@@ -241,7 +251,7 @@ public function addToRelationship(StoreInterface $store, UpdateRelationship $req
241
251
return $ this ->doAddToRelationship ($ store , $ request );
242
252
});
243
253
244
- if ($ result instanceof Response ) {
254
+ if ($ this -> isResponse ( $ result) ) {
245
255
return $ result ;
246
256
}
247
257
@@ -261,7 +271,7 @@ public function removeFromRelationship(StoreInterface $store, UpdateRelationship
261
271
return $ this ->doRemoveFromRelationship ($ store , $ request );
262
272
});
263
273
264
- if ($ result instanceof Response ) {
274
+ if ($ this -> isResponse ( $ result) ) {
265
275
return $ result ;
266
276
}
267
277
@@ -324,8 +334,8 @@ protected function doSearch(StoreInterface $store, ValidatedRequest $request)
324
334
*
325
335
* @param StoreInterface $store
326
336
* @param ValidatedRequest $request
327
- * @return object|Response
328
- * the created record or a HTTP response.
337
+ * @return mixed
338
+ * the created record, an asynchronous process, or a HTTP response.
329
339
*/
330
340
protected function doCreate (StoreInterface $ store , ValidatedRequest $ request )
331
341
{
@@ -347,14 +357,12 @@ protected function doCreate(StoreInterface $store, ValidatedRequest $request)
347
357
*
348
358
* @param StoreInterface $store
349
359
* @param ValidatedRequest $request
350
- * @return object|Response
351
- * the updated record or a HTTP response.
360
+ * @return mixed
361
+ * the updated record, an asynchronous process, or a HTTP response.
352
362
*/
353
363
protected function doUpdate (StoreInterface $ store , ValidatedRequest $ request )
354
364
{
355
- $ response = $ this ->beforeCommit ($ request );
356
-
357
- if ($ response instanceof Response) {
365
+ if ($ response = $ this ->beforeCommit ($ request )) {
358
366
return $ response ;
359
367
}
360
368
@@ -372,15 +380,14 @@ protected function doUpdate(StoreInterface $store, ValidatedRequest $request)
372
380
*
373
381
* @param StoreInterface $store
374
382
* @param ValidatedRequest $request
375
- * @return Response| mixed|null
376
- * an HTTP response, content to return or null.
383
+ * @return mixed|null
384
+ * an HTTP response, an asynchronous process, content to return, or null.
377
385
*/
378
386
protected function doDelete (StoreInterface $ store , ValidatedRequest $ request )
379
387
{
380
388
$ record = $ request ->getRecord ();
381
- $ response = $ this ->invoke ('deleting ' , $ record , $ request );
382
389
383
- if ($ response instanceof Response ) {
390
+ if ($ response = $ this -> invoke ( ' deleting ' , $ record , $ request ) ) {
384
391
return $ response ;
385
392
}
386
393
@@ -394,7 +401,7 @@ protected function doDelete(StoreInterface $store, ValidatedRequest $request)
394
401
*
395
402
* @param StoreInterface $store
396
403
* @param ValidatedRequest $request
397
- * @return Response|object
404
+ * @return mixed
398
405
*/
399
406
protected function doReplaceRelationship (StoreInterface $ store , ValidatedRequest $ request )
400
407
{
@@ -420,7 +427,7 @@ protected function doReplaceRelationship(StoreInterface $store, ValidatedRequest
420
427
*
421
428
* @param StoreInterface $store
422
429
* @param ValidatedRequest $request
423
- * @return Response|object
430
+ * @return mixed
424
431
*/
425
432
protected function doAddToRelationship (StoreInterface $ store , ValidatedRequest $ request )
426
433
{
@@ -446,7 +453,7 @@ protected function doAddToRelationship(StoreInterface $store, ValidatedRequest $
446
453
*
447
454
* @param StoreInterface $store
448
455
* @param ValidatedRequest $request
449
- * @return Response|object
456
+ * @return mixed
450
457
*/
451
458
protected function doRemoveFromRelationship (StoreInterface $ store , ValidatedRequest $ request )
452
459
{
@@ -482,9 +489,20 @@ protected function transaction(Closure $closure)
482
489
return app ('db ' )->connection ($ this ->connection )->transaction ($ closure );
483
490
}
484
491
492
+ /**
493
+ * Can the controller return the provided value?
494
+ *
495
+ * @param $value
496
+ * @return bool
497
+ */
498
+ protected function isResponse ($ value )
499
+ {
500
+ return $ value instanceof Response || $ value instanceof Responsable;
501
+ }
502
+
485
503
/**
486
504
* @param ValidatedRequest $request
487
- * @return Response |null
505
+ * @return mixed |null
488
506
*/
489
507
private function beforeCommit (ValidatedRequest $ request )
490
508
{
@@ -503,7 +521,7 @@ private function beforeCommit(ValidatedRequest $request)
503
521
* @param ValidatedRequest $request
504
522
* @param $record
505
523
* @param $updating
506
- * @return Response |null
524
+ * @return mixed |null
507
525
*/
508
526
private function afterCommit (ValidatedRequest $ request , $ record , $ updating )
509
527
{
@@ -519,7 +537,7 @@ private function afterCommit(ValidatedRequest $request, $record, $updating)
519
537
/**
520
538
* @param $record
521
539
* @param ValidatedRequest $request
522
- * @return Response |null
540
+ * @return mixed |null
523
541
*/
524
542
private function beforeReadingRelationship ($ record , ValidatedRequest $ request )
525
543
{
@@ -534,33 +552,42 @@ private function beforeReadingRelationship($record, ValidatedRequest $request)
534
552
*
535
553
* @param $method
536
554
* @param mixed ...$arguments
537
- * @return Response |null
555
+ * @return mixed |null
538
556
*/
539
557
private function invoke ($ method , ...$ arguments )
540
558
{
541
- $ response = method_exists ($ this , $ method ) ? $ this ->{$ method }(...$ arguments ) : null ;
559
+ $ result = method_exists ($ this , $ method ) ? $ this ->{$ method }(...$ arguments ) : null ;
542
560
543
- return ( $ response instanceof Response ) ? $ response : null ;
561
+ return $ this -> isInvokedResult ( $ result ) ? $ result : null ;
544
562
}
545
563
546
564
/**
547
565
* Invoke multiple hooks.
548
566
*
549
567
* @param array $method
550
568 * @param mixed ...$arguments
551
- * @return Response |null
569
+ * @return mixed |null
552
570
*/
553
571
private function invokeMany (array $ method , ...$ arguments )
554
572
{
555
573
foreach ($ method as $ hook ) {
556
574
$ result = $ this ->invoke ($ hook , ...$ arguments );
557
575
558
- if ($ result instanceof Response ) {
576
+ if ($ this -> isInvokedResult ( $ result) ) {
559
577
return $ result ;
560
578
}
561
579
}
562
580
563
581
return null ;
564
582
}
565
583
584
+ /**
585
+ * @param $value
586
+ * @return bool
587
+ */
588
+ private function isInvokedResult ($ value )
589
+ {
590
+ return $ value instanceof AsynchronousProcess || $ this ->isResponse ($ value );
591
+ }
592
+
566
593
}
0 commit comments