Passed
Push — master ( eafe59...1cfa18 )
by Siim
13:22
created

AbstractResponse::getRepository()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 9
nc 3
nop 1
dl 0
loc 15
rs 9.9666
c 0
b 0
f 0
1
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: siim
5
 * Date: 17.01.19
6
 * Time: 9:19
7
 */
8
9
namespace Sf4\Api\Response;
10
11
use Sf4\Api\Dto\DtoTrait;
12
use Sf4\Api\Repository\AbstractRepository;
13
use Sf4\Api\Request\RequestTrait;
14
use Symfony\Component\HttpFoundation\JsonResponse;
15
16
abstract class AbstractResponse implements ResponseInterface
17
{
18
19
    use DtoTrait;
20
    use RequestTrait;
21
22
    /** @var array $responseData */
23
    protected $responseData;
24
25
    /** @var int $responseStatus */
26
    protected $responseStatus;
27
28
    /** @var array $responseHeaders */
29
    protected $responseHeaders;
30
31
    public function __construct()
32
    {
33
        $this->createJsonResponse([], 200, static::HEADERS);
34
    }
35
36
    /**
37
     * @param array $data
38
     * @param int $status
39
     * @param array $headers
40
     */
41
    protected function createJsonResponse(array $data, int $status = 200, array $headers = self::HEADERS)
42
    {
43
        $this->setResponseData($data);
44
        $this->setResponseStatus($status);
45
        $this->setResponseHeaders($headers);
46
    }
47
48
    public abstract function init();
49
50
    /**
51
     * @return JsonResponse
52
     */
53
    public function getJsonResponse(): JsonResponse
54
    {
55
        $response = new JsonResponse(
56
            $this->getResponseData(),
57
            $this->getResponseStatus(),
58
            $this->getResponseHeaders()
59
        );
60
        $request = $this->getRequest()->getRequest();
61
        $response->headers->set(
62
            'Access-Control-Allow-Origin',
63
            $request->headers->get('Origin')
64
        );
65
        return $response;
66
    }
67
68
    /**
69
     * @return array
70
     */
71
    public function getResponseData(): array
72
    {
73
        return $this->responseData;
74
    }
75
76
    /**
77
     * @param array $responseData
78
     */
79
    public function setResponseData(array $responseData): void
80
    {
81
        $this->responseData = $responseData;
82
    }
83
84
    /**
85
     * @return int
86
     */
87
    public function getResponseStatus(): int
88
    {
89
        return $this->responseStatus;
90
    }
91
92
    /**
93
     * @param int $responseStatus
94
     */
95
    public function setResponseStatus($responseStatus): void
96
    {
97
        $this->responseStatus = $responseStatus;
98
    }
99
100
    /**
101
     * @return array
102
     */
103
    public function getResponseHeaders(): array
104
    {
105
        return $this->responseHeaders;
106
    }
107
108
    /**
109
     * @param array $responseHeaders
110
     */
111
    public function setResponseHeaders(array $responseHeaders): void
112
    {
113
        $this->responseHeaders = $responseHeaders;
114
    }
115
116
    /**
117
     * @param string $entityClass
118
     * @return AbstractRepository|null
119
     */
120
    public function getRepository(string $entityClass): ?AbstractRepository
121
    {
122
        $request = $this->getRequest();
123
        if(!$request) {
124
            return null;
125
        }
126
        $requestHandler = $request->getRequestHandler();
127
        $manager = $requestHandler->getEntityManager();
128
129
        $repository = $manager->getRepository($entityClass);
130
        if($repository instanceof AbstractRepository) {
131
            return $repository;
132
        }
133
134
        return null;
135
    }
136
}
137