Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.mailtrap.examples.contactevents;

import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.contactevents.CreateContactEventRequest;
import io.mailtrap.model.response.contactevents.ContactEventResponse;

import java.util.Map;

public class ContactEventsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
private static final String CONTACT_IDENTIFIER = "b691272b-3e50-4813-997b-c7c9b317dcb2";

public static void main(String[] args) {
final var config = new MailtrapConfig.Builder()
.token(TOKEN)
.build();

final var client = MailtrapClientFactory.createMailtrapClient(config);

final CreateContactEventRequest request = new CreateContactEventRequest("UserLogin", Map.of(
"user_id", 11,
"user_name", "Dillan Doe",
"is_active", true
));

final ContactEventResponse contactEvent = client.contactsApi().contactEvents().createContactEvent(ACCOUNT_ID, CONTACT_IDENTIFIER, request);
System.out.println(contactEvent);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,34 @@

import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.contactlists.CreateUpdateContactListRequest;

public class ContactListsExample {

private static final String TOKEN = "<YOUR MAILTRAP TOKEN>";
private static final long ACCOUNT_ID = 1L;
private static final String NAME_FOR_CREATE = "Clients";
private static final String NAME_FOR_UPDATE = "Customers";

public static void main(String[] args) {
final var config = new MailtrapConfig.Builder()
.token(TOKEN)
.build();
.token(TOKEN)
.build();

final var client = MailtrapClientFactory.createMailtrapClient(config);

final var contacts = client.contactsApi().contactLists().findAll(ACCOUNT_ID);
final var created = client.contactsApi().contactLists().createContactList(ACCOUNT_ID, new CreateUpdateContactListRequest(NAME_FOR_CREATE));
System.out.println(created);

System.out.println(contacts);
final var updated = client.contactsApi().contactLists().updateContactList(ACCOUNT_ID, created.getId(), new CreateUpdateContactListRequest(NAME_FOR_UPDATE));
System.out.println(updated);

final var byId = client.contactsApi().contactLists().getContactList(ACCOUNT_ID, updated.getId());
System.out.println(byId);

final var contactLists = client.contactsApi().contactLists().findAll(ACCOUNT_ID);
System.out.println(contactLists);

client.contactsApi().contactLists().deleteContactList(ACCOUNT_ID, byId.getId());
}
}
17 changes: 17 additions & 0 deletions src/main/java/io/mailtrap/api/contactevents/ContactEvents.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.mailtrap.api.contactevents;

import io.mailtrap.model.request.contactevents.CreateContactEventRequest;
import io.mailtrap.model.response.contactevents.ContactEventResponse;

public interface ContactEvents {

/**
* Submit custom event for contact
*
* @param accountId unique account ID
* @param contactIdentifier Contact UUID or Email
* @param request body
* @return created contact event
*/
ContactEventResponse createContactEvent(long accountId, String contactIdentifier, CreateContactEventRequest request);
}
29 changes: 29 additions & 0 deletions src/main/java/io/mailtrap/api/contactevents/ContactEventsImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package io.mailtrap.api.contactevents;

import io.mailtrap.Constants;
import io.mailtrap.api.apiresource.ApiResource;
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.http.RequestData;
import io.mailtrap.model.request.contactevents.CreateContactEventRequest;
import io.mailtrap.model.response.contactevents.ContactEventResponse;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class ContactEventsImpl extends ApiResource implements ContactEvents {

public ContactEventsImpl(final MailtrapConfig config) {
super(config);
this.apiHost = Constants.GENERAL_HOST;
}

@Override
public ContactEventResponse createContactEvent(final long accountId, final String contactIdentifier, final CreateContactEventRequest request) {
return httpClient.post(
String.format(apiHost + "/api/accounts/%d/contacts/%s/events", accountId, URLEncoder.encode(contactIdentifier, StandardCharsets.UTF_8)),
request,
new RequestData(),
ContactEventResponse.class
);
}
}
37 changes: 37 additions & 0 deletions src/main/java/io/mailtrap/api/contactlists/ContactLists.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.mailtrap.api.contactlists;

import io.mailtrap.model.request.contactlists.CreateUpdateContactListRequest;
import io.mailtrap.model.response.contactlists.ContactListResponse;

import java.util.List;
Expand All @@ -13,4 +14,40 @@ public interface ContactLists {
* @return contacts list
*/
List<ContactListResponse> findAll(long accountId);

/**
* Create new Contact List
*
* @param accountId unique account ID
* @param request body
* @return created contact list
*/
ContactListResponse createContactList(long accountId, CreateUpdateContactListRequest request);

/**
* Get a contact list by ID
*
* @param accountId unique account ID
* @param contactListId unique contact list ID
* @return found contact list
*/
ContactListResponse getContactList(long accountId, long contactListId);

/**
* Update existing Contact List
*
* @param accountId unique account ID
* @param contactListId unique contact list ID
* @param request body
* @return updated contact list
*/
ContactListResponse updateContactList(long accountId, long contactListId, CreateUpdateContactListRequest request);

/**
* Delete existing Contact List
*
* @param accountId unique account ID
* @param contactListId unique contact list ID
*/
void deleteContactList(long accountId, long contactListId);
}
39 changes: 39 additions & 0 deletions src/main/java/io/mailtrap/api/contactlists/ContactListsImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import io.mailtrap.api.apiresource.ApiResource;
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.http.RequestData;
import io.mailtrap.model.request.contactlists.CreateUpdateContactListRequest;
import io.mailtrap.model.response.contactlists.ContactListResponse;

import java.util.List;
Expand All @@ -23,4 +24,42 @@ public List<ContactListResponse> findAll(final long accountId) {
ContactListResponse.class
);
}

