Issues (3641)

Reader/CompanyBusinessUnitReader.php (1 issue)

1
<?php
2
3
/**
4
 * Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
5
 * Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
6
 */
7
8
namespace Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\Reader;
9
10
use Generated\Shared\Transfer\CompanyBusinessUnitCollectionTransfer;
11
use Generated\Shared\Transfer\CompanyBusinessUnitCriteriaFilterTransfer;
12
use Generated\Shared\Transfer\CompanyBusinessUnitTransfer;
13
use Generated\Shared\Transfer\RestCompanyBusinessUnitAttributesTransfer;
14
use Spryker\Glue\CompanyBusinessUnitsRestApi\CompanyBusinessUnitsRestApiConfig;
15
use Spryker\Glue\CompanyBusinessUnitsRestApi\Dependency\Client\CompanyBusinessUnitsRestApiToCompanyBusinessUnitClientInterface;
16
use Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\Mapper\CompanyBusinessUnitMapperInterface;
17
use Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\RestResponseBuilder\CompanyBusinessUnitRestResponseBuilderInterface;
18
use Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface;
19
use Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface;
20
21
class CompanyBusinessUnitReader implements CompanyBusinessUnitReaderInterface
22
{
23
    /**
24
     * @var \Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\Mapper\CompanyBusinessUnitMapperInterface
25
     */
26
    protected $companyBusinessUnitMapper;
27
28
    /**
29
     * @var \Spryker\Glue\CompanyBusinessUnitsRestApi\Dependency\Client\CompanyBusinessUnitsRestApiToCompanyBusinessUnitClientInterface
30
     */
31
    protected $companyBusinessUnitClient;
32
33
    /**
34
     * @var \Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\RestResponseBuilder\CompanyBusinessUnitRestResponseBuilderInterface
35
     */
36
    protected $companyBusinessUnitRestResponseBuilder;
37
38
    /**
39
     * @param \Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\Mapper\CompanyBusinessUnitMapperInterface $companyBusinessUnitMapperInterface
40
     * @param \Spryker\Glue\CompanyBusinessUnitsRestApi\Dependency\Client\CompanyBusinessUnitsRestApiToCompanyBusinessUnitClientInterface $companyBusinessUnitClient
41
     * @param \Spryker\Glue\CompanyBusinessUnitsRestApi\Processor\CompanyBusinessUnit\RestResponseBuilder\CompanyBusinessUnitRestResponseBuilderInterface $companyBusinessUnitRestResponseBuilder
42
     */
43
    public function __construct(
44
        CompanyBusinessUnitMapperInterface $companyBusinessUnitMapperInterface,
45
        CompanyBusinessUnitsRestApiToCompanyBusinessUnitClientInterface $companyBusinessUnitClient,
46
        CompanyBusinessUnitRestResponseBuilderInterface $companyBusinessUnitRestResponseBuilder
47
    ) {
48
        $this->companyBusinessUnitMapper = $companyBusinessUnitMapperInterface;
49
        $this->companyBusinessUnitClient = $companyBusinessUnitClient;
50
        $this->companyBusinessUnitRestResponseBuilder = $companyBusinessUnitRestResponseBuilder;
51
    }
52
53
    /**
54
     * @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
55
     *
56
     * @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
57
     */
58
    public function getCurrentUserCompanyBusinessUnit(RestRequestInterface $restRequest): RestResponseInterface
59
    {
60
        if ($this->isResourceIdentifierCurrentUser($restRequest->getResource()->getId())) {
0 ignored issues
show
It seems like $restRequest->getResource()->getId() can also be of type null; however, parameter $resourceIdentifier of Spryker\Glue\CompanyBusi...IdentifierCurrentUser() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

60
        if ($this->isResourceIdentifierCurrentUser(/** @scrutinizer ignore-type */ $restRequest->getResource()->getId())) {
Loading history...
61
            return $this->getCurrentUserCompanyBusinessUnits($restRequest);
62
        }
63
64
        return $this->getCurrentUserCompanyBusinessUnitByUuid($restRequest);
65
    }
66
67
    /**
68
     * @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
69
     *
70
     * @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
71
     */
72
    protected function getCurrentUserCompanyBusinessUnits(RestRequestInterface $restRequest): RestResponseInterface
73
    {
74
        if (!$restRequest->getRestUser()->getIdCompany()) {
75
            return $this->companyBusinessUnitRestResponseBuilder->createCompanyUserNotSelectedError();
76
        }
77
78
        $companyBusinessUnitCollection = $this->companyBusinessUnitClient->getCompanyBusinessUnitCollection(
79
            (new CompanyBusinessUnitCriteriaFilterTransfer())->setIdCompanyUser($restRequest->getRestUser()->getIdCompanyUser()),
80
        );
81
82
        if (!$companyBusinessUnitCollection->getCompanyBusinessUnits()->count()) {
83
            return $this->companyBusinessUnitRestResponseBuilder->createCompanyBusinessUnitNotFoundError();
84
        }
85
86
        return $this->createCompanyBusinessUnitCollectionResponse($companyBusinessUnitCollection);
87
    }
88
89
    /**
90
     * @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
91
     *
92
     * @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
93
     */
94
    protected function getCurrentUserCompanyBusinessUnitByUuid(RestRequestInterface $restRequest): RestResponseInterface
95
    {
96
        $companyBusinessUnitResponseTransfer = $this->companyBusinessUnitClient->findCompanyBusinessUnitByUuid(
97
            (new CompanyBusinessUnitTransfer())->setUuid($restRequest->getResource()->getId()),
98
        );
99
100
        if (
101
            !$companyBusinessUnitResponseTransfer->getIsSuccessful()
102
            || !$this->isCurrentCompanyUserInCompany($restRequest, $companyBusinessUnitResponseTransfer->getCompanyBusinessUnitTransfer())
103
        ) {
104
            return $this->companyBusinessUnitRestResponseBuilder->createCompanyBusinessUnitNotFoundError();
105
        }
106
107
        $restCompanyBusinessUnitAttributesTransfer = $this->companyBusinessUnitMapper->mapCompanyBusinessUnitTransferToRestCompanyBusinessUnitAttributesTransfer(
108
            $companyBusinessUnitResponseTransfer->getCompanyBusinessUnitTransfer(),
109
            new RestCompanyBusinessUnitAttributesTransfer(),
110
        );
111
112
        return $this->companyBusinessUnitRestResponseBuilder->createCompanyBusinessUnitRestResponse(
113
            $companyBusinessUnitResponseTransfer->getCompanyBusinessUnitTransfer()->getUuid(),
114
            $restCompanyBusinessUnitAttributesTransfer,
115
            $companyBusinessUnitResponseTransfer->getCompanyBusinessUnitTransfer(),
116
        );
117
    }
118
119
    /**
120
     * @param string $resourceIdentifier
121
     *
122
     * @return bool
123
     */
124
    protected function isResourceIdentifierCurrentUser(string $resourceIdentifier): bool
125
    {
126
        return $resourceIdentifier === CompanyBusinessUnitsRestApiConfig::COLLECTION_IDENTIFIER_CURRENT_USER;
127
    }
128
129
    /**
130
     * @param \Generated\Shared\Transfer\CompanyBusinessUnitCollectionTransfer $companyBusinessUnitCollectionTransfer
131
     *
132
     * @return \Spryker\Glue\GlueApplication\Rest\JsonApi\RestResponseInterface
133
     */
134
    protected function createCompanyBusinessUnitCollectionResponse(
135
        CompanyBusinessUnitCollectionTransfer $companyBusinessUnitCollectionTransfer
136
    ): RestResponseInterface {
137
        $companyBusinessUnitRestResources = [];
138
139
        foreach ($companyBusinessUnitCollectionTransfer->getCompanyBusinessUnits() as $companyBusinessUnitTransfer) {
140
            $restCompanyBusinessUnitAttributesTransfer = $this->companyBusinessUnitMapper->mapCompanyBusinessUnitTransferToRestCompanyBusinessUnitAttributesTransfer(
141
                $companyBusinessUnitTransfer,
142
                new RestCompanyBusinessUnitAttributesTransfer(),
143
            );
144
            $companyBusinessUnitRestResources[] = $this->companyBusinessUnitRestResponseBuilder->createCompanyBusinessUnitRestResource(
145
                $companyBusinessUnitTransfer->getUuid(),
146
                $restCompanyBusinessUnitAttributesTransfer,
147
                $companyBusinessUnitTransfer,
148
            );
149
        }
150
151
        return $this->companyBusinessUnitRestResponseBuilder
152
            ->createCompanyBusinessUnitCollectionRestResponse($companyBusinessUnitRestResources);
153
    }
154
155
    /**
156
     * @param \Spryker\Glue\GlueApplication\Rest\Request\Data\RestRequestInterface $restRequest
157
     * @param \Generated\Shared\Transfer\CompanyBusinessUnitTransfer $companyBusinessUnitTransfer
158
     *
159
     * @return bool
160
     */
161
    protected function isCurrentCompanyUserInCompany(
162
        RestRequestInterface $restRequest,
163
        CompanyBusinessUnitTransfer $companyBusinessUnitTransfer
164
    ): bool {
165
        return $restRequest->getRestUser()
166
            && $restRequest->getRestUser()->getIdCompany()
167
            && $restRequest->getRestUser()->getIdCompany() === $companyBusinessUnitTransfer->getFkCompany();
168
    }
169
}
170