Issues (3641)

MerchantCommissionStoreRelationExpander.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\Zed\MerchantCommission\Business\Expander;
9
10
use ArrayObject;
11
use Generated\Shared\Transfer\MerchantCommissionCollectionTransfer;
12
use Generated\Shared\Transfer\StoreRelationTransfer;
13
use Spryker\Zed\MerchantCommission\Business\Reader\StoreReaderInterface;
14
15
class MerchantCommissionStoreRelationExpander implements MerchantCommissionStoreRelationExpanderInterface
16
{
17
    /**
18
     * @var \Spryker\Zed\MerchantCommission\Business\Reader\StoreReaderInterface
19
     */
20
    protected StoreReaderInterface $storeReader;
21
22
    /**
23
     * @param \Spryker\Zed\MerchantCommission\Business\Reader\StoreReaderInterface $storeReader
24
     */
25
    public function __construct(StoreReaderInterface $storeReader)
26
    {
27
        $this->storeReader = $storeReader;
28
    }
29
30
    /**
31
     * @param \Generated\Shared\Transfer\MerchantCommissionCollectionTransfer $merchantCommissionCollectionTransfer
32
     *
33
     * @return \Generated\Shared\Transfer\MerchantCommissionCollectionTransfer
34
     */
35
    public function expandMerchantCommissionCollectionWithStores(
36
        MerchantCommissionCollectionTransfer $merchantCommissionCollectionTransfer
37
    ): MerchantCommissionCollectionTransfer {
38
        $storeIds = $this->extractStoreIds($merchantCommissionCollectionTransfer->getMerchantCommissions());
39
        $storeCollectionTransfer = $this->storeReader->getStoreCollectionByStoreIds($storeIds);
40
        $storeTransfersIndexedByIdStore = $this->getStoreTransferIndexedByIdStore($storeCollectionTransfer->getStores());
41
42
        foreach ($merchantCommissionCollectionTransfer->getMerchantCommissions() as $merchantCommissionTransfer) {
43
            $this->expandStoreRelationWithStoreTransfers(
44
                $merchantCommissionTransfer->getStoreRelationOrFail(),
45
                $storeTransfersIndexedByIdStore,
46
            );
47
        }
48
49
        return $merchantCommissionCollectionTransfer;
50
    }
51
52
    /**
53
     * @param \Generated\Shared\Transfer\StoreRelationTransfer $storeRelationTransfer
54
     * @param array<int, \Generated\Shared\Transfer\StoreTransfer> $storeTransfersIndexedByIdStore
55
     *
56
     * @return \Generated\Shared\Transfer\StoreRelationTransfer
57
     */
58
    protected function expandStoreRelationWithStoreTransfers(
59
        StoreRelationTransfer $storeRelationTransfer,
60
        array $storeTransfersIndexedByIdStore
61
    ): StoreRelationTransfer {
62
        $storeTransfers = [];
63
        foreach ($storeRelationTransfer->getStores() as $storeTransfer) {
64
            if (!isset($storeTransfersIndexedByIdStore[$storeTransfer->getIdStoreOrFail()])) {
65
                continue;
66
            }
67
68
            $storeTransfers[] = $storeTransfersIndexedByIdStore[$storeTransfer->getIdStoreOrFail()];
69
        }
70
71
        return $storeRelationTransfer->setStores(new ArrayObject($storeTransfers));
72
    }
73
74
    /**
75
     * @param \ArrayObject<array-key, \Generated\Shared\Transfer\MerchantCommissionTransfer> $merchantCommissionTransfers
76
     *
77
     * @return list<int>
78
     */
79
    protected function extractStoreIds(ArrayObject $merchantCommissionTransfers): array
80
    {
81
        $storeIds = [];
82
        foreach ($merchantCommissionTransfers as $merchantCommissionTransfer) {
83
            foreach ($merchantCommissionTransfer->getStoreRelationOrFail()->getStores() as $storeTransfer) {
84
                $storeIds[$storeTransfer->getIdStoreOrFail()] = $storeTransfer->getIdStoreOrFail();
85
            }
86
        }
87
88
        return array_values($storeIds);
0 ignored issues
show
Bug Best Practice introduced by
The expression return array_values($storeIds) returns the type array which is incompatible with the documented return type Spryker\Zed\MerchantComm...\Business\Expander\list.
Loading history...
89
    }
90
91
    /**
92
     * @param \ArrayObject<array-key, \Generated\Shared\Transfer\StoreTransfer> $storeTransfers
93
     *
94
     * @return array<int, \Generated\Shared\Transfer\StoreTransfer>
95
     */
96
    protected function getStoreTransferIndexedByIdStore(ArrayObject $storeTransfers): array
97
    {
98
        $indexedStoreTransfers = [];
99
        foreach ($storeTransfers as $storeTransfer) {
100
            $indexedStoreTransfers[$storeTransfer->getIdStoreOrFail()] = $storeTransfer;
101
        }
102
103
        return $indexedStoreTransfers;
104
    }
105
}
106