Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/Analytics.php
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,4 @@ public function events()
}
return $this->events;
}
}
}
32 changes: 15 additions & 17 deletions src/AnalyticsEvents.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,42 @@

/**
* Class AnalyticsEvents
*
* Implements the updated analytics events API for Typesense +
*
* @package \Typesense
*/
class AnalyticsEvents
{
const RESOURCE_PATH = '/analytics/events';

/**
* @var ApiCall
*/
private ApiCall $apiCall;

/**
* AnalyticsEvents constructor.
*
* @param ApiCall $apiCall
*/
public function __construct(ApiCall $apiCall)
{
$this->apiCall = $apiCall;
}

/**
* @param array $params
*
* @return array
* Create an analytics event
*
* @param array $params Event parameters including name, event_type, and data
* @return array Response from the API
* @throws TypesenseClientError|HttpClientException
*/
public function create($params)
public function create(array $params)
{
return $this->apiCall->post($this->endpoint_path(), $params);
return $this->apiCall->post(self::RESOURCE_PATH, $params);
}

/**
* @return string
* Retrieve analytics events
*
* @param array $params Query parameters
* @return array Response from the API
*/
private function endpoint_path($operation = null)
public function retrieve(array $params = [])
{
return self::RESOURCE_PATH . ($operation === null ? '' : "/$operation");
return $this->apiCall->get(self::RESOURCE_PATH, $params);
}
}
}
47 changes: 47 additions & 0 deletions src/AnalyticsEventsV1.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

namespace Typesense;

/**
* Class AnalyticsEventsV1
*
* @package \Typesense
*/
class AnalyticsEventsV1
{
const RESOURCE_PATH = '/analytics/events';

/**
* @var ApiCall
*/
private ApiCall $apiCall;

/**
* AnalyticsEventsV1 constructor.
*
* @param ApiCall $apiCall
*/
public function __construct(ApiCall $apiCall)
{
$this->apiCall = $apiCall;
}

/**
* @param array $params
*
* @return array
* @throws TypesenseClientError|HttpClientException
*/
public function create($params)
{
return $this->apiCall->post($this->endpoint_path(), $params);
}

/**
* @return string
*/
private function endpoint_path($operation = null)
{
return self::RESOURCE_PATH . ($operation === null ? '' : "/$operation");
}
}
27 changes: 24 additions & 3 deletions src/AnalyticsRule.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,48 @@

class AnalyticsRule
{
private $ruleName;
private string $ruleName;
private ApiCall $apiCall;

public function __construct(string $ruleName, ApiCall $apiCall)
{
$this->ruleName = $ruleName;
$this->apiCall = $apiCall;
$this->apiCall = $apiCall;
}

/**
* Retrieve a specific analytics rule
*
* @return array Response from the API
*/
public function retrieve()
{
return $this->apiCall->get($this->endpointPath(), []);
}

/**
* Delete a specific analytics rule
*
* @return array Response from the API
*/
public function delete()
{
return $this->apiCall->delete($this->endpointPath());
}

/**
* Update a specific analytics rule
*
* @param array $params Rule parameters
* @return array Response from the API
*/
public function update(array $params)
{
return $this->apiCall->put($this->endpointPath(), $params);
}

private function endpointPath()
{
return AnalyticsRules::RESOURCE_PATH . '/' . encodeURIComponent($this->ruleName);
}
}
}
30 changes: 30 additions & 0 deletions src/AnalyticsRuleV1.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Typesense;

class AnalyticsRuleV1
{
private $ruleName;
private ApiCall $apiCall;

public function __construct(string $ruleName, ApiCall $apiCall)
{
$this->ruleName = $ruleName;
$this->apiCall = $apiCall;
}

public function retrieve()
{
return $this->apiCall->get($this->endpointPath(), []);
}

public function delete()
{
return $this->apiCall->delete($this->endpointPath());
}

private function endpointPath()
{
return AnalyticsRulesV1::RESOURCE_PATH . '/' . encodeURIComponent($this->ruleName);
}
}
61 changes: 28 additions & 33 deletions src/AnalyticsRules.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,69 +7,64 @@ class AnalyticsRules implements \ArrayAccess
const RESOURCE_PATH = '/analytics/rules';

