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

145 lines
5.1 KiB
JavaScript

"use strict";
const eventInscriptionService = require("./events_inscriptions.service");
const marketing = require("../../helpers/sendinblue.helper");
////////////////////////////////////////////////////////////////////
// dataInscription {incription:{...}, {..., event:{...}, reservation:{...}, user:{...}}
////////////////////////////////////////////////////////////////////
/*AHORA SE ALMACENA TODO EN UNA ÚNICA LISTA DE MAILCHIMP, QUE ES LA DEL EVENTO
(si en un futuro se quiere tener listas independientes, bastaría con tratarlo aqui los campos de marketinglist de la reserva ...)
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;
*/
function _generateMarketingDTO(dataInscription) {
let inscriptionDTO = {};
let inscription = dataInscription.inscription ? dataInscription.inscription : dataInscription;
console.log('entro>>>', inscription);
if (inscription) {
inscriptionDTO.id = inscription.id;
inscriptionDTO.source = inscription.source;
inscriptionDTO.event_name = inscription.event ? inscription.event.name : "N/A";
inscriptionDTO.event_date = inscription.event ? inscription.event.init_date : "N/A";
inscriptionDTO.event_marketing_list = inscription.event ? inscription.event.marketing_list : null;
inscriptionDTO.date_inscription = inscription.date;
inscriptionDTO.code_ticket = inscription.code_ticket;
inscriptionDTO.validated = inscription.validated;
inscriptionDTO.reservation_code = inscription.reservation ? inscription.reservation.reservation_code : null;
inscriptionDTO.color = inscription.reservation ? inscription.reservation.color : null;
inscriptionDTO.description = (inscription.reservation ? inscription.reservation.description : "Entrada").toUpperCase();
inscriptionDTO.qrConfig= null;
inscriptionDTO.qrCode= null;
if (inscription.user) {
//Era para mailchimp
/// inscriptionDTO.marketing_memberId = inscription.marketing_memberId ? inscription.marketing_memberId : null;
inscriptionDTO.email = inscription.user.email;
inscriptionDTO.name = inscription.user.name;
inscriptionDTO.surname = inscription.user.surname;
inscriptionDTO.userId = inscription.user.id;
inscriptionDTO.entity = inscription.reservation && inscription.reservation.Entity ? inscription.reservation.Entity.name : (inscription.user.Entity ? inscription.user.Entity.name : inscription.user.entityId);
};
}
console.log('salgo>>>', inscriptionDTO);
return inscriptionDTO;
}
function sleep(time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
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
.addMember(inscriptionDTO.event_marketing_list, inscriptionDTO)
.then(function (result) {
resolve(result.ID);
})
.catch(function (error) {
reject(error);
});
}
});
}
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 {
resolve(marketing.deleteMember(idLista, email));
}
});
}
async function addMarketingList(dataUser, dataInscription) {
dataInscription.user = dataUser.userResult.user;
return _addMember(_generateMarketingDTO(dataInscription));
}
async function syncronizeEventWithMarketingList (eventId) {
let result = false;
try {
let inscriptionsToSync = await eventInscriptionService._getInscriptionsWithoutMemberId(eventId);
for (var i = 0; i < inscriptionsToSync.length; i++) {
const item = inscriptionsToSync[i].get({
plain: true
});
sleep(1000 * i).then(function () {
let inscriptionDTO = _addMember(_generateMarketingDTO(item));
// let marketingDTO = _generateMarketingDTO(item);
// console.log(marketingDTO)
// _deleteMember(marketingDTO.event_marketing_list, marketingDTO.email)
});
};
result = true;
return result;
} catch (error) {
console.log("No se ha podido _syncronizeEventWithMarketingList", error);
}
}
module.exports = {
syncronizeEventWithMarketingList,
addMarketingList,
_deleteMember,
_generateMarketingDTO,
};