5
5
namespace Flat3 \Lodata ;
6
6
7
7
use ArrayAccess ;
8
+ use Flat3 \Lodata \Controller \Response ;
8
9
use Flat3 \Lodata \Controller \Transaction ;
9
10
use Flat3 \Lodata \Exception \Protocol \BadRequestException ;
10
11
use Flat3 \Lodata \Facades \Lodata ;
11
12
use Flat3 \Lodata \Helper \ETag ;
12
13
use Flat3 \Lodata \Helper \PropertyValue ;
13
14
use Flat3 \Lodata \Helper \PropertyValues ;
15
+ use Flat3 \Lodata \Interfaces \ContextInterface ;
14
16
use Flat3 \Lodata \Interfaces \JsonInterface ;
17
+ use Flat3 \Lodata \Interfaces \PipeInterface ;
15
18
use Flat3 \Lodata \Interfaces \ReferenceInterface ;
19
+ use Flat3 \Lodata \Interfaces \ResourceInterface ;
20
+ use Flat3 \Lodata \Interfaces \ResponseInterface ;
16
21
use Flat3 \Lodata \Interfaces \SerializeInterface ;
17
22
use Flat3 \Lodata \Traits \HasTransaction ;
18
23
use Flat3 \Lodata \Traits \UseReferences ;
19
24
use Flat3 \Lodata \Transaction \MetadataContainer ;
20
25
use Flat3 \Lodata \Transaction \NavigationRequest ;
21
26
use Flat3 \Lodata \Type \Untyped ;
22
27
use Illuminate \Contracts \Support \Arrayable ;
28
+ use Illuminate \Http \Request ;
23
29
use Illuminate \Support \Str ;
24
30
25
- class ComplexValue implements ArrayAccess, Arrayable, JsonInterface, ReferenceInterface, SerializeInterface
31
+ class ComplexValue implements ArrayAccess, Arrayable, JsonInterface, ReferenceInterface, SerializeInterface, ResourceInterface, ResponseInterface, ContextInterface, PipeInterface
26
32
{
27
33
use UseReferences;
28
34
use HasTransaction;
@@ -418,4 +424,43 @@ public function getOpenAPISchema(): array
418
424
{
419
425
return $ this ->getType ()->getOpenAPISchema ();
420
426
}
421
- }
427
+
428
+ public function getContextUrl (Transaction $ transaction ): string
429
+ {
430
+ return $ this ->getType ()->getContextUrl ($ transaction );
431
+ }
432
+
433
+ public static function pipe (
434
+ Transaction $ transaction ,
435
+ string $ currentSegment ,
436
+ ?string $ nextSegment ,
437
+ ?PipeInterface $ argument
438
+ ): ?PipeInterface {
439
+ return null ;
440
+ }
441
+
442
+ public function getResourceUrl (Transaction $ transaction ): string
443
+ {
444
+ return $ this ->getType ()->getResourceUrl ($ transaction );
445
+ }
446
+
447
+ public function response (Transaction $ transaction , ?ContextInterface $ context = null ): Response
448
+ {
449
+ if ($ this ->transaction ) {
450
+ $ transaction = $ this ->transaction ->replaceQueryParams ($ transaction );
451
+ }
452
+
453
+ $ transaction ->assertMethod (Request::METHOD_GET );
454
+
455
+ $ context = $ context ?: $ this ;
456
+
457
+ $ this ->metadata = $ transaction ->createMetadataContainer ();
458
+ $ this ->metadata ['context ' ] = $ context ->getContextUrl ($ transaction );
459
+
460
+ $ response = $ transaction ->getResponse ();
461
+
462
+ return $ response ->setResourceCallback ($ this , function () use ($ transaction ) {
463
+ $ this ->emitJson ($ transaction );
464
+ });
465
+ }
466
+ }
0 commit comments