ProductFacade   F
last analyzed

Complexity

Total Complexity 81

Size/Duplication

Total Lines 1315
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 216
c 0
b 0
f 0
dl 0
loc 1315
rs 2
wmc 81

81 Methods

Rating   Name   Duplication   Size   Complexity  
A updateProductUrl() 0 5 1
A getProductAbstractIdByConcreteId() 0 5 1
A hasProductConcrete() 0 5 1
A findProductConcretesBySkus() 0 5 1
A touchProductActive() 0 5 1
A touchProductAbstract() 0 5 1
A touchProductConcrete() 0 5 1
A getProductConcretesByCriteria() 0 3 1
A getRawProductConcreteBySku() 0 5 1
A getProductConcrete() 0 5 1
A getProductAbstractCollection() 0 3 1
A touchProductAbstractUrlDeleted() 0 5 1
A getPaginatedProductAbstractSuggestions() 0 7 1
A createProductAbstract() 0 5 1
A getRawProductAbstractTransfersByAbstractSkus() 0 3 1
A hasProductAbstract() 0 5 1
A getProductUrl() 0 5 1
A getProductConcretesByFilter() 0 3 1
A getRawProductConcreteTransfersByFilter() 0 3 1
A generateVariants() 0 5 1
A createProductConcrete() 0 5 1
A getConcreteProductsByAbstractProductId() 0 5 1
A saveProduct() 0 5 1
A combineRawProductAttributes() 0 5 1
A getCombinedAbstractAttributeKeys() 0 5 1
A emitPublishProductToMessageBroker() 0 3 1
A createProductConcreteCollection() 0 6 1
A activateProductConcrete() 0 5 1
A suggestProductConcrete() 0 5 1
A getProductConcreteSkusByConcreteIds() 0 5 1
A touchProductAbstractUrlActive() 0 5 1
A publishProductToMessageBrokerByProductEvents() 0 3 1
A deactivateProductConcrete() 0 5 1
A getProductConcreteTransfersByProductIds() 0 4 1
A generateProductConcreteSku() 0 5 1
A getProductAttributeKeyCollection() 0 4 1
A touchProductConcreteInactive() 0 5 1
A findProductConcreteIdsByAbstractProductId() 0 5 1
A touchProductConcreteDelete() 0 5 1
A isProductConcreteActive() 0 5 1
A generateAttributePermutations() 0 5 1
A encodeProductAttributes() 0 5 1
A findProductConcreteIdBySku() 0 5 1
A deactivateProductConcretesByConcreteSkus() 0 5 1
A canPublishMessage() 0 4 1
A isProductActive() 0 5 1
A hasProductAttributeKey() 0 5 1
A getProductAbstractIdByConcreteSku() 0 5 1
A getLocalizedProductAbstractName() 0 5 1
A getProductConcreteTransfersByProductAbstractIds() 0 4 1
A getCombinedConcreteAttributes() 0 5 1
A getProductUrls() 0 3 1
A getProductAbstractLocalizedAttributeNamesIndexedByIdProductAbstract() 0 4 1
A decodeProductAttributes() 0 5 1
A findProductAttributeKey() 0 5 1
A touchProductDeleted() 0 5 1
A getRawProductConcreteTransfersByConcreteSkus() 0 5 1
A touchProductConcreteActive() 0 5 1
A getProductAbstractIdsByProductConcreteIds() 0 5 1
A findProductAbstractIdByConcreteId() 0 5 1
A updateProductsUrl() 0 5 1
A createProductUrl() 0 5 1
A findProductAbstractIdBySku() 0 5 1
A deleteProductUrl() 0 5 1
A updateProductAttributeKey() 0 5 1
A triggerProductExportEvents() 0 3 1
A getProductConcreteIdsByConcreteSkus() 0 5 1
A createProductAttributeKey() 0 5 1
A touchProductInactive() 0 5 1
A getProductConcreteCollection() 0 6 1
A suggestProductAbstract() 0 5 1
A getLocalizedProductConcreteName() 0 5 1
A publishProductToMessageBrokerByProductAbstractEvents() 0 3 1
A getCombinedAbstractAttributeKeysForProductIds() 0 5 1
A saveProductAbstract() 0 5 1
A saveProductConcrete() 0 5 1
A findProductAbstractById() 0 5 1
A getAbstractSkuFromProductConcrete() 0 5 1
A addProduct() 0 5 1
A findProductConcreteById() 0 5 1
A emitUnpublishProductToMessageBroker() 0 3 1

How to fix   Complexity   

Complex Class

Complex classes like ProductFacade often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use ProductFacade, and based on these observations, apply Extract Interface, too.

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\Product\Business;
9
10
use Generated\Shared\Transfer\FilterTransfer;
11
use Generated\Shared\Transfer\LocaleTransfer;
12
use Generated\Shared\Transfer\MessageSendingContextTransfer;
13
use Generated\Shared\Transfer\PaginationTransfer;
14
use Generated\Shared\Transfer\ProductAbstractCollectionTransfer;
15
use Generated\Shared\Transfer\ProductAbstractCriteriaTransfer;
16
use Generated\Shared\Transfer\ProductAbstractSuggestionCollectionTransfer;
17
use Generated\Shared\Transfer\ProductAbstractTransfer;
18
use Generated\Shared\Transfer\ProductAttributeKeyCollectionTransfer;
19
use Generated\Shared\Transfer\ProductAttributeKeyCriteriaTransfer;
20
use Generated\Shared\Transfer\ProductAttributeKeyTransfer;
21
use Generated\Shared\Transfer\ProductConcreteCollectionTransfer;
22
use Generated\Shared\Transfer\ProductConcreteCriteriaTransfer;
23
use Generated\Shared\Transfer\ProductConcreteTransfer;
24
use Generated\Shared\Transfer\ProductCriteriaTransfer;
25
use Generated\Shared\Transfer\ProductExportCriteriaTransfer;
26
use Generated\Shared\Transfer\ProductPublisherConfigTransfer;
27
use Generated\Shared\Transfer\ProductUrlCriteriaFilterTransfer;
28
use Generated\Shared\Transfer\RawProductAttributesTransfer;
29
use Spryker\Zed\Kernel\Business\AbstractFacade;
30
31
/**
32
 * @method \Spryker\Zed\Product\Business\ProductBusinessFactory getFactory()
33
 * @method \Spryker\Zed\Product\Persistence\ProductRepositoryInterface getRepository()
34
 * @method \Spryker\Zed\Product\Persistence\ProductEntityManagerInterface getEntityManager()
35
 */
