Skip to content

Commit 350d3f1

Browse files
committed
Bulk tag request builders for users and companies
When bulk tagging users or companies only send the identifiers needed for a company or user match.
1 parent 51ef1e4 commit 350d3f1

File tree

3 files changed

+163
-15
lines changed

3 files changed

+163
-15
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonInclude;
55
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.google.common.annotations.VisibleForTesting;
67
import com.google.common.collect.Maps;
78

89
import java.net.URI;
@@ -211,6 +212,12 @@ public String getId() {
211212
return id;
212213
}
213214

215+
@VisibleForTesting
216+
Company setId(String id) {
217+
this.id = id;
218+
return this;
219+
}
220+
214221
public String getName() {
215222
return name;
216223
}

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

Lines changed: 76 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,33 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonInclude;
55
import com.fasterxml.jackson.annotation.JsonProperty;
6+
import com.google.common.annotations.VisibleForTesting;
7+
import com.google.common.base.Strings;
8+
import com.google.common.collect.Lists;
69
import com.google.common.collect.Maps;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
712

813
import java.util.HashMap;
914
import java.util.List;
15+
import java.util.Map;
1016

1117
@SuppressWarnings("UnusedDeclaration")
1218
@JsonIgnoreProperties(ignoreUnknown = true)
1319
@JsonInclude(JsonInclude.Include.NON_EMPTY)
1420
public class Tag extends TypedData {
1521

22+
private static final Logger logger = LoggerFactory.getLogger("intercom-java");
1623
private static final HashMap<String, String> SENTINEL = Maps.newHashMap();
1724

25+
1826
public static Tag tag(Tag tag, UserCollection users) throws InvalidException, AuthorizationException {
19-
TagTypedCollection tagTypedCollection = new TagTypedCollection();
20-
tagTypedCollection.setName(tag.getName());
21-
tagTypedCollection.setId(tag.getId());
22-
tagTypedCollection.setUsers(users.getPageItems());
27+
TagTypedCollection tagTypedCollection = createTagTypedCollection(tag, users);
2328
return DataResource.create(tagTypedCollection, "tags", Tag.class);
2429
}
2530

2631
public static Tag tag(Tag tag, CompanyCollection companies) throws InvalidException, AuthorizationException {
27-
TagTypedCollection tagTypedCollection = new TagTypedCollection();
28-
tagTypedCollection.setName(tag.getName());
29-
tagTypedCollection.setId(tag.getId());
30-
tagTypedCollection.setCompanies(companies.getPageItems());
32+
TagTypedCollection tagTypedCollection = createTagTypedCollection(tag, companies);
3133
return DataResource.create(tagTypedCollection, "tags", Tag.class);
3234
}
3335

@@ -54,30 +56,89 @@ public static TagCollection list() throws InvalidException, AuthorizationExcepti
5456
return DataResource.list(SENTINEL, "tags", TagCollection.class);
5557
}
5658