private ApiCall $apiCall;
private $analyticsRules = [];

public function __construct(ApiCall $apiCall)
{
$this->apiCall = $apiCall;
}

public function __get($ruleName)
{
if (!isset($this->analyticsRules[$ruleName])) {
$this->analyticsRules[$ruleName] = new AnalyticsRule($ruleName, $this->apiCall);
}
return $this->analyticsRules[$ruleName];
}

public function upsert($ruleName, $params)
/**
* Create multiple analytics rules
*
* @param array $rules Array of rule objects
* @return array Response from the API
*/
public function create(array $rules)
{
return $this->apiCall->put($this->endpoint_path($ruleName), $params);
return $this->apiCall->post(self::RESOURCE_PATH, $rules);
}

/**
* Retrieve all analytics rules
*
* @return array Response from the API
*/
public function retrieve()
{
return $this->apiCall->get($this->endpoint_path(), []);
return $this->apiCall->get(self::RESOURCE_PATH, []);
}

private function endpoint_path($operation = null)
/**
* Get a specific rule by name
*
* @param string $ruleName
* @return AnalyticsRule
*/
public function __get($ruleName)
{
return self::RESOURCE_PATH . ($operation === null ? '' : "/" . encodeURIComponent($operation));
return new AnalyticsRule($ruleName, $this->apiCall);
}

/**
* @inheritDoc
* ArrayAccess implementation for backwards compatibility
*/
public function offsetExists($offset): bool
{
return isset($this->analyticsRules[$offset]);
return true; // Rules can be accessed by name
}

/**
* @inheritDoc
*/
public function offsetGet($offset): AnalyticsRule
{
if (!isset($this->analyticsRules[$offset])) {
$this->analyticsRules[$offset] = new AnalyticsRule($offset, $this->apiCall);
}

return $this->analyticsRules[$offset];
return new AnalyticsRule($offset, $this->apiCall);
}

/**
* @inheritDoc
*/
public function offsetSet($offset, $value): void
{
$this->analyticsRules[$offset] = $value;
// Not implemented for read-only access
}

/**
* @inheritDoc
*/
public function offsetUnset($offset): void
{
unset($this->analyticsRules[$offset]);
// Not implemented for read-only access
}
}
}
75 changes: 75 additions & 0 deletions src/AnalyticsRulesV1.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
<?php

namespace Typesense;

class AnalyticsRulesV1 implements \ArrayAccess
{
const RESOURCE_PATH = '/analytics/rules';

private ApiCall $apiCall;
private $analyticsRules = [];

public function __construct(ApiCall $apiCall)
{
$this->apiCall = $apiCall;
}

public function __get($ruleName)
{
if (!isset($this->analyticsRules[$ruleName])) {
$this->analyticsRules[$ruleName] = new AnalyticsRuleV1($ruleName, $this->apiCall);
}
return $this->analyticsRules[$ruleName];
}

public function upsert($ruleName, $params)
{
return $this->apiCall->put($this->endpoint_path($ruleName), $params);
}

public function retrieve()
{
return $this->apiCall->get($this->endpoint_path(), []);
}

private function endpoint_path($operation = null)
{
return self::RESOURCE_PATH . ($operation === null ? '' : "/" . encodeURIComponent($operation));
}

/**
* @inheritDoc
*/
public function offsetExists($offset): bool
{
return isset($this->analyticsRules[$offset]);
}

/**
* @inheritDoc
*/
public function offsetGet($offset): AnalyticsRuleV1
{
if (!isset($this->analyticsRules[$offset])) {
$this->analyticsRules[$offset] = new AnalyticsRuleV1($offset, $this->apiCall);
}

return $this->analyticsRules[$offset];
}

/**
* @inheritDoc
*/
public function offsetSet($offset, $value): void
{
$this->analyticsRules[$offset] = $value;
}

/**
* @inheritDoc
*/
public function offsetUnset($offset): void
{
unset($this->analyticsRules[$offset]);
}
}
Loading