From 9fd846af95d82fb89b856fc3f56322ada863bcd8 Mon Sep 17 00:00:00 2001 From: david Date: Thu, 7 Nov 2019 11:39:20 +0100 Subject: [PATCH] a --- helpers/composes.helper.js | 15 ++++- .../notification/notification.controller.js | 61 ++++++++++++++----- modules/notification/notification.routes.js | 6 +- modules/notification/notification.service.js | 27 +++++++- .../notification/notification.validations.js | 23 ++++++- 5 files changed, 110 insertions(+), 22 deletions(-) diff --git a/helpers/composes.helper.js b/helpers/composes.helper.js index 9beb82f..e8fcff4 100644 --- a/helpers/composes.helper.js +++ b/helpers/composes.helper.js @@ -254,6 +254,18 @@ const entityComposer = (entity, context) => { ) }; +const usersIdsComposer = (inscriptions) => { + let usersId = [] + if (inscriptions) { + inscriptions.map((inscription) => { + usersId.push({ + userId: inscription.userId, + }); + }); + }; + return usersId; +}; + module.exports = { entityComposer, @@ -261,5 +273,6 @@ module.exports = { eventComposer, commentComposer, citiesComposer, - locationComposer + locationComposer, + usersIdsComposer, } \ No newline at end of file diff --git a/modules/notification/notification.controller.js b/modules/notification/notification.controller.js index f0d21cd..cf84b86 100644 --- a/modules/notification/notification.controller.js +++ b/modules/notification/notification.controller.js @@ -6,6 +6,8 @@ const { buildContext } = require('../../core/controllers'); const notificationService = require('./notification.service'); const notificationDetailService = require('./notification_detail.service'); const userDeviceService = require('./user_device.service'); +const eventInscriptionService = require('../events/events_inscriptions.service'); +const { usersIdsComposer } = require('../../helpers/composes.helper'); const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper'); @@ -15,11 +17,11 @@ const controllerOptions = { MODULE_NAME }; const extraControllers = { - sendNotificationEvent: () => { + sendNotificationEvent: async (req, res, next) => { /** * notificationSample = { - * "title": "título de la notificación", + * "tittle": "título de la notificación", * "message": "cuerpo de la notificación", * "recipients": { * "eventId": "xxx-xxx-xxx-xxx", @@ -40,22 +42,49 @@ const extraControllers = { * } *} */ + let usersIds = null; + const params = req.body; + const eventId = params.recipients.eventId; + const segment = params.recipients.segment; + console.log('prueba de llamada>>>>> ', params); + + try { + notificationService.createNotification(params.date, params.title, params.message, undefined, 'default', params.data, req.user.id); + switch (segment) { + //Todos los inscritos al evento tanto en validos como en lista de espera + case 'ALL': + usersIds = await eventInscriptionService._getInscriptionByEvent(eventId); + break; + //Todos los inscritos tanto invitados como libres + case 'ALL_VALIDATED': + usersIds = await eventInscriptionService._getInscriptionByEventAndValidated(eventId, true); + break; + //Todos los de lista de espera tanto invitados como libres (Actualmente en invitados no hay lista de espera) + case 'ALL_NOT_VALIDATED': + usersIds = await eventInscriptionService._getInscriptionByEventAndValidated(eventId, false); + break; -//eventId -//tittle -//message -//recipients: 1 - a todos -// 2 - inscritos con entrada (validated = 1) (libres e invitados) -// 3 - solo a invitados (reservationId is not null, and entityId pertenece a partners) -// 4 - solo a lista de espera (validated = 0) (libres e invitados "si hubiera lista de espera en invitaciones") -//dataDestination: json con screen destino -//{ -// type: URL | screen | notification -// parameter: {} -//} + //Solo invitados como actualmente no se usa codigo de reserva para los coles, vale con filtrar por aquellos que tengan codigo de reserva + case 'PARTNERS_ALL': + usersIds = await eventInscriptionService._getInscriptionByEventFromPartner(eventId); + + break; -// let params = extractParamsFromRequest(req, res); -console.log('prueba de llamada>>>>> ', params); + //Todos los inscritos al evento, tanto validados como en lista de espera + default: //ALL + break; + } + + usersIds = usersIdsComposer(usersIds); + console.log('usuarios inscritos>>>>> ', usersIds); + + } catch(error) { + return handleErrorResponse(MODULE_NAME, 'sendNotificationEvent', error, res); + } + + + + return handleResultResponse("sendNotificationEvent", null, params, res, httpStatus.OK); }, sendNotification: (config) => { diff --git a/modules/notification/notification.routes.js b/modules/notification/notification.routes.js index 33c9f71..41eb88a 100644 --- a/modules/notification/notification.routes.js +++ b/modules/notification/notification.routes.js @@ -6,7 +6,7 @@ const PaginateMiddleware = require('../../middlewares/paginate'); const FieldMiddleware = require('../../middlewares/fields'); const SortMiddleware = require('../../middlewares/sort'); const notificationController = require('./notification.controller'); -const { deviceTokenInputType, notificationSendType } = require('./notification.validations'); +const { pushSendEvent, deviceTokenInputType, notificationSendType } = require('./notification.validations'); const generalInvalidFields = [ 'createdAt', 'updatedAt', @@ -44,8 +44,8 @@ routes.post('/admin/notifications', routes.post('/admin/notifications/event', isAdministratorUser, -// SchemaValidator(notificationSendType, true), - notificationController.sendNotificationEvent() + SchemaValidator(pushSendEvent, true), + notificationController.sendNotificationEvent ); /* Borrar cuando ya no aparezca la versión 1.0.10 */ diff --git a/modules/notification/notification.service.js b/modules/notification/notification.service.js index ddc5421..ef93031 100644 --- a/modules/notification/notification.service.js +++ b/modules/notification/notification.service.js @@ -6,7 +6,32 @@ const models = require('../../core/models'); const expo = new Expo(); const extraMethods = { - + + createNotification: (date, title, body, ttl, priority, data, userId) => { + console.log('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>< { // The Expo push notification service accepts batches of notifications so diff --git a/modules/notification/notification.validations.js b/modules/notification/notification.validations.js index ca8fdcf..43a38a8 100644 --- a/modules/notification/notification.validations.js +++ b/modules/notification/notification.validations.js @@ -11,6 +11,27 @@ const pushSendType = Joi.object().keys({ //token: Joi.string().required(), }); +const pushSendEvent = Joi.object().keys({ + date: Joi.date().required(), + title: Joi.string().required(), + message: Joi.string().required(), + recipients: Joi.object().keys({ + eventId: Joi.string().required(), + segment: Joi.string().required(), + }), + data: Joi.object().keys({ + type: Joi.string().required(), + title: Joi.string().required(), + message: Joi.string().required(), + button: Joi.object().keys({ + caption: Joi.string().required(), + url: Joi.string().optional(), + screen: Joi.string().optional(), + paramId: Joi.string().optional(), + }), + }), +}); + module.exports = { - deviceTokenInputType, pushSendType + deviceTokenInputType, pushSendType, pushSendEvent };