@Override
public ContactListResponse createContactList(final long accountId, final CreateUpdateContactListRequest request) {
return httpClient.post(
String.format(apiHost + "/api/accounts/%d/contacts/lists", accountId),
request,
new RequestData(),
ContactListResponse.class
);
}

@Override
public ContactListResponse getContactList(final long accountId, final long contactListId) {
return httpClient.get(
String.format(apiHost + "/api/accounts/%d/contacts/lists/%d", accountId, contactListId),
new RequestData(),
ContactListResponse.class
);
}

@Override
public ContactListResponse updateContactList(final long accountId, final long contactListId, final CreateUpdateContactListRequest request) {
return httpClient.patch(
String.format(apiHost + "/api/accounts/%d/contacts/lists/%d", accountId, contactListId),
request,
new RequestData(),
ContactListResponse.class
);
}

@Override
public void deleteContactList(final long accountId, final long contactListId) {
httpClient.delete(
String.format(apiHost + "/api/accounts/%d/contacts/lists/%d", accountId, contactListId),
new RequestData(),
Void.class
);
}
}
2 changes: 2 additions & 0 deletions src/main/java/io/mailtrap/client/api/MailtrapContactsApi.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.mailtrap.client.api;

import io.mailtrap.api.contactevents.ContactEvents;
import io.mailtrap.api.contactexports.ContactExports;
import io.mailtrap.api.contactfields.ContactFields;
import io.mailtrap.api.contactimports.ContactImports;
Expand All @@ -21,4 +22,5 @@ public class MailtrapContactsApi {
private final ContactImports contactImports;
private final ContactFields contactFields;
private final ContactExports contactExports;
private final ContactEvents contactEvents;
}
4 changes: 3 additions & 1 deletion src/main/java/io/mailtrap/factory/MailtrapClientFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import io.mailtrap.api.attachments.AttachmentsImpl;
import io.mailtrap.api.billing.BillingImpl;
import io.mailtrap.api.bulkemails.BulkEmailsImpl;
import io.mailtrap.api.contactevents.ContactEventsImpl;
import io.mailtrap.api.contactexports.ContactExportsImpl;
import io.mailtrap.api.contactfields.ContactFieldsImpl;
import io.mailtrap.api.contactimports.ContactImportsImpl;
Expand Down Expand Up @@ -76,8 +77,9 @@ private static MailtrapContactsApi createContactsApi(final MailtrapConfig config
final var contactImports = new ContactImportsImpl(config, VALIDATOR);
final var contactFields = new ContactFieldsImpl(config, VALIDATOR);
final var contactExports = new ContactExportsImpl(config);
final var contactEvents = new ContactEventsImpl(config);

return new MailtrapContactsApi(contactLists, contacts, contactImports, contactFields, contactExports);
return new MailtrapContactsApi(contactLists, contacts, contactImports, contactFields, contactExports, contactEvents);
}

private static MailtrapGeneralApi createGeneralApi(final MailtrapConfig config) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.mailtrap.model.request.contactevents;

import io.mailtrap.model.AbstractModel;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Map;

@Getter
@AllArgsConstructor
public class CreateContactEventRequest extends AbstractModel {
private String name;
private Map<String, Object> params;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package io.mailtrap.model.request.contactlists;

import io.mailtrap.model.AbstractModel;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class CreateUpdateContactListRequest extends AbstractModel {
private String name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.mailtrap.model.response.contactevents;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.Map;

@Data
public class ContactEventResponse {

@JsonProperty("contact_id")
private String contactId;

@JsonProperty("contact_email")
private String contactEmail;

private String name;

private Map<String, Object> params;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package io.mailtrap.api.contactevents;

import io.mailtrap.Constants;
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.request.contactevents.CreateContactEventRequest;
import io.mailtrap.model.response.contactevents.ContactEventResponse;
import io.mailtrap.testutils.BaseTest;
import io.mailtrap.testutils.DataMock;
import io.mailtrap.testutils.TestHttpClient;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.Map;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

class ContactEventsImplTest extends BaseTest {
private ContactEvents api;

@BeforeEach
public void init() {
final TestHttpClient httpClient = new TestHttpClient(List.of(
DataMock.build(Constants.GENERAL_HOST + "/api/accounts/" + accountId + "/contacts/" + contactEventIdEncoded + "/events",
"POST", "api/contactevents/createRequest.json", "api/contactevents/contactEvent.json")
));

final MailtrapConfig testConfig = new MailtrapConfig.Builder()
.httpClient(httpClient)
.token("dummy_token")
.build();

api = MailtrapClientFactory.createMailtrapClient(testConfig).contactsApi().contactEvents();
}

@Test
void test_createContactEvent() {
final CreateContactEventRequest request = new CreateContactEventRequest("UserLogin", Map.of(
"user_id", 11,
"user_name", "Dillan Doe",
"is_active", true
));

final ContactEventResponse created = api.createContactEvent(accountId, contactEventId, request);

assertNotNull(created);
assertEquals(contactEventId, created.getContactId());
assertEquals(3, created.getParams().size());
assertEquals("Dillan Doe", created.getParams().get("user_name"));
}
}
Loading