Skip to content

Commit cc0c890

Browse files
authored
feat(api): support message tags and route suppression (#39)
1 parent d424514 commit cc0c890

8 files changed

Lines changed: 46 additions & 16 deletions

File tree

src/main/java/co/lettermint/endpoints/EmailEndpoint.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public class EmailEndpoint extends Endpoint {
2727
private String route;
2828
private Map<String, Object> metadata;
2929
private String tag;
30+
private List<Map<String, String>> tags;
3031
private Map<String, Object> settings;
3132
private String idempotencyKey;
3233

@@ -52,6 +53,7 @@ private void reset() {
5253
this.route = null;
5354
this.metadata = new LinkedHashMap<>();
5455
this.tag = null;
56+
this.tags = new ArrayList<>();
5557
this.settings = null;
5658
this.idempotencyKey = null;
5759
}
@@ -205,6 +207,15 @@ public EmailEndpoint tag(String tag) {
205207
return this;
206208
}
207209

210+
/**
211+
* Set reusable name-value tags for the email.
212+
*/
213+
@SafeVarargs
214+
public final EmailEndpoint tags(Map<String, String>... tags) {
215+
this.tags = new ArrayList<>(Arrays.asList(tags));
216+
return this;
217+
}
218+
208219
/**
209220
* Set per-email settings that override the selected route.
210221
*/
@@ -313,6 +324,10 @@ private Map<String, Object> buildPayload() {
313324
payload.put("tag", tag);
314325
}
315326

327+
if (!tags.isEmpty()) {
328+
payload.put("tags", tags);
329+
}
330+
316331
if (settings != null) {
317332
payload.put("settings", settings);
318333
}

src/main/java/co/lettermint/models/api/MessageData.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ public class MessageData {
2222
@JsonProperty("tag")
2323
public String tag;
2424

25+
@JsonProperty("tags")
26+
public List<Map<String, Object>> tags;
27+
2528
@JsonProperty("from_email")
2629
public String fromEmail;
2730

src/main/java/co/lettermint/models/api/MessageEventData.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonProperty;
5+
import java.util.List;
56
import java.util.Map;
67

78
@JsonIgnoreProperties(ignoreUnknown = true)
@@ -12,6 +13,12 @@ public class MessageEventData {
1213
@JsonProperty("event")
1314
public String event;
1415

16+
@JsonProperty("tag")
17+
public String tag;
18+
19+
@JsonProperty("tags")
20+
public List<Map<String, Object>> tags;
21+
1522
@JsonProperty("metadata")
1623
public Map<String, Object> metadata;
1724

src/main/java/co/lettermint/models/api/MessageEventsResponse.java

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,16 @@
33
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
44
import com.fasterxml.jackson.annotation.JsonProperty;
55
import java.util.List;
6+
import java.util.Map;
67

78
@JsonIgnoreProperties(ignoreUnknown = true)
89
public class MessageEventsResponse {
910
@JsonProperty("data")
1011
public List<MessageEventData> data;
1112

12-
@JsonProperty("path")
13-
public String path;
13+
@JsonProperty("links")
14+
public List<String> links;
1415

15-
@JsonProperty("per_page")
16-
public Integer perPage;
17-
18-
@JsonProperty("next_cursor")
19-
public String nextCursor;
20-
21-
@JsonProperty("next_page_url")
22-
public String nextPageUrl;
23-
24-
@JsonProperty("prev_cursor")
25-
public String prevCursor;
26-
27-
@JsonProperty("prev_page_url")
28-
public String prevPageUrl;
16+
@JsonProperty("meta")
17+
public Map<String, Object> meta;
2918
}

src/main/java/co/lettermint/models/api/MessageListData.java

Lines changed: 4 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.JsonProperty;
55
import java.util.List;
6+
import java.util.Map;
67

78
@JsonIgnoreProperties(ignoreUnknown = true)
89
public class MessageListData {
@@ -42,6 +43,9 @@ public class MessageListData {
4243
@JsonProperty("tag")
4344
public String tag;
4445

46+
@JsonProperty("tags")
47+
public List<Map<String, Object>> tags;
48+
4549
@JsonProperty("status_changed_at")
4650
public String statusChangedAt;
4751

src/main/java/co/lettermint/models/api/SendMailRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ public class SendMailRequest {
3737
@JsonProperty("tag")
3838
public String tag;
3939

40+
@JsonProperty("tags")
41+
public List<Map<String, Object>> tags;
42+
4043
@JsonProperty("settings")
4144
public Map<String, Object> settings;
4245

src/main/java/co/lettermint/models/api/UpdateRouteSettingsData.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public class UpdateRouteSettingsData {
1717
@JsonProperty("suppress_auto_responders")
1818
public Boolean suppressAutoResponders;
1919

20+
@JsonProperty("suppress_disposable_recipients")
21+
public Boolean suppressDisposableRecipients;
22+
2023
@JsonProperty("tls")
2124
public String tls;
2225

src/test/java/co/lettermint/EmailEndpointTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,10 @@ void testEmailWithAllOptions() throws Exception {
7070
metadata.put("userId", "user_123");
7171
metadata.put("campaign", "welcome");
7272

73+
Map<String, String> tags = new HashMap<>();
74+
tags.put("name", "campaign");
75+
tags.put("value", "welcome-v2");
76+
7377
Map<String, Object> settings = new HashMap<>();
7478
settings.put("track_opens", false);
7579
settings.put("track_clicks", true);
@@ -91,6 +95,7 @@ void testEmailWithAllOptions() throws Exception {
9195
.route("route-slug-123")
9296
.metadata(metadata)
9397
.tag("welcome")
98+
.tags(tags)
9499
.settings(settings)
95100
.idempotencyKey("unique-key-123")
96101
.send();
@@ -111,6 +116,7 @@ void testEmailWithAllOptions() throws Exception {
111116
assertTrue(body.contains("\"text\":\"Hello World\""));
112117
assertTrue(body.contains("\"route\":\"route-slug-123\""));
113118
assertTrue(body.contains("\"tag\":\"welcome\""));
119+
assertTrue(body.contains("\"tags\""));
114120
assertTrue(body.contains("\"settings\":"));
115121
assertTrue(body.contains("\"track_opens\":false"));
116122
assertTrue(body.contains("\"track_clicks\":true"));

0 commit comments

Comments
 (0)