ProductFacade::touchProductAbstractUrlDeleted()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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