Skip to content

Commit 144636f

Browse files
committed
Implemented Contacts API
1 parent 9cd7f67 commit 144636f

File tree

21 files changed

+455
-29
lines changed

21 files changed

+455
-29
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.mailtrap.examples.contact_lists;
2+
3+
import io.mailtrap.client.MailtrapClient;
4+
import io.mailtrap.config.MailtrapConfig;
5+
import io.mailtrap.factory.MailtrapClientFactory;
6+
import io.mailtrap.model.response.contact_lists.ContactListsResponse;
7+
8+
import java.util.List;
9+
10+
public class ContactLists {
11+
12+
private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
13+
private static final long ACCOUNT_ID = 1L;
14+
15+
public static void main(String[] args) {
16+
final MailtrapConfig config = new MailtrapConfig.Builder()
17+
.token(TOKEN)
18+
.build();
19+
20+
final MailtrapClient client = MailtrapClientFactory.createMailtrapClient(config);
21+
22+
List<ContactListsResponse> contacts = client.contactsApi().contactLists().findAll(ACCOUNT_ID);
23+
24+
System.out.println(contacts);
25+
}
26+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package io.mailtrap.examples.contacts;
2+
3+
import io.mailtrap.client.MailtrapClient;
4+
import io.mailtrap.config.MailtrapConfig;
5+
import io.mailtrap.factory.MailtrapClientFactory;
6+
import io.mailtrap.model.request.contacts.Contact;
7+
import io.mailtrap.model.request.contacts.CreateContactRequest;
8+
import io.mailtrap.model.response.contacts.CreateContactResponse;
9+
10+
import java.util.List;
11+
import java.util.Map;
12+
13+
public class Contacts {
14+
15+
private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
16+
private static final long ACCOUNT_ID = 1L;
17+
private static final long ID_1 = 1L;
18+
private static final long ID_2 = 2L;
19+
private static final String EMAIL = "[email protected]";
20+
21+
public static void main(String[] args) {
22+
final MailtrapConfig config = new MailtrapConfig.Builder()
23+
.token(TOKEN)
24+
.build();
25+
26+
final MailtrapClient client = MailtrapClientFactory.createMailtrapClient(config);
27+
28+
CreateContactRequest request = new CreateContactRequest(new Contact(EMAIL, Map.of("first_name", "Nick"), List.of(ID_1, ID_2)));
29+
30+
CreateContactResponse response = client.contactsApi().contacts().createContact(ACCOUNT_ID, request);
31+
32+
System.out.println(response);
33+
34+
client.contactsApi().contacts().createContact(ACCOUNT_ID, email);
35+
}
36+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package io.mailtrap.api.contact_lists;
2+
3+
import io.mailtrap.model.response.contact_lists.ContactListsResponse;
4+
5+
import java.util.List;
6+
7+
public interface ContactLists {
8+
9+
/**
10+
* Get all contact lists existing in account
11+
*
12+
* @param accountId unique account ID
13+
* @return contacts list
14+
*/
15+
List<ContactListsResponse> findAll(long accountId);
16+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.mailtrap.api.contact_lists;
2+
3+
import io.mailtrap.Constants;
4+
import io.mailtrap.api.api_resource.ApiResource;
5+
import io.mailtrap.config.MailtrapConfig;
6+
import io.mailtrap.http.RequestData;
7+
import io.mailtrap.model.response.contact_lists.ContactListsResponse;
8+
9+
import java.util.List;
10+
11+
public class ContactListsImpl extends ApiResource implements ContactLists {
12+
13+
public ContactListsImpl(MailtrapConfig config) {
14+
super(config);
15+
this.apiHost = Constants.GENERAL_HOST;
16+
}
17+
18+
@Override
19+
public List<ContactListsResponse> findAll(long accountId) {
20+
return httpClient.getList(
21+
String.format(apiHost + "/api/accounts/%s/contacts/lists", accountId),
22+
new RequestData(),
23+
ContactListsResponse.class
24+
);
25+
}
26+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.mailtrap.api.contacts;
2+
3+
import io.mailtrap.model.request.contacts.CreateContactRequest;
4+
import io.mailtrap.model.response.contacts.CreateContactResponse;
5+
6+
public interface Contacts {
7+
8+
/**
9+
* Create a new contact
10+
*
11+
* @param accountId unique account ID
12+
* @param request required contact data
13+
* @return created contact
14+
*/
15+
CreateContactResponse createContact(long accountId, CreateContactRequest request);
16+
17+
/**
18+
* Delete contact using id or email (URL encoded)
19+
*
20+
* @param accountId unique account ID
21+
* @param idOrEmail contact ID or Email
22+
*/
23+
void deleteContact(long accountId, String idOrEmail);
24+
25+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package io.mailtrap.api.contacts;
2+
3+
import io.mailtrap.Constants;
4+
import io.mailtrap.api.api_resource.ApiResource;
5+
import io.mailtrap.config.MailtrapConfig;
6+
import io.mailtrap.http.RequestData;
7+
import io.mailtrap.model.request.contacts.CreateContactRequest;
8+
import io.mailtrap.model.response.contacts.CreateContactResponse;
9+
10+
import java.net.URLEncoder;
11+
import java.nio.charset.Charset;
12+
import java.util.Base64;
13+
14+
public class ContactsImpl extends ApiResource implements Contacts {
15+
16+
public ContactsImpl(MailtrapConfig config) {
17+
super(config);
18+
this.apiHost = Constants.GENERAL_HOST;
19+
}
20+
21+
@Override
22+
public CreateContactResponse createContact(long accountId, CreateContactRequest request) {
23+
return httpClient.post(
24+
String.format(apiHost + "/api/accounts/%s/contacts", accountId),
25+
request,
26+
new RequestData(),
27+
CreateContactResponse.class
28+
);
29+
}
30+
31+
@Override
32+
public void deleteContact(long accountId, String idOrEmail) {
33+
httpClient.delete(
34+
String.format(apiHost + "/api/accounts/%s/contacts/%s", accountId, URLEncoder.encode(idOrEmail, Charset.defaultCharset())),
35+
new RequestData(),
36+
Void.class
37+
);
38+
}
39+
}

src/main/java/io/mailtrap/client/MailtrapClient.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package io.mailtrap.client;
22

3-
import io.mailtrap.client.api.MailtrapBulkSendingApi;
4-
import io.mailtrap.client.api.MailtrapEmailSendingApi;
5-
import io.mailtrap.client.api.MailtrapEmailTestingApi;
6-
import io.mailtrap.client.api.MailtrapGeneralApi;
3+
import io.mailtrap.client.api.*;
74
import io.mailtrap.config.MailtrapConfig;
85
import io.mailtrap.model.request.emails.MailtrapMail;
96
import io.mailtrap.model.response.emails.SendResponse;
@@ -45,6 +42,12 @@ public class MailtrapClient {
4542
@Getter
4643
private final MailtrapGeneralApi generalApi;
4744

45+
/**
46+
* API for Mailtrap.io Contacts functionality
47+
*/
48+
@Getter
49+
private final MailtrapContactsApi contactsApi;
50+
4851
/**
4952
* Utility class which holds sending context (which API to use: Email Sending API, Bulk Sending API or
5053
* Email Testing API, inbox id for Email Testing API) to make it possible to perform send directly from MailtrapClient
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.mailtrap.client.api;
2+
3+
import io.mailtrap.api.contact_lists.ContactLists;
4+
import io.mailtrap.api.contacts.Contacts;
5+
import lombok.Getter;
6+
import lombok.RequiredArgsConstructor;
7+
import lombok.experimental.Accessors;
8+
9+
/**
10+
* Represents an API for Mailtrap Contacts functionality
11+
*/
12+
@Getter
13+
@Accessors(fluent = true)
14+
@RequiredArgsConstructor
15+
public class MailtrapContactsApi {
16+
private final ContactLists contactLists;
17+
private final Contacts contacts;
18+
}

src/main/java/io/mailtrap/factory/MailtrapClientFactory.java

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
import io.mailtrap.api.attachments.AttachmentsImpl;
77
import io.mailtrap.api.billing.BillingImpl;
88
import io.mailtrap.api.bulk_emails.BulkEmailsImpl;
9+
import io.mailtrap.api.contact_lists.ContactListsImpl;
10+
import io.mailtrap.api.contacts.ContactsImpl;
911
import io.mailtrap.api.inboxes.InboxesImpl;
1012
import io.mailtrap.api.messages.MessagesImpl;
1113
import io.mailtrap.api.permissions.PermissionsImpl;
@@ -14,10 +16,7 @@
1416
import io.mailtrap.api.sending_emails.SendingEmailsImpl;
1517
import io.mailtrap.api.testing_emails.TestingEmailsImpl;
1618
import io.mailtrap.client.MailtrapClient;
17-
import io.mailtrap.client.api.MailtrapBulkSendingApi;
18-
import io.mailtrap.client.api.MailtrapEmailSendingApi;
19-
import io.mailtrap.client.api.MailtrapEmailTestingApi;
20-
import io.mailtrap.client.api.MailtrapGeneralApi;
19+
import io.mailtrap.client.api.*;
2120
import io.mailtrap.config.MailtrapConfig;
2221
import io.mailtrap.util.SendingContextHolder;
2322
import jakarta.validation.Validation;
@@ -38,46 +37,54 @@ private MailtrapClientFactory() {
3837
* @return A new Mailtrap client instance.
3938
*/
4039
public static MailtrapClient createMailtrapClient(MailtrapConfig config) {
41-
var customValidator = createValidator();
40+
final var customValidator = createValidator();
4241

43-
var sendingApi = createSendingApi(config, customValidator);
44-
var testingApi = createTestingApi(config, customValidator);
45-
var bulkSendingApi = createBulkSendingApi(config, customValidator);
46-
var generalApi = createGeneralApi(config);
42+
final var sendingApi = createSendingApi(config, customValidator);
43+
final var testingApi = createTestingApi(config, customValidator);
44+
final var bulkSendingApi = createBulkSendingApi(config, customValidator);
45+
final var generalApi = createGeneralApi(config);
46+
final var contactsApi = createContactsApi(config);
4747

48-
var sendingContextHolder = configureSendingContext(config);
48+
final var sendingContextHolder = configureSendingContext(config);
4949

50-
return new MailtrapClient(sendingApi, testingApi, bulkSendingApi, generalApi, sendingContextHolder);
50+
return new MailtrapClient(sendingApi, testingApi, bulkSendingApi, generalApi, contactsApi, sendingContextHolder);
51+
}
52+
53+
private static MailtrapContactsApi createContactsApi(MailtrapConfig config) {
54+
final var contactLists = new ContactListsImpl(config);
55+
final var contacts = new ContactsImpl(config);
56+
57+
return new MailtrapContactsApi(contactLists, contacts);
5158
}
5259

5360
private static MailtrapGeneralApi createGeneralApi(MailtrapConfig config) {
54-
var accountAccess = new AccountAccessesImpl(config);
55-
var accounts = new AccountsImpl(config);
56-
var billing = new BillingImpl(config);
57-
var permissions = new PermissionsImpl(config);
61+
final var accountAccess = new AccountAccessesImpl(config);
62+
final var accounts = new AccountsImpl(config);
63+
final var billing = new BillingImpl(config);
64+
final var permissions = new PermissionsImpl(config);
5865

5966
return new MailtrapGeneralApi(accountAccess, accounts, billing, permissions);
6067
}
6168

6269
private static MailtrapEmailSendingApi createSendingApi(MailtrapConfig config, CustomValidator customValidator) {
63-
var emails = new SendingEmailsImpl(config, customValidator);
64-
var domains = new SendingDomainsImpl(config);
70+
final var emails = new SendingEmailsImpl(config, customValidator);
71+
final var domains = new SendingDomainsImpl(config);
6572

6673
return new MailtrapEmailSendingApi(emails, domains);
6774
}
6875

6976
private static MailtrapEmailTestingApi createTestingApi(MailtrapConfig config, CustomValidator customValidator) {
70-
var emails = new TestingEmailsImpl(config, customValidator);
71-
var attachments = new AttachmentsImpl(config);
72-
var inboxes = new InboxesImpl(config, customValidator);
73-
var projects = new ProjectsImpl(config, customValidator);
74-
var messages = new MessagesImpl(config);
77+
final var emails = new TestingEmailsImpl(config, customValidator);
78+
final var attachments = new AttachmentsImpl(config);
79+
final var inboxes = new InboxesImpl(config, customValidator);
80+
final var projects = new ProjectsImpl(config, customValidator);
81+
final var messages = new MessagesImpl(config);
7582

7683
return new MailtrapEmailTestingApi(emails, attachments, inboxes, projects, messages);
7784
}
7885

7986
private static MailtrapBulkSendingApi createBulkSendingApi(MailtrapConfig config, CustomValidator customValidator) {
80-
var emails = new BulkEmailsImpl(config, customValidator);
87+
final var emails = new BulkEmailsImpl(config, customValidator);
8188

8289
return new MailtrapBulkSendingApi(emails);
8390
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package io.mailtrap.model.request.contacts;
2+
3+
import com.fasterxml.jackson.annotation.JsonProperty;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
7+
import java.util.List;
8+
import java.util.Map;
9+
10+
@Getter
11+
@AllArgsConstructor
12+
public class Contact {
13+
14+
private String email;
15+
16+
private Map<String, String> fields;
17+
18+
@JsonProperty("list_ids")
19+
private List<Long> listIds;
20+
}

0 commit comments

Comments
 (0)