app2-api/modules/events/marketing_list.service.js

168 lines
5.6 KiB
JavaScript
Raw Normal View History

2022-02-23 18:27:58 +00:00
"use strict";
const eventInscriptionService = require("./events_inscriptions.service");
2022-03-11 11:37:03 +00:00
const marketing = require("../../helpers/sendinblue.helper");
2022-02-23 18:27:58 +00:00
2022-03-11 11:37:03 +00:00
////////////////////////////////////////////////////////////////////
2022-09-12 08:56:52 +00:00
// dataInscription {incription:{...}, event:{...}, reservation:{...}, user:{...}}
2022-03-11 11:37:03 +00:00
////////////////////////////////////////////////////////////////////
2022-09-12 08:56:52 +00:00
/*AHORA SE ALMACENA TODO EN UNA ÚNICA LISTA DE MAILCHIMP, QUE ES LA DEL EVENTO
2022-02-23 18:27:58 +00:00
(si en un futuro se quiere tener listas independientes, bastaría con tratarlo aqui los campos de marketinglist de la reserva ...)
2022-09-12 08:56:52 +00:00
if (dataInscription.inscription.reservationId)
marketingListOfInscription = dataInscription.reservation.marketingList
else if (dataInscription.inscription.overflowEventId)
marketingListOfInscription = (await _getEvent(dataInscription.inscription.overflowEventId)).marketingList;
else
marketingListOfInscription = dataInscription.event.marketingList;
2022-02-23 18:27:58 +00:00
*/
2022-03-11 11:37:03 +00:00
function _generateMarketingDTO(dataInscription) {
console.log('entro _generateMarketingDTO >>> ', dataInscription);
let { event, inscription, user, reservation } = dataInscription;
2022-03-11 11:37:03 +00:00
let inscriptionDTO = {};
//let inscription = dataInscription.inscription ? dataInscription.inscription : dataInscription;
if (!event) {
throw new Error('Falta datos del evento en la inscripción (_generateMarketingDTO)');
}
if (!event.marketing_list) {
2022-09-29 11:26:14 +00:00
console.warn('Falta rellenar la lista de Sendinblue en el evento (_generateMarketingDTO)', event.name);
}
2022-03-11 11:37:03 +00:00
if (inscription) {
inscriptionDTO.id = inscription.id;
inscriptionDTO.source = inscription.source;
inscriptionDTO.event_name = event.name ? event.name : "N/A";
inscriptionDTO.event_date = event.init_date ? event.init_date : "N/A";
inscriptionDTO.event_marketing_list = event ? event.marketing_list : null;
2022-03-11 11:37:03 +00:00
inscriptionDTO.date_inscription = inscription.date;
inscriptionDTO.code_ticket = inscription.code_ticket;
inscriptionDTO.validated = inscription.validated;
2022-09-12 08:56:52 +00:00
inscriptionDTO.reservation_code = reservation ? reservation.reservation_code : null;
2022-09-15 11:29:18 +00:00
inscriptionDTO.color = reservation ? reservation.color : "darkgreen";
inscriptionDTO.description = (reservation ? reservation.description : "Entrada").toUpperCase();
2022-09-12 08:56:52 +00:00
inscriptionDTO.qrConfig = null;
inscriptionDTO.qrCode = null;
2022-03-11 11:37:03 +00:00
if (user) {
2022-09-12 08:56:52 +00:00
//Era para mailchimp
/// inscriptionDTO.marketing_memberId = inscription.marketing_memberId ? inscription.marketing_memberId : null;
inscriptionDTO.email = user.email;
inscriptionDTO.name = user.name;
inscriptionDTO.surname = user.surname;
inscriptionDTO.userId = user.id;
inscriptionDTO.entity = reservation && reservation.Entity ? reservation.Entity.name : (user.Entity ? user.Entity.name : user.entityId);
2022-03-11 11:37:03 +00:00
};
}
2022-09-12 08:56:52 +00:00
console.log('salgo>>>', inscriptionDTO);
2022-03-11 11:37:03 +00:00
return inscriptionDTO;
}
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
2022-09-12 08:56:52 +00:00
async function _addMember(inscriptionDTO) {
console.debug('>>>> _addMember', inscriptionDTO.email);
console.debug('>>>> event_marketing_list', inscriptionDTO.event_marketing_list);
// console.debug(member);
return new Promise(function (resolve, reject) {
if (!inscriptionDTO.event_marketing_list) {
// || !member.validated) {
resolve(inscriptionDTO);
} else {
marketing
2022-12-05 14:29:14 +00:00
.addMemberToList(inscriptionDTO.event_marketing_list, inscriptionDTO)
2022-09-12 08:56:52 +00:00
.then(function (result) {
resolve(result.ID);
})
.catch(function (error) {
reject(error);
});
}
});
}
2022-03-11 11:37:03 +00:00
2022-09-12 08:56:52 +00:00
async function _deleteMember(idLista, email) {
console.debug(
"Elimino miembro de la lista de marketing>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<",
email,
idLista,
);
return new Promise(function (resolve, reject) {
if (!idLista || !email) {
resolve();
} else {
2022-12-05 14:29:14 +00:00
resolve(marketing.deleteMemberFromList(idLista, email));
2022-09-12 08:56:52 +00:00
}
});
}
2022-03-11 11:37:03 +00:00
async function addMarketingList(dataUser, dataInscription) {
dataInscription.user = dataUser.userResult.user;
return _addMember(_generateMarketingDTO(dataInscription));
}
2022-09-12 08:56:52 +00:00
async function syncronizeEventWithMarketingList(eventId) {
2022-03-11 11:37:03 +00:00
let result = false;
try {
let inscriptionsToSync = await eventInscriptionService._getInscriptionsWithoutMemberId(eventId);
for (var i = 0; i < inscriptionsToSync.length; i++) {
2022-09-12 08:56:52 +00:00
const item = inscriptionsToSync[i].get({
plain: true
});
//Adaptamos el objeto a lo que espera _generateMarketingDTO
// dataInscription {incription:{...}, event:{...}, reservation:{...}, user:{...}}
// en _getInscriptionsWithoutMemberId devuelve la inscripcion en el raiz
item.inscription = item;
2022-09-12 08:56:52 +00:00
sleep(1000 * i).then(function () {
let inscriptionDTO = _addMember(_generateMarketingDTO(item));
// let marketingDTO = _generateMarketingDTO(item);
// console.log(marketingDTO)
// _deleteMember(marketingDTO.event_marketing_list, marketingDTO.email)
});
2022-03-11 11:37:03 +00:00
};
2022-09-12 08:56:52 +00:00
2022-03-11 11:37:03 +00:00
result = true;
return result;
2022-02-23 18:27:58 +00:00
} catch (error) {
2022-03-11 11:37:03 +00:00
console.log("No se ha podido _syncronizeEventWithMarketingList", error);
2022-02-23 18:27:58 +00:00
}
}
2022-03-11 11:37:03 +00:00
2022-12-12 11:28:37 +00:00
function userToMarketingDTO(user) {
2022-12-05 14:47:52 +00:00
const result = {};
result.email = user.email ? user.email : '';
result.name = user.name ? user.name : '';
result.surname = user.surname ? user.surname : '';
result.userId = user.id ? user.id : '';
result.entity = user.Entity ? user.Entity.name : '';
2022-12-05 14:47:52 +00:00
return result;
}
2022-03-11 11:37:03 +00:00
2022-02-23 18:27:58 +00:00
module.exports = {
2022-03-11 11:37:03 +00:00
syncronizeEventWithMarketingList,
addMarketingList,
_deleteMember,
_generateMarketingDTO,
2022-12-12 11:28:37 +00:00
userToMarketingDTO,
2022-03-11 11:37:03 +00:00
2022-02-23 18:27:58 +00:00
};