app2-api/helpers/sendinblue.helper.js

142 lines
4.6 KiB
JavaScript

const SibApiV3Sdk = require('sib-api-v3-sdk');
const config = require('../config');
const defaultClient = SibApiV3Sdk.ApiClient.instance;
// Configure API key authorization: api-key
const apiKey = defaultClient.authentications['api-key'];
apiKey.apiKey = config.sendinblue.API_KEY;
function _createMember(member) {
const api = new SibApiV3Sdk.ContactsApi();
return new Promise(function (resolve, reject) {
const createContact = new SibApiV3Sdk.CreateContact(); // CreateContact | Values to create a contact
createContact.email = member.email;
createContact.updateEnabled = true; // <- Actualiza el contacto si existe ese email
createContact.attributes = {
NOMBRE: member.name,
APELLIDOS: member.surname,
SMS: member.phone,
SOURCE: member.source,
USERID: member.userId,
//ENTITYNAME: (member.entity) ? member.entity : '',
//RESERVATIONCODE: (member.reservation_code) ? member.reservation_code : '',
//TICKETCODE: member.code_ticket,
//VALIDATED: (member.validated) ? 1 : 0,
//COLOR: (member.color) ? member.color : '',
//DESCOLOR: member.description,
}
console.debug('_createMember:');
console.debug(createContact);
api.createContact(createContact)
.then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
if (data.id) {
// Se ha dado de alta el contacto porque no existía
createContact.ID = data.id;
}
resolve(createContact);
})
.catch(function (error) {
console.error(error);
reject(error);
});
});
};
function _addMemberToList(member, listId) {
const api = new SibApiV3Sdk.ContactsApi();
const contactEmails = new SibApiV3Sdk.AddContactToList(); // AddContactToList | Emails addresses of the contacts
contactEmails.emails = [member.email];
return new Promise(function (resolve, reject) {
api.addContactToList(listId, contactEmails)
.then(function(data) {
console.debug('API called successfully. Returned data: ' + data);
if ((data.contacts.success) && (data.contacts.success[0] === member.email)) {
resolve(data.contacts.success[0])
} else reject()
})
.catch(function(error) {
reject(error)
})
});
}
function _removeMemberFromList(member, listId) {
const api = new SibApiV3Sdk.ContactsApi();
const contactEmails = new SibApiV3Sdk.RemoveContactFromList(); // RemoveContactFromList | Emails adresses of the contact
contactEmails.emails = [member.email];
return new Promise(function (resolve, reject) {
api.removeContactToList(listId, contactEmails)
.then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
if ((data.contacts.success) && (data.contacts.success[0] === member.email)) {
resolve(data.contacts.success[0])
} else reject()
})
.catch(function (error) {
reject(error)
})
});
}
function getLists() {
const api = new SibApiV3Sdk.ContactsApi();
return new Promise(function (resolve, reject) {
api.getAccount().then(function (data) {
console.debug('API called successfully. Returned data: ' + data);
var opts = {
'limit': 10, // Number | Number of documents per page
'offset': 0 // Number | Index of the first document of the page
};
api.getLists(opts)
.then(function (data) {
resolve(data.lists);
})
.catch(function (error) {
reject(error)
})
}, function (error) {
reject(error)
});
});
};
function addMember(listId, member) {
return new Promise(function (resolve, reject) {
_createMember(member)
.then(function(contact) {
return _addMemberToList(contact, listId);
})
.then(function() {
resolve(true);
})
.catch(function (error) {
console.error(error);
reject(error);
});
})
};
function deleteMember(listId, memberId) {
return _removeMemberFromList(member, listId);
}
module.exports = {
getLists,
addMember,
deleteMember,
}