Skip to content

Commit 9f44782

Browse files
thewheatchoran
authored andcommitted
Add support for listing events (#173)
1 parent 283c8e8 commit 9f44782

File tree

5 files changed

+152
-4
lines changed

5 files changed

+152
-4
lines changed

README.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,22 @@ Event event = new Event()
313313
.setEventName("bought-hat")
314314
.setId("599d6aeeda850883ed8ba7c2");
315315
Event.create(event);
316-
```
317316

318317

318+
// List events of a user
319+
Map<String, String> params = Maps.newHashMap();
320+
params.put("type", "user");
321+
params.put("user_id", "1");
322+
// Alternatively list by Intercom ID
323+
// params.put("intercom_user_id", "541a144b201ebf2ec5000001");
324+
// Or by email
325+
// params.put("email", "[email protected]");
326+
EventCollection events = Event.list(params);
327+
while (events.hasNext()) {
328+
System.out.println(events.next().getEventName());
329+
}
330+
```
331+
319332
### Tags
320333

321334
```java

intercom-java/src/main/java/io/intercom/api/Event.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import com.google.common.collect.Lists;
99
import com.google.common.collect.Maps;
1010

11+
import java.net.URI;
1112
import java.util.ArrayList;
13+
import java.util.Arrays;
14+
import java.util.HashMap;
1215
import java.util.List;
1316
import java.util.Map;
1417

@@ -50,6 +53,13 @@ public static JobItemCollection<Event> listJobErrorFeed(String jobID)
5053
return Job.listJobErrorFeed(jobID, Event.class);
5154
}
5255

56+
public static EventCollection list(Map<String, String> params) throws InvalidException, AuthorizationException {
57+
if ((!params.containsKey("email")) && (!params.containsKey("user_id")) && (!params.containsKey("intercom_user_id"))) {
58+
throw new InvalidException("an event query must include an email, user_id or intercom_user_id parameter");
59+
}
60+
return DataResource.list(params, "events", EventCollection.class);
61+
}
62+
5363
@VisibleForTesting
5464
static List<JobItem<Event>> validateJobItems(List<JobItem<Event>> items) {
5565
final JobSupport jobSupport = new JobSupport();
@@ -101,6 +111,9 @@ static void validateCreateEvent(Event event) {
101111
@JsonProperty("user_id")
102112
private String userID;
103113

114+
@JsonProperty("intercom_user_id")
115+
private String intercomUserID;
116+
104117
@JsonProperty("metadata")
105118
private Map<String, Object> metadata = Maps.newHashMap();
106119

@@ -157,6 +170,15 @@ public Event setUserID(String userID) {
157170
return this;
158171
}
159172

173+
public String getIntercomUserID() {
174+
return intercomUserID ;
175+
}
176+
177+
public Event setIntercomUserID(String intercomUserID ) {
178+
this.intercomUserID = intercomUserID ;
179+
return this;
180+
}
181+
160182
public Event putMetadata(String name, String value) {
161183
metadata.put(name, value);
162184
return this;
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package io.intercom.api;
2+
3+
import java.util.Iterator;
4+
import java.util.List;
5+
6+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
7+
import com.fasterxml.jackson.annotation.JsonProperty;
8+
9+
@SuppressWarnings("UnusedDeclaration")
10+
@JsonIgnoreProperties(ignoreUnknown = true)
11+
public class EventCollection extends TypedDataCollection<Event> implements Iterator<Event> {
12+
protected TypedDataCollectionIterator<Event> iterator;
13+
14+
public EventCollection() {
15+
iterator = new TypedDataCollectionIterator<Event>(this);
16+
}
17+
18+
public EventCollection(List<Event> events) {
19+
this();
20+
this.page = events;
21+
}
22+
23+
@SuppressWarnings("EmptyMethod")
24+
@JsonProperty("events")
25+
@Override
26+
public List<Event> getPage() {
27+
return super.getPage();
28+
}
29+
30+
@Override
31+
public EventCollection nextPage() {
32+
return fetchNextPage(EventCollection.class);
33+
}
34+
35+
public boolean hasNext() {
36+
return iterator.hasNext();
37+
}
38+
39+
public Event next() {
40+
return iterator.next();
41+
}
42+
43+
public void remove() {
44+
iterator.remove();
45+
}
46+
}

intercom-java/src/test/java/io/intercom/api/EventTest.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,20 @@
11
package io.intercom.api;
22

3+
import com.fasterxml.jackson.databind.ObjectMapper;
34
import com.google.common.collect.Lists;
5+
import org.junit.BeforeClass;
46
import org.junit.Test;
57

6-
import static org.junit.Assert.assertTrue;
7-
import static org.junit.Assert.fail;
8+
import static io.intercom.api.TestSupport.load;
9+
import static org.junit.Assert.*;
810

911
public class EventTest {
12+
private static ObjectMapper mapper;
13+
14+
@BeforeClass
15+
public static void beforeClass() {
16+
mapper = MapperSupport.objectMapper();
17+
}
1018

1119
@Test
1220
public void testBulkValidation() {
@@ -180,4 +188,31 @@ public void testValid() {
180188
}
181189

182190
}
183-
}
191+
@Test
192+
public void testListing() throws Exception {
193+
String json = load("events.json");
194+
final EventCollection eventCollection = mapper.readValue(json, EventCollection.class);
195+
assertEquals(2, eventCollection.getPage().size());
196+
197+
final Event eventWithNoMetadata = eventCollection.getPage().get(0);
198+
assertEquals("cc7e2992-e6f1-11e7-9f85-25b0a92374f6", eventWithNoMetadata.getId());
199+
assertEquals(1513931185, eventWithNoMetadata.getCreatedAt());
200+
assertEquals("test-event", eventWithNoMetadata.getEventName());
201+
assertEquals("25", eventWithNoMetadata.getUserID());
202+
assertEquals("530370b477ad7120001d", eventWithNoMetadata.getIntercomUserID());
203+
assertEquals(0, eventWithNoMetadata.getMetadata().size());
204+
205+
final Event eventWithMetadata = eventCollection.getPage().get(1);
206+
assertEquals("9a096a26-b8c5-11e7-b012-3f043042e6d0", eventWithMetadata.getId());
207+
assertEquals(1508854449, eventWithMetadata.getCreatedAt());
208+
assertEquals("invited-friend", eventWithMetadata.getEventName());
209+
assertEquals("25", eventWithMetadata.getUserID());
210+
assertEquals("530370b477ad7120001d", eventWithMetadata.getIntercomUserID());
211+
assertNotEquals(null, eventWithMetadata.getMetadata());
212+
assertEquals(2, eventWithMetadata.getMetadata().size());
213+
assertEquals("[email protected]", eventWithMetadata.getMetadata().get("invitee_email"));
214+
assertEquals("ADDAFRIEND", eventWithMetadata.getMetadata().get("invite_code"));
215+
assertEquals(null, eventWithMetadata.getMetadata().get("non_existing_key"));
216+
}
217+
}
218+
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"type": "event.list",
3+
"events": [
4+
{
5+
"type": "event",
6+
"id": "cc7e2992-e6f1-11e7-9f85-25b0a92374f6",
7+
"created_at": 1513931185,
8+
"event_name": "test-event",
9+
"user_id": "25",
10+
"email": "[email protected]",
11+
"intercom_user_id": "530370b477ad7120001d",
12+
"metadata": {}
13+
},
14+
{
15+
"type": "event",
16+
"id": "9a096a26-b8c5-11e7-b012-3f043042e6d0",
17+
"created_at": 1508854449,
18+
"event_name": "invited-friend",
19+
"user_id": "25",
20+
"email": "[email protected]",
21+
"intercom_user_id": "530370b477ad7120001d",
22+
"metadata": {
23+
"invitee_email": "[email protected]",
24+
"invite_code": "ADDAFRIEND"
25+
}
26+
}
27+
],
28+
"pages": {
29+
"since": "https://api.intercom.io/events?intercom_user_id=530370b477ad7120001d&type=user&since=1513931185041"
30+
}
31+
}
32+

0 commit comments

Comments
 (0)