Skip to content
Merged
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,48 @@
package io.mailtrap.examples.contactfields;

import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.factory.MailtrapClientFactory;
import io.mailtrap.model.ContactFieldDataType;
import io.mailtrap.model.request.contactfields.CreateContactFieldRequest;
import io.mailtrap.model.request.contactfields.UpdateContactFieldRequest;

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

public class ContactFields {

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

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

final var client = MailtrapClientFactory.createMailtrapClient(config);

var createResponse = client.contactsApi().contactFields()
.createContactField(ACCOUNT_ID, new CreateContactFieldRequest("Contact name", ContactFieldDataType.TEXT, "merge-tag"));

System.out.println(createResponse);

var updateResponse = client.contactsApi().contactFields()
.updateContactField(ACCOUNT_ID, createResponse.getId(), new UpdateContactFieldRequest("Updated name", "updated-merge-tag"));

System.out.println(updateResponse);

var allContactFields = client.contactsApi().contactFields()
.getAllContactFields(ACCOUNT_ID);

System.out.println(allContactFields);

var contactField = client.contactsApi().contactFields()
.getContactField(ACCOUNT_ID, createResponse.getId());

System.out.println(contactField);

client.contactsApi().contactFields()
.deleteContactField(ACCOUNT_ID, createResponse.getId());
}
}
56 changes: 56 additions & 0 deletions src/main/java/io/mailtrap/api/contactfields/ContactFields.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package io.mailtrap.api.contactfields;

import io.mailtrap.model.request.contactfields.CreateContactFieldRequest;
import io.mailtrap.model.request.contactfields.UpdateContactFieldRequest;
import io.mailtrap.model.response.contactfields.ContactFieldResponse;

import java.util.List;

public interface ContactFields {

/**
* Get all Contact Fields existing in your account
*
* @param accountId unique account ID
* @return existing contact fields
*/
List<ContactFieldResponse> getAllContactFields(long accountId);

/**
* Create new Contact Fields (up to 40)
*
* @param accountId unique account ID
* @param request contact field data
* @return attributes of the created contact field
*/
ContactFieldResponse createContactField(long accountId, CreateContactFieldRequest request);

/**
* Get Contact Field by id
*
* @param accountId unique account ID
* @param fieldId Unique Contact Field ID
* @return attributes of the contact field
*/
ContactFieldResponse getContactField(long accountId, long fieldId);

/**
* Update existing Contact Field
*
* @param accountId unique account ID
* @param fieldId Unique Contact Field ID
* @param request update data. You cannot change data_type of the field
* @return attributes of the contact field
*/
ContactFieldResponse updateContactField(long accountId, long fieldId, UpdateContactFieldRequest request);

/**
* Delete existing Contact Field.
* You cannot delete a Contact Field which is used in Automations, Email Campaigns, and in conditions of Contact Segments
*
* @param accountId unique account ID
* @param fieldId Unique Contact Field ID
*/
void deleteContactField(long accountId, long fieldId);

}
74 changes: 74 additions & 0 deletions src/main/java/io/mailtrap/api/contactfields/ContactFieldsImpl.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package io.mailtrap.api.contactfields;

import io.mailtrap.CustomValidator;
import io.mailtrap.api.apiresource.ApiResourceWithValidation;
import io.mailtrap.config.MailtrapConfig;
import io.mailtrap.http.RequestData;
import io.mailtrap.model.request.contactfields.CreateContactFieldRequest;
import io.mailtrap.model.request.contactfields.UpdateContactFieldRequest;
import io.mailtrap.model.response.contactfields.ContactFieldResponse;

import java.util.List;

import static io.mailtrap.Constants.GENERAL_HOST;

