Skip to content

Commit 64d5f42

Browse files
committed
feat(analytics): add Analytics events API support
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
1 parent d7ebd83 commit 64d5f42

File tree

5 files changed

+91
-1
lines changed

5 files changed

+91
-1
lines changed

README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,20 @@ AnalyticsRuleSchema rule = client.analytics().rules("failed-searches").retrieve(
192192
client.analytics().rules("failed-searches").delete();
193193
```
194194

195+
#### Create an analytics event
196+
```java
197+
AnalyticsEventCreateSchema analyticsEvent = new AnalyticsEventCreateSchema()
198+
.type("conversion")
199+
.name("purchase_made")
200+
.data(Map.of(
201+
"product_id", "123",
202+
"user_id", "user_456",
203+
"amount", "99.99"
204+
));
205+
206+
client.analytics().events().create(analyticsEvent);
207+
```
208+
195209
### Create an API key
196210
```java
197211
ApiKeySchema apiKeySchema = new ApiKeySchema();

src/main/java/org/typesense/api/Analytics.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ public class Analytics {
77
private final ApiCall apiCall;
88
private final AnalyticsRules rules;
99
private final Map<String, AnalyticsRule> individualRules;
10+
private final AnalyticsEvents events;
1011

1112
public Analytics(ApiCall apiCall) {
1213
this.apiCall = apiCall;
1314
this.rules = new AnalyticsRules(this.apiCall);
1415
this.individualRules = new HashMap<>();
16+
this.events = new AnalyticsEvents(this.apiCall);
1517
}
1618

1719
public AnalyticsRules rules() {
@@ -28,4 +30,8 @@ public AnalyticsRule rules(String ruleId) {
2830
retVal = this.individualRules.get(ruleId);
2931
return retVal;
3032
}
33+
34+
public AnalyticsEvents events() {
35+
return this.events;
36+
}
3137
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.typesense.api;
2+
3+
import org.typesense.model.AnalyticsEventCreateResponse;
4+
import org.typesense.model.AnalyticsEventCreateSchema;
5+
6+
7+
public class AnalyticsEvents {
8+
private final ApiCall apiCall;
9+
public final static String RESOURCE_PATH = "/analytics/events";
10+
11+
public AnalyticsEvents(ApiCall apiCall) {
12+
this.apiCall = apiCall;
13+
}
14+
15+
public AnalyticsEventCreateResponse create(AnalyticsEventCreateSchema event) throws Exception {
16+
return this.apiCall.post(RESOURCE_PATH, event, null, AnalyticsEventCreateResponse.class);
17+
}
18+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package org.typesense.api;
2+
3+
import java.util.Map;
4+
5+
import org.junit.jupiter.api.AfterEach;
6+
import static org.junit.jupiter.api.Assertions.assertEquals;
7+
import static org.junit.jupiter.api.Assertions.assertNotNull;
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Test;
10+
import org.typesense.model.AnalyticsEventCreateResponse;
11+
import org.typesense.model.AnalyticsEventCreateSchema;
12+
13+
public class AnalyticsEventsTest {
14+
15+
private Client client;
16+
private Helper helper;
17+
18+
@BeforeEach
19+
void setUp() throws Exception {
20+
helper = new Helper();
21+
client = helper.getClient();
22+
helper.teardown();
23+
helper.createTestCollection();
24+
helper.createTestQueryCollection();
25+
helper.createTestAnalyticsRule();
26+
}
27+
28+
@AfterEach
29+
void tearDown() throws Exception {
30+
helper.teardown();
31+
}
32+
33+
@Test
34+
void testCreate() throws Exception {
35+
AnalyticsEventCreateSchema analyticsEvent = new AnalyticsEventCreateSchema()
36+
.type("search")
37+
.name("products_search_event")
38+
.data(Map.of(
39+
"q", "running shoes",
40+
"user_id", "1234"));
41+
42+
AnalyticsEventCreateResponse result = this.client.analytics().events().create(analyticsEvent);
43+
assertNotNull(result);
44+
assertEquals(true, result.isOk());
45+
46+
}
47+
}

src/test/java/org/typesense/api/Helper.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import org.typesense.model.AnalyticsRuleParameters;
1010
import org.typesense.model.AnalyticsRuleParametersDestination;
1111
import org.typesense.model.AnalyticsRuleParametersSource;
12+
import org.typesense.model.AnalyticsRuleParametersSourceEvents;
1213
import org.typesense.model.AnalyticsRuleSchema;
1314
import org.typesense.model.AnalyticsRuleUpsertSchema;
1415
import org.typesense.model.ApiKey;
@@ -113,7 +114,11 @@ public void createTestAnalyticsRule() throws Exception {
113114
.type(AnalyticsRuleUpsertSchema.TypeEnum.NOHITS_QUERIES)
114115
.params(new AnalyticsRuleParameters()
115116
.source(new AnalyticsRuleParametersSource()
116-
.collections(Arrays.asList("books")))
117+
.collections(Arrays.asList("books"))
118+
.events(Arrays.asList(
119+
new AnalyticsRuleParametersSourceEvents()
120+
.type("search")
121+
.name("products_search_event"))))
117122
.destination(new AnalyticsRuleParametersDestination()
118123
.collection("queries")));
119124

0 commit comments

Comments
 (0)