From e466493584c03ffc77e1780273dc055f111a7b72 Mon Sep 17 00:00:00 2001 From: david Date: Mon, 29 Jul 2019 14:59:01 +0200 Subject: [PATCH] a --- helpers/mailchimp.helper.js | 134 ++++++++++++++++++ modules/events/event.controller.js | 14 ++ modules/events/events_inscriptions.service.js | 40 ++++++ modules/venues/venue.routes.js | 9 +- package.json | 3 +- 5 files changed, 191 insertions(+), 9 deletions(-) create mode 100644 helpers/mailchimp.helper.js diff --git a/helpers/mailchimp.helper.js b/helpers/mailchimp.helper.js new file mode 100644 index 0000000..eaf8f5a --- /dev/null +++ b/helpers/mailchimp.helper.js @@ -0,0 +1,134 @@ +const Mailchimp = require('mailchimp-api-v3'); +const mailchimp_key = "7d4ffd805bdb43a34f0806c0d2970e73-us3"; + //moment = require('moment'), +// _ = require('lodash'), +// conf = require('../conf'); + +//var logger = require("../helpers/logger"); + +const mailchimp = new Mailchimp(mailchimp_key); + + +function getLists() { + return new Promise(function (resolve, reject) { +console.log('voy a llamar a la API'); + mailchimp.get('/lists', { + fields: 'lists.id,lists.name', + sort_field: 'date_created', + sort_dir: 'DESC', + since_date_created: moment("2019-02-14").format("YYYY-MM-DD"), + }) + .then(function (results) { + resolve(results.lists); + + }) + .catch(function (error) { + reject(error) + }) + }); +}; +/* + +function getMembers(listId) { + return new Promise(function (resolve, reject) { + logger.debug('getMembers => ', '/lists/' + listId + '/members'); + mailchimp.get('/lists/' + listId + '/members', { + fields: 'members.id,members.email_address,members.merge_fields', + }) + .then(function (results) { + resolve(results.members); + + }) + .catch(function (error) { + reject(error) + }) + }); +} + +function getMember(listId, data) { + return new Promise(function (resolve, reject) { + logger.debug('getMember => ', '/search-members', listId, ' email: ' + data.email); + mailchimp.get('/search-members', { + list_id: listId, + query: data.email, + fields: ['email_address'], + }) + .then(function (results) { + if (results && results.exact_matches && (results.exact_matches.total_items == 1)) { + logger.debug('getMember => ', results.exact_matches.members[0].id); + resolve(results.exact_matches.members[0]); + } + else reject(); + }) + .catch(function (error) { + reject(error) + }) + }); +} +*/ +function addMember(listId, member) { + return new Promise(function (resolve, reject) { +// logger.debug('addMember => ', '/lists/' + listId + '/members', ' email: ' + member.email); + console.log('addMember => ', '/lists/' + listId + '/members', ' email: ' + member.email); + + + var member2 = { + EMAIL: member.email, + FNAME: member.name, + LNAME: member.surname, + SOURCE: member.source, + RESERCODE: member.reservation_code, + TICKETCODE: member.code_ticket, + VALIDATED: member.validated, + COLOR: member.color, + DESCOLOR: member.description, + ENTITYNAME: member.entityId, + USERID: member.userId + } + + mailchimp.post('/lists/' + listId + '/members', { + email_address: member2.EMAIL, + merge_fields: member2, + status: 'subscribed' + }) + .then(function (results) { + console.log('addMember => ', member.EMAIL, results.id, results.statusCode); + resolve(results); + }) + .catch(function (error) { + console.log('addMember => ', error.title, error.status); + if ((error.status == 400) && (error.title == 'Member Exists')) { + resolve(getMember(listId, member)); + } else { + reject(error); + } + }) + }); +}; + +/* + +function deleteMember(listId, memberId) { + return new Promise(function (resolve, reject) { + logger.debug('deleteMember => ', '/lists/' + listId + '/members/' + memberId); + mailchimp.delete('/lists/' + listId + '/members/' + memberId) + .then(function (results) { + resolve(results); + + }) + .catch(function (error) { + if (error.status == 404) { // Miembro no existe + resolve({}) + } else { + reject(error); + } + }) + }); +} +*/ + + +module.exports.getLists = getLists; +//module.exports.getMembers = getMembers; +module.exports.addMember = addMember; +//module.exports.deleteMember = deleteMember; \ No newline at end of file diff --git a/modules/events/event.controller.js b/modules/events/event.controller.js index 813e910..8d2d3e1 100644 --- a/modules/events/event.controller.js +++ b/modules/events/event.controller.js @@ -334,8 +334,22 @@ console.log('actualizo confirmados de la nueva reserva'); return handleErrorResponse(MODULE_NAME, 'createInscription', error, res); } + + + const marketingListOfInscription = dataInscription.event.marketing_list; +/* + 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; +*/ + eventInscriptionService._addMember(marketingListOfInscription, dataUser.userResult.user, dataInscription.inscription, dataInscription.reservation) return handleResultResponse(await dataInscription.inscription.toJSON(), null, params, res, httpStatus.CREATED) + + /* if (invitationCode) { _getLevelAndPartner() diff --git a/modules/events/events_inscriptions.service.js b/modules/events/events_inscriptions.service.js index 0d598ac..1e79b65 100644 --- a/modules/events/events_inscriptions.service.js +++ b/modules/events/events_inscriptions.service.js @@ -5,6 +5,7 @@ const _ = require('lodash'); const moment = require('moment'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const models = require('../../core/models'); +const marketing = require('../../helpers/mailchimp.helper') const extraMethods = { @@ -109,6 +110,45 @@ console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>< { + + console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr1'); + console.log(user); + + + var member = { + email: user.email, + name: user.name, + surname: user.surname, + source: inscription.source, + reservation_code: (reservation) ? reservation.reservation_code : null, + code_ticket: inscription.code_ticket, + validated: inscription.validated, + color: (reservation) ? reservation.color : 'white', + description: (reservation) ? reservation.description : 'entrada libre', + entityId: (reservation) ? reservation.entityId : user.entityId, + userId: user.id + } + + console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr1'); + console.log(marketingListId, member.validated); + return new Promise(function (resolve, reject) { + if (!marketingListId || !member.validated) { + resolve(member) + } else { + console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasddddddmemberrrrr2'); + marketing.addMember(marketingListId, member) + .then(function (result) { + member = result; + resolve(member); + }) + .catch(function (error) { + reject(error) + }); + } + }); + }, }; diff --git a/modules/venues/venue.routes.js b/modules/venues/venue.routes.js index a961d71..16b423d 100644 --- a/modules/venues/venue.routes.js +++ b/modules/venues/venue.routes.js @@ -12,14 +12,7 @@ const venueController = require('./venue.controller'); routes.get('/venues', //SortMiddleware.middleware({ default: "name" }), - venueController.find({ - scopes: ['includeCountEvents'] - }) -); - -routes.get('/venues', - //SortMiddleware.middleware({ default: "name" }), - venueController.find() + venueController.find() ); routes.get('/venues/:id', diff --git a/package.json b/package.json index 357850a..8b603ce 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "sequelize": "^5.6.1", "vimeo": "^2.1.1", "vm": "^0.1.0", - "winston": "^3.2.1" + "winston": "^3.2.1", + "mailchimp-api-v3": "^1.12.0" } }