Skip to content

Commit 9979908

Browse files
committed
feat(analytics): update analytic rule classes to new api
1 parent 40e0977 commit 9979908

File tree

2 files changed

+85
-19
lines changed

2 files changed

+85
-19
lines changed
Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,42 @@
11
package org.typesense.api;
22

33
import org.typesense.api.utils.URLEncoding;
4-
import org.typesense.model.AnalyticsRuleDeleteResponse;
5-
import org.typesense.model.AnalyticsRuleSchema;
4+
import org.typesense.model.AnalyticsRuleUpdate;
65

76
public class AnalyticsRule {
87
private final ApiCall apiCall;
98
private final String ruleId;
9+
private final AnalyticsRuleSerializer serializer;
1010

1111
public AnalyticsRule(String ruleId, ApiCall apiCall) {
12-
this.apiCall = apiCall;
12+
this.apiCall = apiCall;
1313
this.ruleId = ruleId;
14+
this.serializer = new AnalyticsRuleSerializer();
15+
}
16+
17+
public AnalyticsRule(String ruleId, ApiCall apiCall, AnalyticsRuleSerializer serializer) {
18+
this.apiCall = apiCall;
19+
this.ruleId = ruleId;
20+
this.serializer = serializer;
1421
}
1522

23+
public org.typesense.model.AnalyticsRule retrieve() throws Exception {
24+
String response = this.apiCall.get(this.getEndpoint(), null, String.class);
25+
return serializer.parseFromJson(response);
26+
}
1627

17-
public AnalyticsRuleSchema retrieve() throws Exception {
18-
return this.apiCall.get(this.getEndpoint(), null, AnalyticsRuleSchema.class);
28+
public org.typesense.model.AnalyticsRule delete() throws Exception {
29+
String response = this.apiCall.delete(this.getEndpoint(), null, String.class);
30+
org.typesense.model.AnalyticsRule result = new org.typesense.model.AnalyticsRule();
31+
result.name(this.ruleId);
32+
return result;
1933
}
2034

21-
public AnalyticsRuleDeleteResponse delete() throws Exception {
22-
return this.apiCall.delete(this.getEndpoint(), null, AnalyticsRuleDeleteResponse.class);
35+
public org.typesense.model.AnalyticsRule update(AnalyticsRuleUpdate rule) throws Exception {
36+
return this.apiCall.put(this.getEndpoint(), rule, null, org.typesense.model.AnalyticsRule.class);
2337
}
2438

2539
private String getEndpoint() {
2640
return AnalyticsRules.RESOURCE_PATH + "/" + URLEncoding.encodeURIComponent(ruleId);
2741
}
28-
2942
}
Lines changed: 64 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,83 @@
11
package org.typesense.api;
22

3-
import org.typesense.api.utils.URLEncoding;
4-
import org.typesense.model.AnalyticsRuleSchema;
5-
import org.typesense.model.AnalyticsRuleUpsertSchema;
6-
import org.typesense.model.AnalyticsRulesRetrieveSchema;
3+
import org.typesense.model.AnalyticsRule;
4+
import org.typesense.model.AnalyticsRuleCreate;
5+
import java.util.List;
76

87
public class AnalyticsRules {
98

109
private final ApiCall apiCall;
10+
private final AnalyticsRuleSerializer serializer;
1111
public final static String RESOURCE_PATH = "/analytics/rules";
1212

1313
public AnalyticsRules(ApiCall apiCall) {
1414
this.apiCall = apiCall;
15+
this.serializer = new AnalyticsRuleSerializer();
16+
}
17+
18+
public AnalyticsRules(ApiCall apiCall, AnalyticsRuleSerializer serializer) {
19+
this.apiCall = apiCall;
20+
this.serializer = serializer;
1521
}
1622

17-
public AnalyticsRuleSchema create(AnalyticsRuleSchema rule) throws Exception {
18-
return this.apiCall.post(RESOURCE_PATH, rule, null, AnalyticsRuleSchema.class);
23+
public AnalyticsRulesResponse create(List<AnalyticsRuleCreate> rules) throws Exception {
24+
String response = this.apiCall.post(RESOURCE_PATH, rules, null, String.class);
25+
return parseCreateResponse(response);
1926
}
2027

21-
public AnalyticsRuleSchema upsert(String name, AnalyticsRuleUpsertSchema rule) throws Exception {
22-
return this.apiCall.put(RESOURCE_PATH + "/" + URLEncoding.encodeURIComponent(name), rule, null,
23-
AnalyticsRuleSchema.class);
28+
public List<AnalyticsRule> retrieve() throws Exception {
29+
String response = this.apiCall.get(RESOURCE_PATH, null, String.class);
30+
return parseRetrieveResponse(response);
2431
}
2532

26-
public AnalyticsRulesRetrieveSchema retrieve() throws Exception {
27-
return this.apiCall.get(RESOURCE_PATH, null, AnalyticsRulesRetrieveSchema.class);
33+
/**
34+
* Parse the create response which can be either a single AnalyticsRule or an array
35+
*/
36+
private AnalyticsRulesResponse parseCreateResponse(String jsonResponse) throws Exception {
37+
List<AnalyticsRule> rules = serializer.parseListFromJson(jsonResponse);
38+
39+
for (AnalyticsRule rule : rules) {
40+
if (rule.getName() == null) {
41+
throw new RuntimeException("Analytics rule creation failed: rule name is null");
42+
}
43+
}
44+
45+
return new AnalyticsRulesResponse(rules);
46+
}
47+
48+
/**
49+
* Parse the retrieve response which is always an array of AnalyticsRule objects
50+
*/
51+
private List<AnalyticsRule> parseRetrieveResponse(String jsonResponse) throws Exception {
52+
List<AnalyticsRule> rules = serializer.parseListFromJson(jsonResponse);
53+
54+
return rules;
2855
}
2956

57+
/**
58+
* Response wrapper for analytics rules operations
59+
*/
60+
public static class AnalyticsRulesResponse {
61+
private final List<AnalyticsRule> rules;
62+
63+
public AnalyticsRulesResponse(List<AnalyticsRule> rules) {
64+
this.rules = rules;
65+
}
66+
67+
public List<AnalyticsRule> getRules() {
68+
return rules;
69+
}
70+
71+
public AnalyticsRule getFirstRule() {
72+
return rules.isEmpty() ? null : rules.get(0);
73+
}
74+
75+
public int getCount() {
76+
return rules.size();
77+
}
78+
79+
public boolean isEmpty() {
80+
return rules.isEmpty();
81+
}
82+
}
3083
}

0 commit comments

Comments
 (0)