From 1425134736eb13035bb2c439d442a469979087dc Mon Sep 17 00:00:00 2001 From: david Date: Thu, 3 Oct 2019 21:37:56 +0200 Subject: [PATCH] Notificaciones push --- core/passport.js | 3 +- modules/auth/auth.controller.js | 4 +- modules/events/event.controller.js | 2 +- modules/push/push.controller.js | 54 +++++++++++++++++++++ modules/push/push.routes.js | 28 +++++++++++ modules/push/push.service.js | 10 ++++ modules/push/push.validations.js | 9 ++++ modules/{auth => push}/user_device.model.js | 12 ++--- 8 files changed, 108 insertions(+), 14 deletions(-) create mode 100644 modules/push/push.controller.js create mode 100644 modules/push/push.routes.js create mode 100644 modules/push/push.service.js create mode 100644 modules/push/push.validations.js rename modules/{auth => push}/user_device.model.js (73%) diff --git a/core/passport.js b/core/passport.js index 61ccc81..8cb0709 100644 --- a/core/passport.js +++ b/core/passport.js @@ -101,7 +101,7 @@ console.log('PASSPORT - local-phone'); passport.use('jwt', new CustomStrategy(async (req, done) => { const token = ((req && req.headers && req.headers['x-access-token']) ? req.headers['x-access-token'] : null); const appVersion = ((req && req.headers && req.headers['accept-version']) ? req.headers['accept-version'] : null); - console.log('appVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEErsion: ', appVersion); + console.log('appVersion: ', appVersion); if (!token) { //console.log('no tengo token'); @@ -119,7 +119,6 @@ passport.use('jwt', new CustomStrategy(async (req, done) => { if (appVersion) { if (user.app_version != appVersion){ const result = userService._updateLastLoginAndVersionUser(user.id, appVersion); - console.log('PRUEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEBA>>>> ', result); user.app_version = appVersion; } } diff --git a/modules/auth/auth.controller.js b/modules/auth/auth.controller.js index 74fb179..abd3f2d 100644 --- a/modules/auth/auth.controller.js +++ b/modules/auth/auth.controller.js @@ -48,7 +48,7 @@ async function login(req, res, next) { async function loginWithPhone(req, res, next) { try { const appVersion = ((req && req.headers && req.headers['accept-version']) ? req.headers['accept-version'] : null); - console.log('loginWithPhone - appVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEErsion: ', appVersion); + console.log('loginWithPhone - appVersion: ', appVersion); console.log(req.user); const findOptions = { @@ -114,7 +114,7 @@ async function register(req, res, next) { }; const appVersion = ((req && req.headers && req.headers['accept-version']) ? req.headers['accept-version'] : null); - console.log('loginWithPhone - appVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEErsion: ', appVersion); + console.log('loginWithPhone - appVersion: ', appVersion); //Comprobamos si el usuario ya existe en nuestro sistema diff --git a/modules/events/event.controller.js b/modules/events/event.controller.js index 299b594..6af3eed 100644 --- a/modules/events/event.controller.js +++ b/modules/events/event.controller.js @@ -100,7 +100,7 @@ const extraControllers = { checkReservationCode: async (req, res, next) => { const params = extractParamsFromRequest(req, res, {}); const appVersion = ((req && req.headers && req.headers['accept-version']) ? req.headers['accept-version'] : null); - console.log('checkReservationCode - appVEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEErsion: ', appVersion); + console.log('checkReservationCode - appVersion: ', appVersion); console.log('checkReservationCode - PARAMS ', params); const eventId = params.params.id; diff --git a/modules/push/push.controller.js b/modules/push/push.controller.js new file mode 100644 index 0000000..e1b6d31 --- /dev/null +++ b/modules/push/push.controller.js @@ -0,0 +1,54 @@ +'use strict'; +const httpStatus = require('http-status'); +const Sequelize = require('sequelize'); +const generateControllers = require('../../core/controllers'); +const { buildContext } = require('../../core/controllers'); +const pushService = require('./push.service'); +const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper'); + +// Module Name +const MODULE_NAME = '[push.controller]'; +const controllerOptions = { MODULE_NAME }; + +const extraControllers = { + createOrUpdate: (config) => { + return async (req, res, next) => { + try { + const context = buildContext(req, config); + var data = { + token: req.body.token, + valid: 1, + userId: context.user.id + }; + + let params = extractParamsFromRequest(req, res, { + includeAll: false, + paginate: { limit: 1, page: 1 }, + params: { + userId: context.user.id, + token: data.token, + } + }); + + // Buscamos el token y el usuario + let result = await pushService.fetchOne(params, context); + if (!result) { + // Dar de alta el token + console.log('>> Dar de alta el token'); + result = await pushService.create(data, context); + } else { + // Actualizar el token + console.log('>> Actualizar el token'); + result = await pushService.update(params.params, data, context); + } + } catch(error) { + console.error(error); + } finally { + // En todo caso devolver OK al cliente + return handleResultResponse('OK', null, null, res, httpStatus.OK); + } + } + }, +}; + +module.exports = generateControllers(pushService, extraControllers, controllerOptions); \ No newline at end of file diff --git a/modules/push/push.routes.js b/modules/push/push.routes.js new file mode 100644 index 0000000..e606181 --- /dev/null +++ b/modules/push/push.routes.js @@ -0,0 +1,28 @@ +const routes = require('express').Router(); + +const { isAdministratorUser, isLoggedUser } = require('../../middlewares/accessValidator'); +const SchemaValidator = require('../../middlewares/schemaValidator'); + +const FieldMiddleware = require('../../middlewares/fields'); +const pushTokenController = require('./push.controller'); +const { pushInputType } = require('./push.validations'); + +const generalInvalidFields = [ + 'createdAt', 'updatedAt', +]; + +routes.get('/me/pushtoken', + isLoggedUser, + FieldMiddleware.middleware({ + invalidFields: generalInvalidFields + }), + pushTokenController.findOne() +); + +routes.post('/me/pushtoken', + isLoggedUser, + SchemaValidator(pushInputType, true), + pushTokenController.createOrUpdate() +); + +module.exports = routes; \ No newline at end of file diff --git a/modules/push/push.service.js b/modules/push/push.service.js new file mode 100644 index 0000000..51178e2 --- /dev/null +++ b/modules/push/push.service.js @@ -0,0 +1,10 @@ +const _ = require('lodash'); +const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); +const models = require('../../core/models'); +const cdnHelper = require('../../helpers/cdn.helper'); +const { extractProviderInfo } = require('../../helpers/providers.helper'); + +const extraMethods = {}; + + +module.exports = generateService(models.UserDevice, extraMethods); \ No newline at end of file diff --git a/modules/push/push.validations.js b/modules/push/push.validations.js new file mode 100644 index 0000000..49befa2 --- /dev/null +++ b/modules/push/push.validations.js @@ -0,0 +1,9 @@ +const Joi = require('joi'); + +const pushInputType = Joi.object().keys({ + token: Joi.string().required(), +}); + +module.exports = { + pushInputType, +}; diff --git a/modules/auth/user_device.model.js b/modules/push/user_device.model.js similarity index 73% rename from modules/auth/user_device.model.js rename to modules/push/user_device.model.js index 4f9b3df..d0ddbaa 100644 --- a/modules/auth/user_device.model.js +++ b/modules/push/user_device.model.js @@ -5,23 +5,17 @@ module.exports = function (sequelize, DataTypes) { defaultValue: DataTypes.UUIDV4, primaryKey: true, }, - userId: { - type: DataTypes.UUID, - foreignKey: true, - allowNull: false, - }, token: { type: DataTypes.STRING, + allowNull: false, }, valid: { type: DataTypes.BOOLEAN, + allowNull: false, }, invalidated: { type: DataTypes.DATE, }, - platform: { - type: DataTypes.STRING, - }, }, { tableName: 'users_devides', freezeTableName: true, @@ -29,7 +23,7 @@ module.exports = function (sequelize, DataTypes) { }); UserDevice.associate = function (models) { - UserDevice.User = UserDevice.belongsTo(models.User, {foreignKey: 'userId' }); + UserDevice.User = UserDevice.belongsTo(models.User, { foreignKey: 'userId', as: "user" }); }; return UserDevice;