From e85682ce30f12d4f9948ab9ef56de404196c89b0 Mon Sep 17 00:00:00 2001 From: david Date: Fri, 19 Jul 2019 17:47:06 +0200 Subject: [PATCH] Cambios en speakers --- modules/speakers/speaker.model.js | 27 ++++++++++++ modules/speakers/speaker.routes.js | 32 ++++++++------ modules/speakers/speaker.service.js | 66 ++++++++++++++++++++++++++++- 3 files changed, 111 insertions(+), 14 deletions(-) diff --git a/modules/speakers/speaker.model.js b/modules/speakers/speaker.model.js index fe40a1f..ace36c8 100644 --- a/modules/speakers/speaker.model.js +++ b/modules/speakers/speaker.model.js @@ -85,5 +85,32 @@ module.exports = function (sequelize, DataTypes) { */ }; + Speaker.addScope('featured', { + order: [ + ['updatedAt', 'DESC'] + ] + }); + + Speaker.addScope('last', { + order: [ + ['createdAt', 'DESC'] + ] + }); + + Speaker.addScope('includeMultimedias', () => { + return { + include: [{ + model: sequelize.models.Multimedia, + as: 'multimedias', + required: false, + include: [{ + model: sequelize.models.MultimediaFile, + }] + }, + ] + } + }); + + return Speaker; }; \ No newline at end of file diff --git a/modules/speakers/speaker.routes.js b/modules/speakers/speaker.routes.js index be137f0..de7db4c 100644 --- a/modules/speakers/speaker.routes.js +++ b/modules/speakers/speaker.routes.js @@ -13,34 +13,40 @@ const speakerController = require('./speaker.controller'); // Todos los ponentes routes.get('/speakers', //isLoggedUser, - /*FieldMiddleware.middleware({ - invalidFields: ['user', 'createdAt'] - }),*/ + FieldMiddleware.middleware({ + invalidFields: ['userId', 'createdAt', 'updatedAt'] + }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "name" }), - speakerController.find + speakerController.find({ + scopes: ['defaultScope'], + }) ); // Ponentes destacados routes.get('/speakers/featured', //isLoggedUser, - /*FieldMiddleware.middleware({ - invalidFields: ['user', 'createdAt'] - }),*/ + FieldMiddleware.middleware({ + invalidFields: ['userId', 'createdAt'] + }), PaginateMiddleware.middleware(), - SortMiddleware.middleware({ default: "name" }), - speakerController.find + //SortMiddleware.middleware({ default: "name" }), + speakerController.find({ + scopes: ['defaultScope', 'featured', 'includeMultimedias'], + }) ); // Ponentes más recientes routes.get('/speakers/last', //isLoggedUser, - /*FieldMiddleware.middleware({ - invalidFields: ['user', 'createdAt'] - }),*/ + FieldMiddleware.middleware({ + invalidFields: ['userId'] + }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-createdAt" }), - speakerController.find + speakerController.find({ + scopes: ['defaultScope', 'last', 'includeMultimedias'], + }) ); // Un ponente diff --git a/modules/speakers/speaker.service.js b/modules/speakers/speaker.service.js index 9b52dc8..a22f58a 100644 --- a/modules/speakers/speaker.service.js +++ b/modules/speakers/speaker.service.js @@ -6,7 +6,71 @@ const { generateService, parseParamsToFindOptions } = require('../../helpers/ser const Sequelize = require('sequelize'); const models = require('../../core/models'); -const extraMethods = { +const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({ + ...multimedia, + ...multimedia.MultimediaFile, + type: multimedia.type, + media_type: multimedia.MultimediaFile.type, + MultimediaFile: undefined, + createdAt: undefined, + updatedAt: undefined, + userId: undefined, +})); + +const socialNetworksComposer = (speaker, context) => { + return { + rrss: { + twitter: speaker.twitter ? speaker.twitter : null, + facebook: speaker.facebook ? speaker.facebook : null, + youtube: speaker.youtube ? speaker.youtube : null, + linkedin: speaker.linkedin ? speaker.linkedin : null, + instagram: speaker.instagram ? speaker.instagram : null, + web: speaker.web ? speaker.web : null + }, + twitter: undefined, + facebook: undefined, + youtube: undefined, + linkedin: undefined, + instagram: undefined, + web: undefined + }; }; +const speakerComposer = (speaker, context) => { + let multimedias = [] + if (context.scopes.includes('includeMultimedias')) { + multimedias = multimediaComposer(speaker.multimedias) + }; + + const rrss = socialNetworksComposer(speaker, context); + + return Object.assign({}, + speaker, + rrss, + { multimedias: multimedias }, + ) +}; + +const extraMethods = { + afterFetchAll: (result, params, context) => { + + if (!result.count) { + return result; + } + + let rows = result.rows.map(row => row.toJSON()); + rows = rows.map(speaker => speakerComposer(speaker, context)); + + return { + count: rows.length, + rows: rows + } + }, + + + afterFetchOne: (result, params, context) => { + return speakerComposer(result.toJSON(), context); + }, +} + module.exports = generateService(models.Speaker, extraMethods); \ No newline at end of file