Skip to content

Commit 5be94c3

Browse files
authored
feat(api): support scheduled message delivery (#43)
1 parent 3c91372 commit 5be94c3

12 files changed

Lines changed: 98 additions & 1 deletion

src/main/java/co/lettermint/api/ApiClient.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,14 @@ public MessageData retrieve(String messageId) {
137137
return client.get("/messages/" + segment(messageId), MessageData.class);
138138
}
139139

140+
public RescheduleMessageResponse reschedule(String messageId, RescheduleMessageRequest payload) {
141+
return client.patch("/messages/" + segment(messageId), payload, RescheduleMessageResponse.class);
142+
}
143+
144+
public RescheduleMessageResponse cancel(String messageId) {
145+
return client.post("/messages/" + segment(messageId) + "/cancel", null, RescheduleMessageResponse.class);
146+
}
147+
140148
public MessageEventsResponse events(String messageId) {
141149
return events(messageId, null);
142150
}

src/main/java/co/lettermint/client/LettermintClient.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ public <T> T put(String path, Object payload, Class<T> responseClass) {
111111
return request("PUT", url(path, null), payload, responseClass, null, null);
112112
}
113113

114+
public <T> T patch(String path, Object payload, Class<T> responseClass) {
115+
return request("PATCH", url(path, null), payload, responseClass, null, null);
116+
}
117+
114118
public <T> T delete(String path, Class<T> responseClass) {
115119
return request("DELETE", url(path, null), null, responseClass, null, null);
116120
}
@@ -148,6 +152,8 @@ private <T> T request(String method, String requestUrl, Object payload, Class<T>
148152
requestBuilder.post(body != null ? body : RequestBody.create(new byte[0], JSON));
149153
} else if ("PUT".equals(method)) {
150154
requestBuilder.put(body != null ? body : RequestBody.create(new byte[0], JSON));
155+
} else if ("PATCH".equals(method)) {
156+
requestBuilder.patch(body != null ? body : RequestBody.create(new byte[0], JSON));
151157
} else if ("DELETE".equals(method)) {
152158
requestBuilder.delete();
153159
} else {

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

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class EmailEndpoint extends Endpoint {
2020
private List<String> bcc;
2121
private List<String> replyTo;
2222
private String subject;
23+
private String scheduledAt;
2324
private String html;
2425
private String text;
2526
private Map<String, String> headers;
@@ -46,6 +47,7 @@ private void reset() {
4647
this.bcc = new ArrayList<>();
4748
this.replyTo = new ArrayList<>();
4849
this.subject = null;
50+
this.scheduledAt = null;
4951
this.html = null;
5052
this.text = null;
5153
this.headers = new LinkedHashMap<>();
@@ -107,6 +109,12 @@ public EmailEndpoint subject(String subject) {
107109
return this;
108110
}
109111

112+
/** Set the requested delivery time for the email. */
113+
public EmailEndpoint scheduledAt(String scheduledAt) {
114+
this.scheduledAt = scheduledAt;
115+
return this;
116+
}
117+
110118
/**
111119
* Set the HTML content of the email.
112120
*/
@@ -296,6 +304,10 @@ private Map<String, Object> buildPayload() {
296304
payload.put("subject", subject);
297305
}
298306

307+
if (scheduledAt != null) {
308+
payload.put("scheduled_at", scheduledAt);
309+
}
310+
299311
if (html != null) {
300312
payload.put("html", html);
301313
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class MessageData {
1919
@JsonProperty("status_changed_at")
2020
public String statusChangedAt;
2121

22+
@JsonProperty("scheduled_at")
23+
public String scheduledAt;
24+
2225
@JsonProperty("tag")
2326
public String tag;
2427

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package co.lettermint.models.api;
22

33
public final class MessageEventType {
4+
public static final String SCHEDULED = "scheduled";
5+
public static final String RESCHEDULED = "rescheduled";
6+
public static final String CANCELED = "canceled";
7+
public static final String RELEASED = "released";
48
public static final String QUEUED = "queued";
59
public static final String PROCESSED = "processed";
610
public static final String SUPPRESSED = "suppressed";

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public class MessageListData {
1616
@JsonProperty("status")
1717
public String status;
1818

19+
@JsonProperty("scheduled_at")
20+
public String scheduledAt;
21+
1922
@JsonProperty("spam_score")
2023
public Double spamScore;
2124

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package co.lettermint.models.api;
22

33
public final class MessageStatus {
4+
public static final String SCHEDULED = "scheduled";
45
public static final String PENDING = "pending";
56
public static final String QUEUED = "queued";
67
public static final String SUPPRESSED = "suppressed";
@@ -15,6 +16,7 @@ public final class MessageStatus {
1516
public static final String BLOCKED = "blocked";
1617
public static final String POLICYREJECTED = "policy_rejected";
1718
public static final String UNSUBSCRIBED = "unsubscribed";
19+
public static final String CANCELED = "canceled";
1820

1921
private MessageStatus() {}
2022
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package co.lettermint.models.api;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
@JsonIgnoreProperties(ignoreUnknown = true)
7+
public class RescheduleMessageRequest {
8+
@JsonProperty("scheduled_at")
9+
public String scheduledAt;
10+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package co.lettermint.models.api;
2+
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
5+
6+
@JsonIgnoreProperties(ignoreUnknown = true)
7+
public class RescheduleMessageResponse {
8+
@JsonProperty("message_id")
9+
public String messageId;
10+
11+
@JsonProperty("status")
12+
public String status;
13+
14+
@JsonProperty("scheduled_at")
15+
public String scheduledAt;
16+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public class SendMailRequest {
2828
@JsonProperty("subject")
2929
public String subject;
3030

31+
@JsonProperty("scheduled_at")
32+
public String scheduledAt;
33+
3134
@JsonProperty("headers")
3235
public Map<String, String> headers;
3336

0 commit comments

Comments
 (0)