Skip to content

Commit

Permalink
feat(analytics): add Analytics events API support
Browse files Browse the repository at this point in the history
Implements analytics events tracking capabilities to complement existing rules
functionality. Adds ability to create custom analytics events with type, name
and data fields.

Changes include:
- New AnalyticsEvents class for event operations
- Integration with Analytics class
- Test coverage with sample search event creation
- Helper updates for events in analytics rules
- Documentation updates on how to use new feature

feat(analytics): add AnalyticsEvents class
test(analytics): add AnalyticsEventsTest
feat(analytics): integrate events into Analytics class
refactor(helper): update createTestAnalyticsRule for events
docs(analytics): add documenation on proper analytics rules usage
  • Loading branch information
tharropoulos committed Nov 1, 2024
1 parent d7ebd83 commit 64d5f42
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 1 deletion.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,20 @@ AnalyticsRuleSchema rule = client.analytics().rules("failed-searches").retrieve(
client.analytics().rules("failed-searches").delete();
```

#### Create an analytics event
```java
AnalyticsEventCreateSchema analyticsEvent = new AnalyticsEventCreateSchema()
.type("conversion")
.name("purchase_made")
.data(Map.of(
"product_id", "123",
"user_id", "user_456",
"amount", "99.99"
));

client.analytics().events().create(analyticsEvent);
```

### Create an API key
```java
ApiKeySchema apiKeySchema = new ApiKeySchema();
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/org/typesense/api/Analytics.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ public class Analytics {
private final ApiCall apiCall;
private final AnalyticsRules rules;
private final Map<String, AnalyticsRule> individualRules;
private final AnalyticsEvents events;

public Analytics(ApiCall apiCall) {
this.apiCall = apiCall;
this.rules = new AnalyticsRules(this.apiCall);
this.individualRules = new HashMap<>();
this.events = new AnalyticsEvents(this.apiCall);
}

public AnalyticsRules rules() {
Expand All @@ -28,4 +30,8 @@ public AnalyticsRule rules(String ruleId) {
retVal = this.individualRules.get(ruleId);
return retVal;
}

public AnalyticsEvents events() {
return this.events;
}
}
18 changes: 18 additions & 0 deletions src/main/java/org/typesense/api/AnalyticsEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package org.typesense.api;

import org.typesense.model.AnalyticsEventCreateResponse;
import org.typesense.model.AnalyticsEventCreateSchema;


public class AnalyticsEvents {
private final ApiCall apiCall;
public final static String RESOURCE_PATH = "/analytics/events";

public AnalyticsEvents(ApiCall apiCall) {
this.apiCall = apiCall;
}

public AnalyticsEventCreateResponse create(AnalyticsEventCreateSchema event) throws Exception {
return this.apiCall.post(RESOURCE_PATH, event, null, AnalyticsEventCreateResponse.class);
}
}
47 changes: 47 additions & 0 deletions src/test/java/org/typesense/api/AnalyticsEventsTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package org.typesense.api;

import java.util.Map;

import org.junit.jupiter.api.AfterEach;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.typesense.model.AnalyticsEventCreateResponse;
import org.typesense.model.AnalyticsEventCreateSchema;

public class AnalyticsEventsTest {

private Client client;
private Helper helper;

@BeforeEach
void setUp() throws Exception {
helper = new Helper();
client = helper.getClient();
helper.teardown();
helper.createTestCollection();
helper.createTestQueryCollection();
helper.createTestAnalyticsRule();
}

@AfterEach
void tearDown() throws Exception {
helper.teardown();
}

@Test
void testCreate() throws Exception {
AnalyticsEventCreateSchema analyticsEvent = new AnalyticsEventCreateSchema()
.type("search")
.name("products_search_event")
.data(Map.of(
"q", "running shoes",
"user_id", "1234"));

AnalyticsEventCreateResponse result = this.client.analytics().events().create(analyticsEvent);
assertNotNull(result);
assertEquals(true, result.isOk());

}
}
7 changes: 6 additions & 1 deletion src/test/java/org/typesense/api/Helper.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import org.typesense.model.AnalyticsRuleParameters;
import org.typesense.model.AnalyticsRuleParametersDestination;
import org.typesense.model.AnalyticsRuleParametersSource;
import org.typesense.model.AnalyticsRuleParametersSourceEvents;
import org.typesense.model.AnalyticsRuleSchema;
import org.typesense.model.AnalyticsRuleUpsertSchema;
import org.typesense.model.ApiKey;
Expand Down Expand Up @@ -113,7 +114,11 @@ public void createTestAnalyticsRule() throws Exception {
.type(AnalyticsRuleUpsertSchema.TypeEnum.NOHITS_QUERIES)
.params(new AnalyticsRuleParameters()
.source(new AnalyticsRuleParametersSource()
.collections(Arrays.asList("books")))
.collections(Arrays.asList("books"))
.events(Arrays.asList(
new AnalyticsRuleParametersSourceEvents()
.type("search")
.name("products_search_event"))))
.destination(new AnalyticsRuleParametersDestination()
.collection("queries")));

Expand Down

0 comments on commit 64d5f42

Please sign in to comment.