My_Test_Repo/force-app/main/default/classes/BrevoContactTrigger_Handler...

171 lines
8.8 KiB
OpenEdge ABL

public class BrevoContactTrigger_Handler {
/*Method to create contact in Brevo when created in SF*/
@future(callout=true)
public static void createContactInBrevo(String email, String firstName, String lastName, String phone, Id contactId) {
try {
// Fetch the contact record
Contact con = [SELECT Brevo_Status__c, Brevo_List__c FROM Contact WHERE Id = :contactId];
// Map the Brevo_List__c values to list IDs
Map<String, Integer> listMap = new Map<String, Integer>{
'Salesforce Contact'=> 7,
'Test List' => 8,
'Identified Contacts' => 6
};
// Get the list IDs from the Brevo_List__c field
List<Integer> listIds = new List<Integer>();
for (String listName : con.Brevo_List__c.split(';')) {
if (listMap.containsKey(listName)) {
listIds.add(listMap.get(listName));
}
}
HttpRequest req = new HttpRequest();
Http http = new Http();
req.setEndpoint('https://api.brevo.com/v3/contacts');
req.setMethod('POST');
req.setHeader('Content-Type', 'application/json');
req.setHeader('api-key', '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');
Map<String, Object> brevoContact = new Map<String, Object>();
brevoContact.put('email', email);
Map<String, Object> brevoAttributes = new Map<String, Object>();
brevoAttributes.put('FIRSTNAME', firstName);
brevoAttributes.put('LASTNAME', lastName);
brevoAttributes.put('SMS', phone);
brevoContact.put('attributes', brevoAttributes);
String brevoBody = JSON.serialize(brevoContact);
req.setBody(brevoBody);
try {
HttpResponse res = http.send(req);
if (res.getStatusCode() != 201) {
System.debug('Failed to create contact in Brevo with status code: ' + res.getStatusCode());
con.Brevo_Status__c = 'Error: ' + res.getStatusCode();
}else{
Map<String, Object> responseMap = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
String brevoId = String.valueOf(responseMap.get('id'));
//String successMessage = String.valueOf(responseMap.get('message'));
System.debug('Created Successfully in Brevo with ID: '+ brevoId);
con.Brevo_Status__c = 'Contact created in Brevo successfully: ' + ', Brevo ID: ' + brevoId;
}
database.update(con);
} catch(Exception ex) {
System.debug('API call failed with message: ' + ex.getMessage());
}
} catch(Exception ex) {
System.debug('API call failed with message: ' + ex.getMessage());
}
}
/*Method to update contact in Brevo when updated in SF Also, if update contact not exist in Brevo create new one*/
@future(callout=true)
public static void updateContactInBrevo(String email, String firstName, String lastName, String phone, Id contactId) {
try {
HttpRequest req = new HttpRequest();
Http http = new Http();
// GET request to check if the contact exists
req.setEndpoint('https://api.brevo.com/v3/contacts/' + email);
req.setMethod('GET');
req.setHeader('Content-Type', 'application/json');
req.setHeader('api-key', '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');
HttpResponse res = http.send(req);
Contact con = [SELECT Brevo_Status__c FROM Contact WHERE Id = :contactId];
if (res.getStatusCode() == 200) {
// contact exists, sending a PUT request to update the contact
req.setMethod('PUT');
Map<String, Object> brevoContact = new Map<String, Object>();
brevoContact.put('email', email);
Map<String, Object> brevoAttributes = new Map<String, Object>();
brevoAttributes.put('FIRSTNAME', firstName);
brevoAttributes.put('LASTNAME', lastName);
brevoAttributes.put('SMS', phone);
brevoContact.put('attributes', brevoAttributes);
String brevoBody = JSON.serialize(brevoContact);
req.setBody(brevoBody);
HttpResponse updateRes = http.send(req);
if (updateRes.getStatusCode() == 204) {
System.debug('Record successfully updated in Brevo with status code: ' + updateRes.getStatusCode());
con.Brevo_Status__c = 'Update Successfully, Brevo Email: ' + email;
} else {
System.debug('Failed to update contact in Brevo with status code: ' + updateRes.getStatusCode());
con.Brevo_Status__c = 'Update Error: ' + updateRes.getStatusCode();
}
database.update(con);
} else {
System.debug('Contact does not exist in Brevo creating new');
HttpRequest req1 = new HttpRequest();
Http http1 = new Http();
req1.setEndpoint('https://api.brevo.com/v3/contacts');
req1.setMethod('POST');
req1.setHeader('Content-Type', 'application/json');
req1.setHeader('api-key', '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');
Map<String, Object> brevoContact = new Map<String, Object>();
brevoContact.put('email', email);
Map<String, Object> brevoAttributes = new Map<String, Object>();
brevoAttributes.put('FIRSTNAME', firstName);
brevoAttributes.put('LASTNAME', lastName);
brevoAttributes.put('SMS', phone);
brevoContact.put('attributes', brevoAttributes);
String brevoBody = JSON.serialize(brevoContact);
req1.setBody(brevoBody);
HttpResponse res1 = http.send(req1);
if (res1.getStatusCode() != 201) {
System.debug('Failed to create contact in Brevo with status code: ' + res.getStatusCode());
con.Brevo_Status__c = 'Create Error: ' + res.getStatusCode();
}else{
Map<String, Object> responseMap = (Map<String, Object>) JSON.deserializeUntyped(res1.getBody());
String brevoId = String.valueOf(responseMap.get('id'));
System.debug('Created Successfully in Brevo with ID: '+ brevoId);
con.Brevo_Status__c = 'Create Success, Brevo ID: ' + brevoId;
}
database.update(con);
}
} catch(Exception ex) {
System.debug('API call failed with message: ' + ex.getMessage());
}
}
/*Method to delete contact from Brevo when deleted from SF*/
@future(callout=true)
public static void deleteContactInBrevo(String email) {
HttpRequest req = new HttpRequest();
Http http = new Http();
// GET request to check if the contact exists
req.setEndpoint('https://api.brevo.com/v3/contacts/' + email);
req.setMethod('GET');
req.setHeader('Content-Type', 'application/json');
req.setHeader('api-key', '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');
try {
HttpResponse res = http.send(req);
if (res.getStatusCode() == 200) {
// contact exists, sending a DELETE request to delete the contact
req.setMethod('DELETE');
HttpResponse deleteRes = http.send(req);
if (deleteRes.getStatusCode() == 204) {
System.debug('Record successfully deleted from Brevo with status code: ' + deleteRes.getStatusCode());
} else {
System.debug('Failed to delete contact in Brevo with status code: ' + deleteRes.getStatusCode());
}
}
} catch(Exception ex) {
System.debug('API call failed with message: ' + ex.getMessage());
}
}
}