Passed
Push — master ( cacbf1...74b6c9 )
by
unknown
34:14
created

SspAssetSearchMapper   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 207
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 74
dl 0
loc 207
rs 10
c 1
b 0
f 0
wmc 20

8 Methods

Rating   Name   Duplication   Size   Complexity  
A mapSspAssetDataToSearchData() 0 27 1
A mapSspAssetTransferToSspAssetSearchTransfer() 0 15 1
A mapSspAssetSearchEntitiesToSynchronizationDataTransfers() 0 11 2
A buildCompletionTerms() 0 15 4
A __construct() 0 4 1
A buildFullTextBoosted() 0 19 5
A mapSspAssetCollectionTransferToSspAssetSearchCollectionTransfer() 0 16 2
A buildSuggestionTerms() 0 15 4
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
declare(strict_types = 1);
9
10
namespace SprykerFeature\Zed\SelfServicePortal\Business\Asset\Mapper;
11
12
use Generated\Shared\Search\SspAssetIndexMap;
13
use Generated\Shared\Transfer\CompanyBusinessUnitTransfer;
14
use Generated\Shared\Transfer\CompanyTransfer;
15
use Generated\Shared\Transfer\SspAssetBusinessUnitAssignmentTransfer;
16
use Generated\Shared\Transfer\SspAssetCollectionTransfer;
17
use Generated\Shared\Transfer\SspAssetSearchCollectionTransfer;
18
use Generated\Shared\Transfer\SspAssetSearchTransfer;
19
use Generated\Shared\Transfer\SspAssetTransfer;
20
use Generated\Shared\Transfer\SspModelTransfer;
21
use Generated\Shared\Transfer\StoreTransfer;
22
use Generated\Shared\Transfer\SynchronizationDataTransfer;
23
use Propel\Runtime\Collection\ObjectCollection;
24
use Spryker\Service\UtilEncoding\UtilEncodingServiceInterface;
25
use Spryker\Zed\Store\Business\StoreFacadeInterface;
26
use SprykerFeature\Shared\SelfServicePortal\SelfServicePortalConfig;
27
28
class SspAssetSearchMapper implements SspAssetSearchMapperInterface
29
{
30
    /**
31
     * @var string
32
     */
33
    protected const SEARCH_DATA_KEY_NAME = 'name';
34
35
    /**
36
     * @var string
37
     */
38
    protected const SEARCH_DATA_KEY_SERIAL_NUMBER = 'serial_number';
39
40
    /**
41
     * @var string
42
     */
43
    protected const SEARCH_DATA_KEY_MODEL_IDS = 'model_ids';
44
45
    /**
46
     * @var string
47
     */
48
    protected const SEARCH_DATA_KEY_BUSINESS_UNIT_IDS = 'busines_unit_ids';
49
50
    /**
51
     * @var string
52
     */
53
    protected const SEARCH_DATA_KEY_COMPANY_IDS = 'company_ids';
54
55
    /**
56
     * @var string
57
     */
58
    protected const SEARCH_DATA_KEY_ID_OWNER_BUSINESS_UNIT = 'id_owner_business_unit';
59
60
    /**
61
     * @var string
62
     */
63
    protected const SEARCH_DATA_KEY_ID_OWNER_COMPANY_ID = 'id_owner_company_id';
64
65
    public function __construct(
66
        protected UtilEncodingServiceInterface $utilEncodingService,
67
        protected StoreFacadeInterface $storeFacade
68
    ) {
69
    }
70
71
    public function mapSspAssetCollectionTransferToSspAssetSearchCollectionTransfer(
72
        SspAssetCollectionTransfer $sspAssetCollectionTransfer,
73
        SspAssetSearchCollectionTransfer $sspAssetSearchCollectionTransfer
74
    ): SspAssetSearchCollectionTransfer {
75
        $storeTransfers = $this->storeFacade->getAllStores();
76
        foreach ($sspAssetCollectionTransfer->getSspAssets() as $sspAssetTransfer) {
77
            $sspAssetSearchTransfer = $this->mapSspAssetTransferToSspAssetSearchTransfer(
78
                $sspAssetTransfer,
79
                new SspAssetSearchTransfer(),
80
                $storeTransfers,
81
            );
82
83
            $sspAssetSearchCollectionTransfer->addSspAsset($sspAssetSearchTransfer);
84
        }
85
86
        return $sspAssetSearchCollectionTransfer;
87
    }
88
89
    /**
90
     * @param \Propel\Runtime\Collection\ObjectCollection<\Orm\Zed\SelfServicePortal\Persistence\SpySspAssetSearch> $sspAssetSearchEntities
91
     *
92
     * @return array<\Generated\Shared\Transfer\SynchronizationDataTransfer>
93
     */
94
    public function mapSspAssetSearchEntitiesToSynchronizationDataTransfers(ObjectCollection $sspAssetSearchEntities): array
95
    {
96
        $synchronizationDataTransfers = [];
97
98
        foreach ($sspAssetSearchEntities as $sspAssetSearchEntity) {
99
            $synchronizationDataTransfers[] = (new SynchronizationDataTransfer())
100
                ->setData($sspAssetSearchEntity->getData())
101
                ->setKey($sspAssetSearchEntity->getKey());
102
        }
103
104
        return $synchronizationDataTransfers;
105
    }
106
107
    /**
108
     * @param \Generated\Shared\Transfer\SspAssetTransfer $sspAssetTransfer
109
     * @param \Generated\Shared\Transfer\SspAssetSearchTransfer $sspAssetSearchTransfer
110
     * @param array<\Generated\Shared\Transfer\StoreTransfer> $storeTransfers
111
     *
112
     * @return \Generated\Shared\Transfer\SspAssetSearchTransfer
113
     */
114
    protected function mapSspAssetTransferToSspAssetSearchTransfer(
115
        SspAssetTransfer $sspAssetTransfer,
116
        SspAssetSearchTransfer $sspAssetSearchTransfer,
117
        array $storeTransfers
118
    ): SspAssetSearchTransfer {
119
        $sspAssetSearchTransfer->setIdSspAsset($sspAssetTransfer->getIdSspAsset());
120
        $sspAssetSearchData = $sspAssetTransfer->toArray(true, true);
121
        $sspAssetSearchTransfer->setData(
122
            $this->mapSspAssetDataToSearchData($sspAssetSearchData, $storeTransfers),
123
        );
124
        $sspAssetSearchTransfer->setStructuredData(
125
            $this->utilEncodingService->encodeJson($sspAssetSearchData),
126
        );
127
128
        return $sspAssetSearchTransfer;
129
    }
130
131
    /**
132
     * @param array<string, mixed> $data
133
     * @param array<\Generated\Shared\Transfer\StoreTransfer> $storeTransfers
134
     *
135
     * @return array<string, mixed>
136
     */
137
    protected function mapSspAssetDataToSearchData(array $data, array $storeTransfers): array
138
    {
139
        $searchResultData = [
140
            static::SEARCH_DATA_KEY_NAME => $data[SspAssetTransfer::NAME] ?? null,
141
            static::SEARCH_DATA_KEY_SERIAL_NUMBER => $data[SspAssetTransfer::SERIAL_NUMBER] ?? null,
142
            static::SEARCH_DATA_KEY_MODEL_IDS => array_map(fn (array $model) => $model[SspModelTransfer::ID_SSP_MODEL], $data[SspAssetTransfer::SSP_MODELS] ?? []),
143
            static::SEARCH_DATA_KEY_BUSINESS_UNIT_IDS => array_map(fn (array $businessUnit) => $businessUnit[SspAssetBusinessUnitAssignmentTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::ID_COMPANY_BUSINESS_UNIT], $data[SspAssetTransfer::BUSINESS_UNIT_ASSIGNMENTS] ?? []),
144
            static::SEARCH_DATA_KEY_COMPANY_IDS => array_map(fn (array $businessUnit) => $businessUnit[SspAssetBusinessUnitAssignmentTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::COMPANY][CompanyTransfer::ID_COMPANY], $data[SspAssetTransfer::BUSINESS_UNIT_ASSIGNMENTS] ?? []),
145
            static::SEARCH_DATA_KEY_ID_OWNER_BUSINESS_UNIT => $data[SspAssetTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::ID_COMPANY_BUSINESS_UNIT] ?? null,
146
            static::SEARCH_DATA_KEY_ID_OWNER_COMPANY_ID => $data[SspAssetTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::FK_COMPANY] ?? null,
147
        ];
148
149
        $fullTextBoosted = $this->buildFullTextBoosted($data);
150
        $suggestionTerms = $this->buildSuggestionTerms($data);
151
        $completionTerms = $this->buildCompletionTerms($data);
152
153
        return [
154
            SspAssetIndexMap::TYPE => SelfServicePortalConfig::SSP_ASSET_RESOURCE_NAME,
155
            SspAssetIndexMap::SEARCH_RESULT_DATA => $searchResultData,
156
            SspAssetIndexMap::FULL_TEXT_BOOSTED => $fullTextBoosted,
157
            SspAssetIndexMap::SUGGESTION_TERMS => $suggestionTerms,
158
            SspAssetIndexMap::COMPLETION_TERMS => $completionTerms,
159
            SspAssetIndexMap::STORE => array_map(fn (StoreTransfer $storeTransfer) => $storeTransfer->getName(), $storeTransfers),
160
            SspAssetIndexMap::ID_OWNER_BUSINESS_UNIT => $data[SspAssetTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::ID_COMPANY_BUSINESS_UNIT] ?? null,
161
            SspAssetIndexMap::ID_OWNER_COMPANY_ID => $data[SspAssetTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::FK_COMPANY] ?? null,
162
            SspAssetIndexMap::COMPANY_IDS => array_map(fn (array $businessUnit) => $businessUnit[SspAssetBusinessUnitAssignmentTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::COMPANY][CompanyTransfer::ID_COMPANY], $data[SspAssetTransfer::BUSINESS_UNIT_ASSIGNMENTS]),
163
            SspAssetIndexMap::BUSINESS_UNIT_IDS => array_map(fn (array $businessUnit) => $businessUnit[SspAssetBusinessUnitAssignmentTransfer::COMPANY_BUSINESS_UNIT][CompanyBusinessUnitTransfer::ID_COMPANY_BUSINESS_UNIT], $data[SspAssetTransfer::BUSINESS_UNIT_ASSIGNMENTS]),
164
        ];
165
    }
166
167
    /**
168
     * @param array<string, mixed> $data
169
     *
170
     * @return array<string>
171
     */
172
    protected function buildFullTextBoosted(array $data): array
173
    {
174
        $fullTextBoosted = [];
175
176
        if (isset($data[SspAssetTransfer::NAME])) {
177
            $fullTextBoosted[] = $data[SspAssetTransfer::NAME];
178
        }
179
180
        if (isset($data[SspAssetTransfer::SSP_MODELS])) {
181
            foreach ($data[SspAssetTransfer::SSP_MODELS] as $model) {
182
                $fullTextBoosted[] = $model[SspModelTransfer::NAME];
183
            }
184
        }
185
186
        if (isset($data[SspAssetTransfer::SERIAL_NUMBER])) {
187
            $fullTextBoosted[] = $data[SspAssetTransfer::SERIAL_NUMBER];
188
        }
189
190
        return $fullTextBoosted;
191
    }
192
193
    /**
194
     * @param array<string, mixed> $data
195
     *
196
     * @return array<string>
197
     */
198
    protected function buildSuggestionTerms(array $data): array
199
    {
200
        $suggestionTerms = [];
201
202
        if (isset($data[SspAssetTransfer::NAME])) {
203
            $suggestionTerms[] = $data[SspAssetTransfer::NAME];
204
        }
205
206
        if (isset($data[SspAssetTransfer::SSP_MODELS])) {
207
            foreach ($data[SspAssetTransfer::SSP_MODELS] as $model) {
208
                $suggestionTerms[] = $model[SspModelTransfer::NAME];
209
            }
210
        }
211
212
        return $suggestionTerms;
213
    }
214
215
    /**
216
     * @param array<string, mixed> $data
217
     *
218
     * @return array<string>
219
     */
220
    protected function buildCompletionTerms(array $data): array
221
    {
222
        $suggestionTerms = [];
223
224
        if (isset($data[SspAssetTransfer::NAME])) {
225
            $suggestionTerms[] = $data[SspAssetTransfer::NAME];
226
        }
227
228
        if (isset($data[SspAssetTransfer::SSP_MODELS])) {
229
            foreach ($data[SspAssetTransfer::SSP_MODELS] as $model) {
230
                $suggestionTerms[] = $model[SspModelTransfer::NAME];
231
            }
232
        }
233
234
        return $suggestionTerms;
235
    }
236
}
237