public class ContactFieldsImpl extends ApiResourceWithValidation implements ContactFields {

public ContactFieldsImpl(MailtrapConfig config, CustomValidator customValidator) {
super(config, customValidator);
this.apiHost = GENERAL_HOST;
}

@Override
public List<ContactFieldResponse> getAllContactFields(long accountId) {
return httpClient.getList(
String.format(apiHost + "/api/accounts/%d/contacts/fields", accountId),
new RequestData(),
ContactFieldResponse.class
);
}

@Override
public ContactFieldResponse createContactField(long accountId, CreateContactFieldRequest request) {

validateRequestBodyAndThrowException(request);

return httpClient.post(
String.format(apiHost + "/api/accounts/%d/contacts/fields", accountId),
request,
new RequestData(),
ContactFieldResponse.class
);
}

@Override
public ContactFieldResponse getContactField(long accountId, long fieldId) {
return httpClient.get(
String.format(apiHost + "/api/accounts/%d/contacts/fields/%d", accountId, fieldId),
new RequestData(),
ContactFieldResponse.class
);
}

@Override
public ContactFieldResponse updateContactField(long accountId, long fieldId, UpdateContactFieldRequest request) {

validateRequestBodyAndThrowException(request);

return httpClient.patch(
String.format(apiHost + "/api/accounts/%d/contacts/fields/%d", accountId, fieldId),
request,
new RequestData(),
ContactFieldResponse.class
);
}

@Override
public void deleteContactField(long accountId, long fieldId) {
httpClient.delete(
String.format(apiHost + "/api/accounts/%d/contacts/fields/%d", accountId, fieldId),
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.contactfields.ContactFields;
import io.mailtrap.api.contactimports.ContactImports;
import io.mailtrap.api.contactlists.ContactLists;
import io.mailtrap.api.contacts.Contacts;
Expand All @@ -17,4 +18,5 @@ public class MailtrapContactsApi {
private final ContactLists contactLists;
private final Contacts contacts;
private final ContactImports contactImports;
private final ContactFields contactFields;
}
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.contactfields.ContactFieldsImpl;
import io.mailtrap.api.contactimports.ContactImportsImpl;
import io.mailtrap.api.contactlists.ContactListsImpl;
import io.mailtrap.api.contacts.ContactsImpl;
Expand Down Expand Up @@ -55,8 +56,9 @@ private static MailtrapContactsApi createContactsApi(MailtrapConfig config, Cust
final var contactLists = new ContactListsImpl(config);
final var contacts = new ContactsImpl(config);
final var contactImports = new ContactImportsImpl(config, customValidator);
final var contactFields = new ContactFieldsImpl(config, customValidator);

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

private static MailtrapGeneralApi createGeneralApi(MailtrapConfig config) {
Expand Down
33 changes: 33 additions & 0 deletions src/main/java/io/mailtrap/model/ContactFieldDataType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.mailtrap.model;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonValue;

public enum ContactFieldDataType {
TEXT("text"),
INTEGER("integer"),
FLOAT("float"),
BOOLEAN("boolean"),
DATE("date");

private final String value;

ContactFieldDataType(String value) {
this.value = value;
}

@JsonValue
public String getValue() {
return value;
}

@JsonCreator
public static ContactFieldDataType fromValue(String value) {
for (ContactFieldDataType type : ContactFieldDataType.values()) {
if (type.value.equalsIgnoreCase(value)) {
return type;
}
}
throw new IllegalArgumentException("Unknown value: " + value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package io.mailtrap.model.request.contactfields;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.mailtrap.model.AbstractModel;
import io.mailtrap.model.ContactFieldDataType;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class CreateContactFieldRequest extends AbstractModel {

@Size(max = 80)
private String name;

@JsonProperty("data_type")
private ContactFieldDataType dataType;

@Size(max = 80)
@JsonProperty("merge_tag")
private String mergeTag;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.mailtrap.model.request.contactfields;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.mailtrap.model.AbstractModel;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Getter;

@Getter
@AllArgsConstructor
public class UpdateContactFieldRequest extends AbstractModel {

@Size(max = 80)
private String name;

@Size(max = 80)
@JsonProperty("merge_tag")
private String mergeTag;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.mailtrap.model.response.contactfields;

import com.fasterxml.jackson.annotation.JsonProperty;
import io.mailtrap.model.ContactFieldDataType;
import lombok.Data;

@Data
public class ContactFieldResponse {

private long id;

private String name;

@JsonProperty("data_type")
private ContactFieldDataType dataType;

@JsonProperty("merge_tag")
private String mergeTag;

}
Loading