59+
@VisibleForTesting
60+
static TagTypedCollection createTagTypedCollection(Tag tag, UserCollection users) {
61+
TagTypedCollection tagTypedCollection = new TagTypedCollection();
62+
tagTypedCollection.setName(tag.getName());
63+
tagTypedCollection.setId(tag.getId());
64+
final List<Map<String,String>> usersLite = Lists.newArrayList();
65+
final List<User> pageItems = users.getPageItems();
66+
for (User user : pageItems) {
67+
Map<String, String> userMap = Maps.newHashMap();
68+
final String id = user.getId();
69+
final String email = user.getEmail();
70+
final String userId = user.getUserId();
71+
if (!Strings.isNullOrEmpty(id)) {
72+
userMap.put("id", id);
73+
usersLite.add(userMap);
74+
} else if (!Strings.isNullOrEmpty(email)) {
75+
userMap.put("email", email);
76+
usersLite.add(userMap);
77+
} else if (!Strings.isNullOrEmpty(userId)) {
78+
userMap.put("user_id", userId);
79+
usersLite.add(userMap);
80+
} else {
81+
logger.warn("no identifiers found for user tag target, skipping [" + tag + "] [" + user.toString() + "]");
82+
}
83+
}
84+
tagTypedCollection.setUsers(usersLite);
85+
return tagTypedCollection;
86+
}
87+
88+
@VisibleForTesting
89+
static TagTypedCollection createTagTypedCollection(Tag tag, CompanyCollection companies) {
90+
TagTypedCollection tagTypedCollection = new TagTypedCollection();
91+
tagTypedCollection.setName(tag.getName());
92+
tagTypedCollection.setId(tag.getId());
93+
94+
final List<Map<String, String>> companiesLite = Lists.newArrayList();
95+
final List<Company> pageItems = companies.getPageItems();
96+
for (Company company : pageItems) {
97+
Map<String, String> companyMap = Maps.newHashMap();
98+
final String companyID = company.getCompanyID();
99+
final String id1 = company.getId();
100+
final String name = company.getName();
101+
if(!Strings.isNullOrEmpty(companyID)) {
102+
companyMap.put("company_id", companyID);
103+
companiesLite.add(companyMap);
104+
} else if(!Strings.isNullOrEmpty(id1)) {
105+
companyMap.put("id", id1);
106+
companiesLite.add(companyMap);
107+
} else if(!Strings.isNullOrEmpty(name)) {
108+
companyMap.put("name", name);
109+
companiesLite.add(companyMap);
110+
} else {
111+
logger.warn("no identifiers found for company tag target, skipping [" + tag + "] [" + company.toString() + "]");
112+
}
113+
tagTypedCollection.setCompanies(companiesLite);
114+
}
115+
return tagTypedCollection;
116+
}
117+
57118
@SuppressWarnings("UnusedDeclaration")
58119
@JsonIgnoreProperties(ignoreUnknown = true)
59120
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
60121
static class TagTypedCollection extends Tag {
61122

62123
@JsonProperty("users")
63-
private List<User> users;
124+
private List<Map<String, String>> users;
64125

65126
@JsonProperty("companies")
66-
private List<Company> companies;
127+
private List<Map<String, String>> companies;
67128

68-
public List<User> getUsers() {
129+
public List<Map<String, String>> getUsers() {
69130
return users;
70131
}
71132

72-
public void setUsers(List<User> users) {
73-
this.users = users;
133+
public void setUsers(List<Map<String, String>> usersLite) {
134+
this.users = usersLite;
74135
}
75136

76-
public List<Company> getCompanies() {
137+
public List<Map<String, String>> getCompanies() {
77138
return companies;
78139
}
79140

80-
public void setCompanies(List<Company> companies) {
141+
public void setCompanies(List<Map<String, String>> companies) {
81142
this.companies = companies;
82143
}
83144
}

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

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package io.intercom.api;
22

33
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import com.google.common.collect.Lists;
45
import org.junit.BeforeClass;
56
import org.junit.Test;
67

78
import java.io.ByteArrayOutputStream;
9+
import java.util.List;
10+
import java.util.Map;
811

912
import static io.intercom.api.TestSupport.load;
1013
import static org.junit.Assert.assertEquals;
@@ -18,6 +21,83 @@ public static void beforeClass() {
1821
mapper = TestSupport.objectMapper();
1922
}
2023

24+
@Test
25+
public void testTagUsers() throws Exception {
26+
String json = load("tag.json");
27+
final Tag tag = mapper.readValue(json, Tag.class);
28+
29+
final User user1 = new User().setEmail("wash@serenity.io");
30+
final User user2 = new User().setUserId("22");
31+
final User user3 = new User().setId("3434");
32+
final User user4 = new User().setEmail("malcolm@serenity.io");
33+
final User user5 = new User().setUserId("23");
34+
final User user6 = new User().setId("3435");
35+
final UserCollection uc = new UserCollection(Lists.newArrayList(user1, user2, user3, user4, user5, user6));
36+
final Tag.TagTypedCollection tagTypedCollection = Tag.createTagTypedCollection(tag, uc);
37+
final List<Map<String, String>> users = tagTypedCollection.getUsers();
38+
39+
int match = 0;
40+
for (Map<String, String> user : users) {
41+
if (user.containsKey("id") && user.get("id").equals("3434")) {
42+
match += 1;
43+
}
44+
if (user.containsKey("email") && user.get("email").equals("wash@serenity.io")) {
45+
match += 1;
46+
}
47+
if (user.containsKey("user_id") && user.get("user_id").equals("22")) {
48+
match += 1;
49+
}
50+
if (user.containsKey("id") && user.get("id").equals("3435")) {
51+
match += 1;
52+
}
53+
if (user.containsKey("email") && user.get("email").equals("malcolm@serenity.io")) {
54+
match += 1;
55+
}
56+
if (user.containsKey("user_id") && user.get("user_id").equals("23")) {
57+
match += 1;
58+
}
59+
}
60+
assertEquals(6, match);
61+
}
62+
63+
@Test
64+
public void testTagCompanies() throws Exception {
65+
String json = load("tag.json");
66+
final Tag tag = mapper.readValue(json, Tag.class);
67+
68+
final Company c1 = new Company().setCompanyID("c1");
69+
final Company c2 = new Company().setName("name1");
70+
final Company c3 = new Company().setCompanyID("c3");
71+
final Company c4 = new Company().setName("name4");
72+
final Company c5 = new Company().setId("1");
73+
final Company c6 = new Company().setId("2");
74+
final CompanyCollection uc = new CompanyCollection(Lists.newArrayList(c1, c2, c3, c4, c5, c6));
75+
final Tag.TagTypedCollection tagTypedCollection = Tag.createTagTypedCollection(tag, uc);
76+
final List<Map<String, String>> companies = tagTypedCollection.getCompanies();
77+
int match = 0;
78+
for (Map<String, String> company : companies) {
79+
if (company.containsKey("company_id") && company.get("company_id").equals("c1")) {
80+
match += 1;
81+
}
82+
if (company.containsKey("name") && company.get("name").equals("name1")) {
83+
match += 1;
84+
}
85+
if (company.containsKey("company_id") && company.get("company_id").equals("c3")) {
86+
match += 1;
87+
}
88+
if (company.containsKey("name") && company.get("name").equals("name4")) {
89+
match += 1;
90+
}
91+
if (company.containsKey("id") && company.get("id").equals("1")) {
92+
match += 1;
93+
}
94+
if (company.containsKey("id") && company.get("id").equals("2")) {
95+
match += 1;
96+
}
97+
}
98+
assertEquals(6, match);
99+
}
100+
21101
@Test
22102
public void TestSerdes() throws Exception {
23103
String json = load("tag.json");

0 commit comments

Comments
 (0)