Skip to content

Commit 903b722

Browse files
Merge pull request #42 from typesense/analytics
Analytics Rules
2 parents 2680d50 + 464bfa4 commit 903b722

File tree

5 files changed

+114
-7
lines changed

5 files changed

+114
-7
lines changed

src/Analytics.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Typesense;
4+
5+
class Analytics
6+
{
7+
const RESOURCE_PATH = '/analytics';
8+
9+
private ApiCall $apiCall;
10+
11+
public function __construct(ApiCall $apiCall)
12+
{
13+
$this->apiCall = $apiCall;
14+
}
15+
16+
public function rules()
17+
{
18+
if (!isset($this->rules)) {
19+
$this->rules = new AnalyticsRules($this->apiCall);
20+
}
21+
return $this->rules;
22+
}
23+
}

src/AnalyticsRule.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
namespace Typesense;
4+
5+
class AnalyticsRule
6+
{
7+
private $ruleName;
8+
private ApiCall $apiCall;
9+
10+
public function __construct(string $ruleName, ApiCall $apiCall)
11+
{
12+
$this->ruleName = $ruleName;
13+
$this->apiCall = $apiCall;
14+
}
15+
16+
public function retrieve()
17+
{
18+
return $this->apiCall->get($this->endpointPath(), []);
19+
}
20+
21+
public function delete()
22+
{
23+
return $this->apiCall->delete($this->endpointPath());
24+
}
25+
26+
private function endpointPath()
27+
{
28+
return AnalyticsRules::RESOURCE_PATH . '/' . $this->ruleName;
29+
}
30+
}

src/AnalyticsRules.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<?php
2+
3+
namespace Typesense;
4+
5+
class AnalyticsRules
6+
{
7+
const RESOURCE_PATH = '/analytics/rules';
8+
9+
private ApiCall $apiCall;
10+
private $analyticsRules = [];
11+
12+
public function __construct(ApiCall $apiCall)
13+
{
14+
$this->apiCall = $apiCall;
15+
}
16+
17+
public function __get($ruleName)
18+
{
19+
if (!isset($this->analyticsRules[$ruleName])) {
20+
$this->analyticsRules[$ruleName] = new AnalyticsRule($ruleName, $this->apiCall);
21+
}
22+
return $this->analyticsRules[$ruleName];
23+
}
24+
25+
public function upsert($ruleName, $params)
26+
{
27+
return $this->apiCall->put($this->endpoint_path($ruleName), $params);
28+
}
29+
30+
public function retrieve()
31+
{
32+
return $this->apiCall->get($this->endpoint_path(), []);
33+
}
34+
35+
private function endpoint_path($operation = null)
36+
{
37+
return self::RESOURCE_PATH . ($operation === null ? '' : "/$operation");
38+
}
39+
}

src/Client.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ class Client
6464
*/
6565
public Presets $presets;
6666

67+
/**
68+
* @var Analytics
69+
*/
70+
public Analytics $analytics;
71+
6772
/**
6873
* @var ApiCall
6974
*/
@@ -90,6 +95,7 @@ public function __construct(array $config)
9095
$this->operations = new Operations($this->apiCall);
9196
$this->multiSearch = new MultiSearch($this->apiCall);
9297
$this->presets = new Presets($this->apiCall);
98+
$this->analytics = new Analytics($this->apiCall);
9399
}
94100

95101
/**
@@ -163,4 +169,12 @@ public function getPresets(): Presets
163169
{
164170
return $this->presets;
165171
}
172+
173+
/**
174+
* @return Analytics
175+
*/
176+
public function getAnalytics(): Analytics
177+
{
178+
return $this->analytics;
179+
}
166180
}

src/Presets.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class Presets
1717
/**
1818
* @var ApiCall
1919
*/
20-
private ApiCall $apiCall;
20+
private $apiCall;
2121

2222
public const PRESETS_PATH = '/presets';
2323

@@ -39,7 +39,7 @@ public function __construct(ApiCall $apiCall)
3939
* @throws HttpClientException
4040
* @throws TypesenseClientError
4141
*/
42-
public function searchWithPreset($presetName): array|string
42+
public function searchWithPreset($presetName)
4343
{
4444
return $this->apiCall->post($this->multiSearchEndpointPath(), [], true, ['preset' => $presetName]);
4545
}
@@ -49,7 +49,7 @@ public function searchWithPreset($presetName): array|string
4949
* @throws HttpClientException
5050
* @throws TypesenseClientError
5151
*/
52-
public function get(): array|string
52+
public function get()
5353
{
5454
return $this->apiCall->get(static::PRESETS_PATH, []);
5555
}
@@ -61,10 +61,11 @@ public function get(): array|string
6161
* @throws HttpClientException
6262
* @throws TypesenseClientError
6363
*/
64-
public function put(array $options = []): array
64+
public function put(array $options = [])
6565
{
6666
$presetName = $options['preset_name'];
6767
$presetsData = $options['preset_data'];
68+
6869
return $this->apiCall->put($this->endpointPath($presetName), $presetsData);
6970
}
7071

@@ -74,7 +75,7 @@ public function put(array $options = []): array
7475
* @throws HttpClientException
7576
* @throws TypesenseClientError
7677
*/
77-
public function delete($presetName): array
78+
public function delete($presetName)
7879
{
7980
return $this->apiCall->delete($this->endpointPath($presetName));
8081
}
@@ -83,7 +84,7 @@ public function delete($presetName): array
8384
* @param $presetsName
8485
* @return string
8586
*/
86-
private function endpointPath($presetsName): string
87+
private function endpointPath($presetsName)
8788
{
8889
return sprintf(
8990
'%s/%s',
@@ -96,7 +97,7 @@ private function endpointPath($presetsName): string
9697
* @param $presetsName
9798
* @return string
9899
*/
99-
private function multiSearchEndpointPath(): string
100+
private function multiSearchEndpointPath()
100101
{
101102
return sprintf(
102103
'%s',

0 commit comments

Comments
 (0)