aboutsummaryrefslogtreecommitdiff
path: root/lib/classes/JsonApi/dependencies.php
blob: 78ed85d4c2b0ce877af2121248dec33e50b39f93 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php

namespace JsonApi;

use DI\ContainerBuilder;
use JsonApi\JsonApiIntegration\QueryParser;
use JsonApi\JsonApiIntegration\QueryParserInterface;
use Neomerx\JsonApi\Contracts\Encoder\EncoderInterface;
use Neomerx\JsonApi\Contracts\Factories\FactoryInterface;
use Neomerx\JsonApi\Contracts\Http\Headers\HeaderParametersParserInterface;
use Neomerx\JsonApi\Contracts\Http\Headers\MediaTypeInterface;
use Neomerx\JsonApi\Contracts\Http\ResponsesInterface;
use Neomerx\JsonApi\Contracts\Schema\SchemaContainerInterface;
use Neomerx\JsonApi\Http\Headers\HeaderParametersParser;
use Neomerx\JsonApi\Http\Headers\MediaType;
use Psr\Container\ContainerInterface;

return function (ContainerBuilder $containerBuilder) {
    $containerBuilder->addDefinitions([
        FactoryInterface::class => \DI\create(JsonApiIntegration\Factory::class),

        HeaderParametersParserInterface::class => function (FactoryInterface $factory) {
            return new HeaderParametersParser($factory);
        },

        SchemaContainerInterface::class => function (ContainerInterface $container, FactoryInterface $factory) {
            $schemas = [];
            $user = $container->get('studip-current-user');
            foreach ($container->get('json-api-integration-schemas') as $key => $classname) {
                $schemas[$key] = function ($schemaContainer) use ($classname, $factory, $user) {
                    return new $classname($factory, $schemaContainer, $user);
                };
            }

            return $factory->createSchemaContainer($schemas);
        },

        EncoderInterface::class => function (
            ContainerInterface $container,
            FactoryInterface $factory,
            SchemaContainerInterface $schemaContainer
        ) {
            $urlPrefix = $container->get('json-api-integration-urlPrefix');
            $encoder = $factory->createEncoder($schemaContainer)->withUrlPrefix($urlPrefix);

            return $encoder;
        },

        QueryParserInterface::class => function (ContainerInterface $container) {
            $request = $container->get('request');
            $parameters = $request->getQueryParams();
            $queryParser = new QueryParser($parameters);

            return $queryParser;
        },
    ]);
};