36
class ProductFacade extends AbstractFacade implements ProductFacadeInterface
37
{
38
    /**
39
     * {@inheritDoc}
40
     *
41
     * @api
42
     *
43
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
44
     * @param array<\Generated\Shared\Transfer\ProductConcreteTransfer> $productConcreteCollection
45
     *
46
     * @throws \Spryker\Zed\Product\Business\Exception\ProductAbstractExistsException
47
     * @throws \Spryker\Zed\Product\Business\Exception\ProductConcreteExistsException
48
     *
49
     * @return int
50
     */
51
    public function addProduct(ProductAbstractTransfer $productAbstractTransfer, array $productConcreteCollection)
52
    {
53
        return $this->getFactory()
54
            ->createProductManager()
55
            ->addProduct($productAbstractTransfer, $productConcreteCollection);
56
    }
57
58
    /**
59
     * {@inheritDoc}
60
     *
61
     * @api
62
     *
63
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
64
     * @param array<\Generated\Shared\Transfer\ProductConcreteTransfer> $productConcreteCollection
65
     *
66
     * @throws \Spryker\Zed\Product\Business\Exception\ProductAbstractExistsException
67
     * @throws \Spryker\Zed\Product\Business\Exception\ProductConcreteExistsException
68
     *
69
     * @return int
70
     */
71
    public function saveProduct(ProductAbstractTransfer $productAbstractTransfer, array $productConcreteCollection)
72
    {
73
        return $this->getFactory()
74
            ->createProductManager()
75
            ->saveProduct($productAbstractTransfer, $productConcreteCollection);
76
    }
77
78
    /**
79
     * {@inheritDoc}
80
     *
81
     * @api
82
     *
83
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
84
     *
85
     * @throws \Spryker\Zed\Product\Business\Exception\ProductAbstractExistsException
86
     *
87
     * @return int
88
     */
89
    public function createProductAbstract(ProductAbstractTransfer $productAbstractTransfer)
90
    {
91
        return $this->getFactory()
92
            ->createProductAbstractManager()
93
            ->createProductAbstract($productAbstractTransfer);
94
    }
95
96
    /**
97
     * {@inheritDoc}
98
     *
99
     * @api
100
     *
101
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
102
     *
103
     * @throws \Spryker\Zed\Product\Business\Exception\ProductAbstractExistsException
104
     *
105
     * @return int
106
     */
107
    public function saveProductAbstract(ProductAbstractTransfer $productAbstractTransfer)
108
    {
109
        return $this->getFactory()
110
            ->createProductAbstractManager()
111
            ->saveProductAbstract($productAbstractTransfer);
112
    }
113
114
    /**
115
     * {@inheritDoc}
116
     *
117
     * @api
118
     *
119
     * @param string $sku
120
     *
121
     * @return bool
122
     */
123
    public function hasProductAbstract($sku)
124
    {
125
        return $this->getFactory()
126
            ->createProductAbstractManager()
127
            ->hasProductAbstract($sku);
128
    }
129
130
    /**
131
     * {@inheritDoc}
132
     *
133
     * @api
134
     *
135
     * @param string $sku
136
     *
137
     * @return int|null
138
     */
139
    public function findProductAbstractIdBySku($sku)
140
    {
141
        return $this->getFactory()
142
            ->createProductAbstractManager()
143
            ->findProductAbstractIdBySku($sku);
144
    }
145
146
    /**
147
     * {@inheritDoc}
148
     *
149
     * @api
150
     *
151
     * @param int $idProductAbstract
152
     *
153
     * @return \Generated\Shared\Transfer\ProductAbstractTransfer|null
154
     */
155
    public function findProductAbstractById($idProductAbstract)
156
    {
157
        return $this->getFactory()
158
            ->createProductAbstractManager()
159
            ->findProductAbstractById($idProductAbstract);
160
    }
161
162
    /**
163
     * {@inheritDoc}
164
     *
165
     * @api
166
     *
167
     * @param string $sku
168
     *
169
     * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException
170
     *
171
     * @return string
172
     */
173
    public function getAbstractSkuFromProductConcrete($sku)
174
    {
175
        return $this->getFactory()
176
            ->createProductAbstractManager()
177
            ->getAbstractSkuFromProductConcrete($sku);
178
    }
179
180
    /**
181
     * {@inheritDoc}
182
     *
183
     * @api
184
     *
185
     * @param string $concreteSku
186
     *
187
     * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException
188
     *
189
     * @return int
190
     */
191
    public function getProductAbstractIdByConcreteSku($concreteSku)
192
    {
193
        return $this->getFactory()
194
            ->createProductConcreteManager()
195
            ->getProductAbstractIdByConcreteSku($concreteSku);
196
    }
197
198
    /**
199
     * {@inheritDoc}
200
     *
201
     * @api
202
     *
203
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer
204
     *
205
     * @throws \Spryker\Zed\Product\Business\Exception\ProductConcreteExistsException
206
     *
207
     * @return int
208
     */
209
    public function createProductConcrete(ProductConcreteTransfer $productConcreteTransfer)
210
    {
211
        return $this->getFactory()
212
            ->createProductConcreteManager()
213
            ->createProductConcrete($productConcreteTransfer);
214
    }
215
216
    /**
217
     * {@inheritDoc}
218
     *
219
     * @api
220
     *
221
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer
222
     *
223
     * @throws \Spryker\Zed\Product\Business\Exception\ProductConcreteExistsException
224
     *
225
     * @return int
226
     */
227
    public function saveProductConcrete(ProductConcreteTransfer $productConcreteTransfer)
228
    {
229
        return $this->getFactory()
230
            ->createProductConcreteManager()
231
            ->saveProductConcrete($productConcreteTransfer);
232
    }
233
234
    /**
235
     * {@inheritDoc}
236
     *
237
     * @api
238
     *
239
     * @param string $sku
240
     *
241
     * @return bool
242
     */
243
    public function hasProductConcrete($sku)
244
    {
245
        return $this->getFactory()
246
            ->createProductConcreteManager()
247
            ->hasProductConcrete($sku);
248
    }
249
250
    /**
251
     * {@inheritDoc}
252
     *
253
     * @api
254
     *
255
     * @param string $sku
256
     *
257
     * @return int|null
258
     */
259
    public function findProductConcreteIdBySku($sku)
260
    {
261
        return $this->getFactory()
262
            ->createProductConcreteManager()
263
            ->findProductConcreteIdBySku($sku);
264
    }
265
266
    /**
267
     * {@inheritDoc}
268
     *
269
     * @api
270
     *
271
     * @param array<string> $skus
272
     *
273
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
274
     */
275
    public function findProductConcretesBySkus(array $skus): array
276
    {
277
        return $this->getFactory()
278
            ->createProductConcreteManager()
279
            ->findProductConcretesBySkus($skus);
280
    }
281
282
    /**
283
     * {@inheritDoc}
284
     *
285
     * @api
286
     *
287
     * @param int $idConcrete
288
     *
289
     * @return int|null
290
     */
291
    public function findProductAbstractIdByConcreteId(int $idConcrete): ?int
292
    {
293
        return $this->getFactory()
294
            ->createProductConcreteManager()
295
            ->findProductAbstractIdByConcreteId($idConcrete);
296
    }
297
298
    /**
299
     * {@inheritDoc}
300
     *
301
     * @api
302
     *
303
     * @param int $idProduct
304
     *
305
     * @return \Generated\Shared\Transfer\ProductConcreteTransfer|null
306
     */
307
    public function findProductConcreteById($idProduct)
308
    {
309
        return $this->getFactory()
310
            ->createProductConcreteManager()
311
            ->findProductConcreteById($idProduct);
312
    }
313
314
    /**
315
     * {@inheritDoc}
316
     *
317
     * @api
318
     *
319
     * @param string $concreteSku
320
     *
321
     * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException
322
     *
323
     * @return \Generated\Shared\Transfer\ProductConcreteTransfer
324
     */
325
    public function getProductConcrete($concreteSku)
326
    {
327
        return $this->getFactory()
328
            ->createProductConcreteManager()
329
            ->getProductConcrete($concreteSku);
330
    }
331
332
    /**
333
     * {@inheritDoc}
334
     *
335
     * @api
336
     *
337
     * @deprecated Use {@link \Spryker\Zed\Product\Business\ProductFacadeInterface::getRawProductConcreteTransfersByConcreteSkus()} instead.
338
     *
339
     * @param string $productConcreteSku
340
     *
341
     * @return \Generated\Shared\Transfer\ProductConcreteTransfer
342
     */
343
    public function getRawProductConcreteBySku(string $productConcreteSku): ProductConcreteTransfer
344
    {
345
        return $this->getFactory()
346
            ->createProductConcreteManager()
347
            ->getRawProductConcreteBySku($productConcreteSku);
348
    }
349
350
    /**
351
     * {@inheritDoc}
352
     *
353
     * @api
354
     *
355
     * @param int $idProductAbstract
356
     *
357
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
358
     */
359
    public function getConcreteProductsByAbstractProductId($idProductAbstract)
360
    {
361
        return $this->getFactory()
362
            ->createProductConcreteManager()
363
            ->getConcreteProductsByAbstractProductId($idProductAbstract);
364
    }
365
366
    /**
367
     * {@inheritDoc}
368
     *
369
     * @api
370
     *
371
     * @param string $key
372
     *
373
     * @return bool
374
     */
375
    public function hasProductAttributeKey($key)
376
    {
377
        return $this->getFactory()
378
            ->createAttributeKeyManager()
379
            ->hasAttributeKey($key);
380
    }
381
382
    /**
383
     * {@inheritDoc}
384
     *
385
     * @api
386
     *
387
     * @param string $key
388
     *
389
     * @return \Generated\Shared\Transfer\ProductAttributeKeyTransfer|null
390
     */
391
    public function findProductAttributeKey($key)
392
    {
393
        return $this->getFactory()
394
            ->createAttributeKeyManager()
395
            ->findAttributeKey($key);
396
    }
397
398
    /**
399
     * {@inheritDoc}
400
     *
401
     * @api
402
     *
403
     * @param \Generated\Shared\Transfer\ProductAttributeKeyTransfer $productAttributeKeyTransfer
404
     *
405
     * @return \Generated\Shared\Transfer\ProductAttributeKeyTransfer
406
     */
407
    public function createProductAttributeKey(ProductAttributeKeyTransfer $productAttributeKeyTransfer)
408
    {
409
        return $this->getFactory()
410
            ->createAttributeKeyManager()
411
            ->createAttributeKey($productAttributeKeyTransfer);
412
    }
413
414
    /**
415
     * {@inheritDoc}
416
     *
417
     * @api
418
     *
419
     * @param \Generated\Shared\Transfer\ProductAttributeKeyTransfer $productAttributeKeyTransfer
420
     *
421
     * @return \Generated\Shared\Transfer\ProductAttributeKeyTransfer
422
     */
423
    public function updateProductAttributeKey(ProductAttributeKeyTransfer $productAttributeKeyTransfer)
424
    {
425
        return $this->getFactory()
426
            ->createAttributeKeyManager()
427
            ->updateAttributeKey($productAttributeKeyTransfer);
428
    }
429
430
    /**
431
     * {@inheritDoc}
432
     *
433
     * @api
434
     *
435
     * @param int $idProductAbstract
436
     *
437
     * @return void
438
     */
439
    public function touchProductAbstract($idProductAbstract)
440
    {
441
        $this->getFactory()
442
            ->createProductAbstractTouch()
443
            ->touchProductAbstract($idProductAbstract);
444
    }
445
446
    /**
447
     * {@inheritDoc}
448
     *
449
     * @api
450
     *
451
     * @param int $idProductAbstract
452
     *
453
     * @return void
454
     */
455
    public function touchProductActive($idProductAbstract)
456
    {
457
        $this->getFactory()
458
            ->createProductAbstractTouch()
459
            ->touchProductAbstractActive($idProductAbstract);
460
    }
461
462
    /**
463
     * {@inheritDoc}
464
     *
465
     * @api
466
     *
467
     * @param int $idProductAbstract
468
     *
469
     * @return void
470
     */
471
    public function touchProductInactive($idProductAbstract)
472
    {
473
        $this->getFactory()
474
            ->createProductAbstractTouch()
475
            ->touchProductAbstractInactive($idProductAbstract);
476
    }
477
478
    /**
479
     * {@inheritDoc}
480
     *
481
     * @api
482
     *
483
     * @param int $idProductAbstract
484
     *
485
     * @return void
486
     */
487
    public function touchProductDeleted($idProductAbstract)
488
    {
489
        $this->getFactory()
490
            ->createProductAbstractTouch()
491
            ->touchProductAbstractDeleted($idProductAbstract);
492
    }
493
494
    /**
495
     * {@inheritDoc}
496
     *
497
     * @api
498
     *
499
     * @param int $idProductConcrete
500
     *
501
     * @return void
502
     */
503
    public function touchProductConcrete($idProductConcrete)
504
    {
505
        $this->getFactory()
506
            ->createProductConcreteTouch()
507
            ->touchProductConcrete($idProductConcrete);
508
    }
509
510
    /**
511
     * {@inheritDoc}
512
     *
513
     * @api
514
     *
515
     * @param int $idProductConcrete
516
     *
517
     * @return void
518
     */
519
    public function touchProductConcreteActive($idProductConcrete)
520
    {
521
        $this->getFactory()
522
            ->createProductConcreteTouch()
523
            ->touchProductConcreteActive($idProductConcrete);
524
    }
525
526
    /**
527
     * {@inheritDoc}
528
     *
529
     * @api
530
     *
531
     * @param int $idProductConcrete
532
     *
533
     * @return void
534
     */
535
    public function touchProductConcreteInactive($idProductConcrete)
536
    {
537
        $this->getFactory()
538
            ->createProductConcreteTouch()
539
            ->touchProductConcreteInactive($idProductConcrete);
540
    }
541
542
    /**
543
     * {@inheritDoc}
544
     *
545
     * @api
546
     *
547
     * @param int $idProductConcrete
548
     *
549
     * @return void
550
     */
551
    public function touchProductConcreteDelete($idProductConcrete)
552
    {
553
        $this->getFactory()
554
            ->createProductConcreteTouch()
555
            ->touchProductConcreteDeleted($idProductConcrete);
556
    }
557
558
    /**
559
     * {@inheritDoc}
560
     *
561
     * @api
562
     *
563
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
564
     *
565
     * @return \Generated\Shared\Transfer\ProductUrlTransfer
566
     */
567
    public function createProductUrl(ProductAbstractTransfer $productAbstractTransfer)
568
    {
569
        return $this->getFactory()
570
            ->createProductUrlManager()
571
            ->createProductUrl($productAbstractTransfer);
572
    }
573
574
    /**
575
     * {@inheritDoc}
576
     *
577
     * @api
578
     *
579
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
580
     *
581
     * @return \Generated\Shared\Transfer\ProductUrlTransfer
582
     */
583
    public function updateProductUrl(ProductAbstractTransfer $productAbstractTransfer)
584
    {
585
        return $this->getFactory()
586
            ->createProductUrlManager()
587
            ->updateProductUrl($productAbstractTransfer);
588
    }
589
590
    /**
591
     * {@inheritDoc}
592
     *
593
     * @api
594
     *
595
     * @param array<\Generated\Shared\Transfer\ProductAbstractTransfer> $productAbstractTransfers
596
     *
597
     * @return array<\Generated\Shared\Transfer\UrlTransfer>
598
     */
599
    public function updateProductsUrl(array $productAbstractTransfers): array
600
    {
601
        return $this->getFactory()
602
            ->createProductUrlManager()
603
            ->updateProductUrls($productAbstractTransfers);
604
    }
605
606
    /**
607
     * {@inheritDoc}
608
     *
609
     * @api
610
     *
611
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
612
     *
613
     * @return \Generated\Shared\Transfer\ProductUrlTransfer
614
     */
615
    public function getProductUrl(ProductAbstractTransfer $productAbstractTransfer)
616
    {
617
        return $this->getFactory()
618
            ->createProductUrlManager()
619
            ->getProductUrl($productAbstractTransfer);
620
    }
621
622
    /**
623
     * {@inheritDoc}
624
     *
625
     * @api
626
     *
627
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
628
     *
629
     * @return void
630
     */
631
    public function deleteProductUrl(ProductAbstractTransfer $productAbstractTransfer)
632
    {
633
        $this->getFactory()
634
            ->createProductUrlManager()
635
            ->deleteProductUrl($productAbstractTransfer);
636
    }
637
638
    /**
639
     * {@inheritDoc}
640
     *
641
     * @api
642
     *
643
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
644
     *
645
     * @return void
646
     */
647
    public function touchProductAbstractUrlActive(ProductAbstractTransfer $productAbstractTransfer)
648
    {
649
        $this->getFactory()
650
            ->createProductUrlManager()
651
            ->touchProductAbstractUrlActive($productAbstractTransfer);
652
    }
653
654
    /**
655
     * {@inheritDoc}
656
     *
657
     * @api
658
     *
659
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
660
     *
661
     * @return void
662
     */
663
    public function touchProductAbstractUrlDeleted(ProductAbstractTransfer $productAbstractTransfer)
664
    {
665
        $this->getFactory()
666
            ->createProductUrlManager()
667
            ->touchProductAbstractUrlDeleted($productAbstractTransfer);
668
    }
669
670
    /**
671
     * {@inheritDoc}
672
     *
673
     * @api
674
     *
675
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
676
     * @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
677
     *
678
     * @return string
679
     */
680
    public function getLocalizedProductAbstractName(ProductAbstractTransfer $productAbstractTransfer, LocaleTransfer $localeTransfer)
681
    {
682
        return $this->getFactory()
683
            ->createProductAbstractNameGenerator()
684
            ->getLocalizedProductAbstractName($productAbstractTransfer, $localeTransfer);
685
    }
686
687
    /**
688
     * {@inheritDoc}
689
     *
690
     * @api
691
     *
692
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer
693
     * @param \Generated\Shared\Transfer\LocaleTransfer $localeTransfer
694
     *
695
     * @return string
696
     */
697
    public function getLocalizedProductConcreteName(ProductConcreteTransfer $productConcreteTransfer, LocaleTransfer $localeTransfer)
698
    {
699
        return $this->getFactory()
700
            ->createProductConcreteNameGenerator()
701
            ->getLocalizedProductConcreteName($productConcreteTransfer, $localeTransfer);
702
    }
703
704
    /**
705
     * {@inheritDoc}
706
     *
707
     * @api
708
     *
709
     * @param int $idProductConcrete
710
     *
711
     * @return void
712
     */
713
    public function activateProductConcrete($idProductConcrete)
714
    {
715
        $this->getFactory()
716
            ->createProductConcreteActivator()
717
            ->activateProductConcrete($idProductConcrete);
718
    }
719
720
    /**
721
     * {@inheritDoc}
722
     *
723
     * @api
724
     *
725
     * @param int $idProductConcrete
726
     *
727
     * @return void
728
     */
729
    public function deactivateProductConcrete($idProductConcrete)
730
    {
731
        $this->getFactory()
732
            ->createProductConcreteActivator()
733
            ->deactivateProductConcrete($idProductConcrete);
734
    }
735
736
    /**
737
     * {@inheritDoc}
738
     *
739
     * @api
740
     *
741
     * @param array<string> $productConcreteSkus
742
     *
743
     * @return void
744
     */
745
    public function deactivateProductConcretesByConcreteSkus(array $productConcreteSkus): void
746
    {
747
        $this->getFactory()
748
            ->createProductConcreteActivator()
749
            ->deactivateProductConcretesByConcreteSkus($productConcreteSkus);
750
    }
751
752
    /**
753
     * {@inheritDoc}
754
     *
755
     * @api
756
     *
757
     * @param array $superAttributes
758
     * @param int $idProductConcrete
759
     *
760
     * @return array
761
     */
762
    public function generateAttributePermutations(array $superAttributes, $idProductConcrete)
763
    {
764
        return $this->getFactory()
765
            ->createAttributePermutationGenerator()
766
            ->generateAttributePermutations($superAttributes, $idProductConcrete);
767
    }
768
769
    /**
770
     * {@inheritDoc}
771
     *
772
     * @api
773
     *
774
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
775
     * @param array $attributeCollection
776
     *
777
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
778
     */
779
    public function generateVariants(ProductAbstractTransfer $productAbstractTransfer, array $attributeCollection)
780
    {
781
        return $this->getFactory()
782
            ->createProductVariantGenerator()
783
            ->generate($productAbstractTransfer, $attributeCollection);
784
    }
785
786
    /**
787
     * {@inheritDoc}
788
     *
789
     * @api
790
     *
791
     * @param int $idProductAbstract
792
     *
793
     * @return bool
794
     */
795
    public function isProductActive($idProductAbstract)
796
    {
797
        return $this->getFactory()
798
            ->createProductAbstractStatusChecker()
799
            ->isActive($idProductAbstract);
800
    }
801
802
    /**
803
     * {@inheritDoc}
804
     *
805
     * @api
806
     *
807
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer
808
     *
809
     * @return bool
810
     */
811
    public function isProductConcreteActive(ProductConcreteTransfer $productConcreteTransfer): bool
812
    {
813
        return $this->getFactory()
814
            ->createProductConcreteStatusChecker()
815
            ->isActive($productConcreteTransfer);
816
    }
817
818
    /**
819
     * {@inheritDoc}
820
     *
821
     * @api
822
     *
823
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
824
     * @param \Generated\Shared\Transfer\LocaleTransfer|null $localeTransfer
825
     *
826
     * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException
827
     *
828
     * @return array
829
     */
830
    public function getCombinedAbstractAttributeKeys(ProductAbstractTransfer $productAbstractTransfer, ?LocaleTransfer $localeTransfer = null)
831
    {
832
        return $this->getFactory()
833
            ->createAttributeLoader()
834
            ->getCombinedAbstractAttributeKeys($productAbstractTransfer, $localeTransfer);
835
    }
836
837
    /**
838
     * {@inheritDoc}
839
     *
840
     * @api
841
     *
842
     * @param array<int> $productIds
843
     * @param \Generated\Shared\Transfer\LocaleTransfer|null $localeTransfer
844
     *
845
     * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException
846
     *
847
     * @return array
848
     */
849
    public function getCombinedAbstractAttributeKeysForProductIds($productIds, ?LocaleTransfer $localeTransfer = null)
850
    {
851
        return $this->getFactory()
852
            ->createAttributeLoader()
853
            ->getCombinedAbstractAttributeKeysForProductIds($productIds, $localeTransfer);
854
    }
855
856
    /**
857
     * {@inheritDoc}
858
     *
859
     * @api
860
     *
861
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer
862
     * @param \Generated\Shared\Transfer\LocaleTransfer|null $localeTransfer
863
     *
864
     * @return array
865
     */
866
    public function getCombinedConcreteAttributes(ProductConcreteTransfer $productConcreteTransfer, ?LocaleTransfer $localeTransfer = null)
867
    {
868
        return $this->getFactory()
869
            ->createAttributeLoader()
870
            ->getCombinedConcreteAttributes($productConcreteTransfer, $localeTransfer);
871
    }
872
873
    /**
874
     * {@inheritDoc}
875
     *
876
     * @api
877
     *
878
     * @param \Generated\Shared\Transfer\RawProductAttributesTransfer $rawProductAttributesTransfer
879
     *
880
     * @return array
881
     */
882
    public function combineRawProductAttributes(RawProductAttributesTransfer $rawProductAttributesTransfer)
883
    {
884
        return $this->getFactory()
885
            ->createAttributeMerger()
886
            ->merge($rawProductAttributesTransfer);
887
    }
888
889
    /**
890
     * {@inheritDoc}
891
     *
892
     * @api
893
     *
894
     * @param array $attributes
895
     *
896
     * @return string
897
     */
898
    public function encodeProductAttributes(array $attributes)
899
    {
900
        return $this->getFactory()
901
            ->createAttributeEncoder()
902
            ->encodeAttributes($attributes);
903
    }
904
905
    /**
906
     * {@inheritDoc}
907
     *
908
     * @api
909
     *
910
     * @param string $attributes
911
     *
912
     * @return array
913
     */
914
    public function decodeProductAttributes($attributes)
915
    {
916
        return $this->getFactory()
917
            ->createAttributeEncoder()
918
            ->decodeAttributes($attributes);
919
    }
920
921
    /**
922
     * {@inheritDoc}
923
     *
924
     * @api
925
     *
926
     * @param int $idProductConcrete
927
     *
928
     * @throws \Spryker\Zed\Product\Business\Exception\MissingProductException
929
     *
930
     * @return int
931
     */
932
    public function getProductAbstractIdByConcreteId(int $idProductConcrete): int
933
    {
934
        return $this->getFactory()
935
            ->createProductConcreteManager()
936
            ->getProductAbstractIdByConcreteId($idProductConcrete);
937
    }
938
939
    /**
940
     * {@inheritDoc}
941
     *
942
     * @api
943
     *
944
     * @param string $suggestion
945
     *
946
     * @return array<string>
947
     */
948
    public function suggestProductAbstract(string $suggestion): array
949
    {
950
        return $this->getFactory()
951
            ->createProductSuggester()
952
            ->suggestProductAbstract($suggestion);
953
    }
954
955
    /**
956
     * {@inheritDoc}
957
     *
958
     * @api
959
     *
960
     * @param string $suggestion
961
     * @param \Generated\Shared\Transfer\PaginationTransfer $paginationTransfer
962
     *
963
     * @return \Generated\Shared\Transfer\ProductAbstractSuggestionCollectionTransfer
964
     */
965
    public function getPaginatedProductAbstractSuggestions(
966
        string $suggestion,
967
        PaginationTransfer $paginationTransfer
968
    ): ProductAbstractSuggestionCollectionTransfer {
969
        return $this->getFactory()
970
            ->createProductSuggester()
971
            ->getPaginatedProductAbstractSuggestions($suggestion, $paginationTransfer);
972
    }
973
974
    /**
975
     * {@inheritDoc}
976
     *
977
     * @api
978
     *
979
     * @param string $suggestion
980
     *
981
     * @return array<string>
982
     */
983
    public function suggestProductConcrete(string $suggestion): array
984
    {
985
        return $this->getFactory()
986
            ->createProductSuggester()
987
            ->suggestProductConcrete($suggestion);
988
    }
989
990
    /**
991
     * {@inheritDoc}
992
     *
993
     * @api
994
     *
995
     * @param int $idProductAbstract
996
     *
997
     * @return array<int>
998
     */
999
    public function findProductConcreteIdsByAbstractProductId(int $idProductAbstract): array
1000
    {
1001
        return $this->getFactory()
1002
            ->createProductConcreteManager()
1003
            ->findProductConcreteIdsByAbstractProductId($idProductAbstract);
1004
    }
1005
1006
    /**
1007
     * {@inheritDoc}
1008
     *
1009
     * @api
1010
     *
1011
     * @param array<int> $productConcreteIds
1012
     *
1013
     * @return array<int>
1014
     */
1015
    public function getProductAbstractIdsByProductConcreteIds(array $productConcreteIds): array
1016
    {
1017
        return $this->getFactory()
1018
            ->createProductConcreteManager()
1019
            ->getProductAbstractIdsByProductConcreteIds($productConcreteIds);
1020
    }
1021
1022
    /**
1023
     * {@inheritDoc}
1024
     *
1025
     * @api
1026
     *
1027
     * @param array<string> $skus
1028
     *
1029
     * @return array<int>
1030
     */
1031
    public function getProductConcreteIdsByConcreteSkus(array $skus): array
1032
    {
1033
        return $this->getFactory()
1034
            ->createProductConcreteManager()
1035
            ->getProductConcreteIdsByConcreteSkus($skus);
1036
    }
1037
1038
    /**
1039
     * {@inheritDoc}
1040
     *
1041
     * @api
1042
     *
1043
     * @param array<int> $productIds
1044
     *
1045
     * @return array
1046
     */
1047
    public function getProductConcreteSkusByConcreteIds(array $productIds): array
1048
    {
1049
        return $this->getFactory()
1050
            ->createProductConcreteManager()
1051
            ->getProductConcreteSkusByConcreteIds($productIds);
1052
    }
1053
1054
    /**
1055
     * {@inheritDoc}
1056
     *
1057
     * @api
1058
     *
1059
     * @param \Generated\Shared\Transfer\ProductAbstractTransfer $productAbstractTransfer
1060
     * @param \Generated\Shared\Transfer\ProductConcreteTransfer $productConcreteTransfer
1061
     *
1062
     * @return string
1063
     */
1064
    public function generateProductConcreteSku(ProductAbstractTransfer $productAbstractTransfer, ProductConcreteTransfer $productConcreteTransfer): string
1065
    {
1066
        return $this->getFactory()
1067
            ->createSkuGenerator()
1068
            ->generateProductConcreteSku($productAbstractTransfer, $productConcreteTransfer);
1069
    }
1070
1071
    /**
1072
     * {@inheritDoc}
1073
     *
1074
     * @api
1075
     *
1076
     * @param array<int> $productIds
1077
     *
1078
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
1079
     */
1080
    public function getProductConcreteTransfersByProductIds(array $productIds): array
1081
    {
1082
        return $this->getRepository()
1083
            ->getProductConcreteTransfersByProductIds($productIds);
1084
    }
1085
1086
    /**
1087
     * {@inheritDoc}
1088
     *
1089
     * @api
1090
     *
1091
     * @param array<int> $productAbstractIds
1092
     *
1093
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
1094
     */
1095
    public function getProductConcreteTransfersByProductAbstractIds(array $productAbstractIds): array
1096
    {
1097
        return $this->getRepository()
1098
            ->getProductConcreteTransfersByProductAbstractIds($productAbstractIds);
1099
    }
1100
1101
    /**
1102
     * {@inheritDoc}
1103
     *
1104
     * @api
1105
     *
1106
     * @param array $productConcreteSkus
1107
     *
1108
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
1109
     */
1110
    public function getRawProductConcreteTransfersByConcreteSkus(array $productConcreteSkus): array
1111
    {
1112
        return $this->getFactory()
1113
            ->createProductConcreteManager()
1114
            ->getProductConcretesByConcreteSkus($productConcreteSkus);
1115
    }
1116
1117
    /**
1118
     * {@inheritDoc}
1119
     *
1120
     * @api
1121
     *
1122
     * @param \Generated\Shared\Transfer\FilterTransfer $filterTransfer
1123
     *
1124
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
1125
     */
1126
    public function getProductConcretesByFilter(FilterTransfer $filterTransfer): array
1127
    {
1128
        return $this->getRepository()->getProductConcretesByFilter($filterTransfer);
1129
    }
1130
1131
    /**
1132
     * {@inheritDoc}
1133
     *
1134
     * @api
1135
     *
1136
     * @param \Generated\Shared\Transfer\FilterTransfer $filterTransfer
1137
     *
1138
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
1139
     */
1140
    public function getRawProductConcreteTransfersByFilter(FilterTransfer $filterTransfer): array
1141
    {
1142
        return $this->getRepository()->getRawProductConcreteTransfersByFilter($filterTransfer);
1143
    }
1144
1145
    /**
1146
     * {@inheritDoc}
1147
     *
1148
     * @api
1149
     *
1150
     * @param \Generated\Shared\Transfer\ProductUrlCriteriaFilterTransfer $productUrlCriteriaFilterTransfer
1151
     *
1152
     * @return array<\Generated\Shared\Transfer\UrlTransfer>
1153
     */
1154
    public function getProductUrls(ProductUrlCriteriaFilterTransfer $productUrlCriteriaFilterTransfer): array
1155
    {
1156
        return $this->getRepository()->getProductUrls($productUrlCriteriaFilterTransfer);
1157
    }
1158
1159
    /**
1160
     * {@inheritDoc}
1161
     *
1162
     * @api
1163
     *
1164
     * @param array<string> $productAbstractSkus
1165
     *
1166
     * @return array<\Generated\Shared\Transfer\ProductAbstractTransfer>
1167
     */
1168
    public function getRawProductAbstractTransfersByAbstractSkus(array $productAbstractSkus): array
1169
    {
1170
        return $this->getRepository()->getRawProductAbstractTransfersByAbstractSkus($productAbstractSkus);
1171
    }
1172
1173
    /**
1174
     * {@inheritDoc}
1175
     *
1176
     * @api
1177
     *
1178
     * @param \Generated\Shared\Transfer\ProductCriteriaTransfer $productCriteriaTransfer
1179
     *
1180
     * @return array<\Generated\Shared\Transfer\ProductConcreteTransfer>
1181
     */
1182
    public function getProductConcretesByCriteria(ProductCriteriaTransfer $productCriteriaTransfer): array
1183
    {
1184
        return $this->getRepository()->getProductConcretesByCriteria($productCriteriaTransfer);
1185
    }
1186
1187
    /**
1188
     * {@inheritDoc}
1189
     *
1190
     * @api
1191
     *
1192
     * @param \Generated\Shared\Transfer\ProductConcreteCollectionTransfer $productConcreteCollectionTransfer
1193
     *
1194
     * @return void
1195
     */
1196
    public function createProductConcreteCollection(
1197
        ProductConcreteCollectionTransfer $productConcreteCollectionTransfer
1198
    ): void {
1199
        $this->getFactory()
1200
            ->createProductConcreteWriter()
1201
            ->createProductConcreteCollection($productConcreteCollectionTransfer);
1202
    }
1203
1204
    /**
1205
     * {@inheritDoc}
1206
     *
1207
     * @api
1208
     *
1209
     * @param array<int> $productAbstractIds
1210
     *
1211
     * @return array<int, string>
1212
     */
1213
    public function getProductAbstractLocalizedAttributeNamesIndexedByIdProductAbstract(array $productAbstractIds): array
1214
    {
1215
        return $this->getRepository()
1216
            ->getProductAbstractLocalizedAttributeNamesIndexedByIdProductAbstract($productAbstractIds);
1217
    }
1218
1219
    /**
1220
     * {@inheritDoc}
1221
     *
1222
     * @api
1223
     *
1224
     * @param \Generated\Shared\Transfer\ProductPublisherConfigTransfer $productPublisherConfigTransfer
1225
     *
1226
     * @throws \Spryker\Zed\Product\Business\Exception\ProductPublisherEventNameMismatchException
1227
     * @throws \Spryker\Zed\Product\Business\Exception\ProductPublisherWrongChunkSizeException
1228
     *
1229
     * @return void
1230
     */
1231
    public function emitPublishProductToMessageBroker(ProductPublisherConfigTransfer $productPublisherConfigTransfer): void
1232
    {
1233
        $this->getFactory()->createProductMessageBrokerPublisher()->publish($productPublisherConfigTransfer);
1234
    }
1235
1236
    /**
1237
     * {@inheritDoc}
1238
     *
1239
     * @api
1240
     *
1241
     * @param \Generated\Shared\Transfer\MessageSendingContextTransfer $messageSendingContextTransfer
1242
     *
1243
     * @return bool
1244
     */
1245
    public function canPublishMessage(MessageSendingContextTransfer $messageSendingContextTransfer): bool
1246
    {
1247
        return $this->getFactory()->createProductMessageBrokerPublisher()
1248
            ->canPublishMessage($messageSendingContextTransfer);
1249
    }
1250
1251
    /**
1252
     * {@inheritDoc}
1253
     *
1254
     * @api
1255
     *
1256
     * @param array<\Generated\Shared\Transfer\EventEntityTransfer> $eventEntityTransfers
1257
     *
1258
     * @return void
1259
     */
1260
    public function publishProductToMessageBrokerByProductAbstractEvents(array $eventEntityTransfers): void
1261
    {
1262
        $this->getFactory()->createProductMessageBrokerPublisher()->publishByProductAbstractEvents($eventEntityTransfers);
1263
    }
1264
1265
    /**
1266
     * {@inheritDoc}
1267
     *
1268
     * @api
1269
     *
1270
     * @param array<\Generated\Shared\Transfer\EventEntityTransfer> $eventEntityTransfers
1271
     *
1272
     * @return void
1273
     */
1274
    public function publishProductToMessageBrokerByProductEvents(array $eventEntityTransfers): void
1275
    {
1276
        $this->getFactory()->createProductMessageBrokerPublisher()->publishByProductEvents($eventEntityTransfers);
1277
    }
1278
1279
    /**
1280
     * {@inheritDoc}
1281
     *
1282
     * @api
1283
     *
1284
     * @param \Generated\Shared\Transfer\ProductPublisherConfigTransfer $productPublisherConfigTransfer
1285
     *
1286
     * @return void
1287
     */
1288
    public function emitUnpublishProductToMessageBroker(ProductPublisherConfigTransfer $productPublisherConfigTransfer): void
1289
    {
1290
        $this->getFactory()->createProductMessageBrokerPublisher()->unpublish($productPublisherConfigTransfer);
1291
    }
1292
1293
    /**
1294
     * {@inheritDoc}
1295
     *
1296
     * @api
1297
     *
1298
     * @param \Generated\Shared\Transfer\ProductExportCriteriaTransfer $productExportCriteriaTransfer
1299
     *
1300
     * @return void
1301
     */
1302
    public function triggerProductExportEvents(ProductExportCriteriaTransfer $productExportCriteriaTransfer): void
1303
    {
1304
        $this->getFactory()->createProductEventBusExporter()->export($productExportCriteriaTransfer);
1305
    }
1306
1307
    /**
1308
     * {@inheritDoc}
1309
     *
1310
     * @api
1311
     *
1312
     * @param \Generated\Shared\Transfer\ProductConcreteCriteriaTransfer $productConcreteCriteriaTransfer
1313
     *
1314
     * @return \Generated\Shared\Transfer\ProductConcreteCollectionTransfer
1315
     */
1316
    public function getProductConcreteCollection(
1317
        ProductConcreteCriteriaTransfer $productConcreteCriteriaTransfer
1318
    ): ProductConcreteCollectionTransfer {
1319
        return $this->getFactory()
1320
            ->createProductConcreteReader()
1321
            ->getProductConcreteCollection($productConcreteCriteriaTransfer);
1322
    }
1323
1324
    /**
1325
     * {@inheritDoc}
1326
     *
1327
     * @api
1328
     *
1329
     * @param \Generated\Shared\Transfer\ProductAbstractCriteriaTransfer $productAbstractCriteriaTransfer
1330
     *
1331
     * @return \Generated\Shared\Transfer\ProductAbstractCollectionTransfer
1332
     */
1333
    public function getProductAbstractCollection(ProductAbstractCriteriaTransfer $productAbstractCriteriaTransfer): ProductAbstractCollectionTransfer
1334
    {
1335
        return $this->getFactory()->createProductAbstractReader()->getProductAbstractCollection($productAbstractCriteriaTransfer);
1336
    }
1337
1338
    /**
1339
     * {@inheritDoc}
1340
     *
1341
     * @api
1342
     *
1343
     * @param \Generated\Shared\Transfer\ProductAttributeKeyCriteriaTransfer $productAttributeKeyCriteriaTransfer
1344
     *
1345
     * @return \Generated\Shared\Transfer\ProductAttributeKeyCollectionTransfer
1346
     */
1347
    public function getProductAttributeKeyCollection(
1348
        ProductAttributeKeyCriteriaTransfer $productAttributeKeyCriteriaTransfer
1349
    ): ProductAttributeKeyCollectionTransfer {
1350
        return $this->getRepository()->getProductAttributeKeyCollection($productAttributeKeyCriteriaTransfer);
1351
    }
1352
}
1353