1
+ <?php
2
+
3
+ namespace Develo \Typesense \Observer ;
4
+
5
+ use Magento \Framework \Event \ObserverInterface ;
6
+ use Magento \Framework \Event \Observer as EventObserver ;
7
+ use Magento \Framework \App \RequestInterface ;
8
+ use \Develo \Typesense \Adapter \Client ;
9
+ use Algolia \AlgoliaSearch \Helper \Data as AlgoliaHelper ;
10
+
11
+ class ConfigChange implements ObserverInterface
12
+ {
13
+
14
+ /**
15
+ * @var RequestInterface
16
+ */
17
+ private $ request ;
18
+
19
+ /**
20
+ * $var Client
21
+ */
22
+ private $ typesenseClient ;
23
+
24
+ /**
25
+ * $var AlgoliaHelper
26
+ */
27
+ private $ algoliaHelper ;
28
+
29
+ /**
30
+ * $var Devloops\Typesence\Collections
31
+ */
32
+ private $ typeSenseCollecitons ;
33
+
34
+ /**
35
+ * ConfigChange constructor.
36
+ * @param RequestInterface $request
37
+ */
38
+ public function __construct (
39
+ RequestInterface $ request ,
40
+ Client $ client ,
41
+ AlgoliaHelper $ algoliaHelper
42
+ ) {
43
+ $ this ->request = $ request ;
44
+ $ this ->typesenseClient = $ client ->getTypesenseClient ();
45
+ $ this ->algoliaHelper = $ algoliaHelper ;
46
+ $ this ->typeSenseCollecitons = $ this ->typesenseClient ->collections ;
47
+ }
48
+
49
+ /**
50
+ * Creates Indexes in Typesense after credentials have been updated
51
+ */
52
+ public function execute (EventObserver $ observer )
53
+ {
54
+ $ indexes = $ this ->algoliaHelper ->getIndexDataByStoreIds ();
55
+ unset($ indexes [0 ]); //skip admin store
56
+
57
+ $ existingCollections = $ this ->getExistingCollections ();
58
+
59
+ foreach ($ indexes as $ index ){
60
+ if (!isset ($ existingCollections [$ index ["indexName " ]."_products " ])){
61
+ $ this ->typeSenseCollecitons ->create (
62
+ [
63
+ 'name ' => $ index ["indexName " ]."_products " ,
64
+ 'fields ' => [['name ' => 'name ' ,'type ' => 'string ' ]]
65
+ ]
66
+ );
67
+ }
68
+ }
69
+
70
+ return $ this ;
71
+ }
72
+
73
+ /**
74
+ * Gets existing collections from typesense
75
+ */
76
+ private function getExistingCollections (){
77
+ $ collections = $ this ->typeSenseCollecitons ->retrieve ();
78
+ $ existingCollections =[];
79
+ foreach ($ collections as $ collection ) {
80
+ $ existingCollections [$ collection ["name " ]] = $ collection ;
81
+ }
82
+ return $ existingCollections ;
83
+ }
84
+ }
0 commit comments