diff --git a/config/environments/development.js b/config/environments/development.js index 25988f7..43a99cd 100644 --- a/config/environments/development.js +++ b/config/environments/development.js @@ -17,6 +17,10 @@ module.exports = { port: process.env.PORT || 18888 }, + cdn: { + hostname: "https://cdnapp2.loquedeverdadimporta.org", + }, + paginate: { limit: 10, maxLimit: 50 diff --git a/config/environments/production.js b/config/environments/production.js index 43d7f12..3910fb2 100644 --- a/config/environments/production.js +++ b/config/environments/production.js @@ -15,13 +15,22 @@ module.exports = { */ }, - session: { - secret_token: process.env.SECRET_TOKEN || "B57J=7B`NQ$y98|~5;hc715bo09^5oz8NR+]n9r~215B91Nd9P%25_N6r!GHcOKp|18y5-73Dr5^@9k7n]5l<-41D1o", - token_expires_in: '365d' - }, + session: { + secret_token: process.env.SECRET_TOKEN || "B57J=7B`NQ$y98|~5;hc715bo09^5oz8NR+]n9r~215B91Nd9P%25_N6r!GHcOKp|18y5-73Dr5^@9k7n]5l<-41D1o", + token_expires_in: '365d' + }, - server: { - hostname: process.env.HOSTNAME || '127.0.0.1', - port: process.env.PORT || 18888 - } + server: { + hostname: process.env.HOSTNAME || '127.0.0.1', + port: process.env.PORT || 18888 + }, + + cdn: { + hostname: "https://cdnapp2.loquedeverdadimporta.org", + }, + + paginate: { + limit: 10, + maxLimit: 50 + } } diff --git a/helpers/cdn.helper.js b/helpers/cdn.helper.js new file mode 100644 index 0000000..2e24b84 --- /dev/null +++ b/helpers/cdn.helper.js @@ -0,0 +1,31 @@ +const config = require('../config'); + +const assetsUrl = config.cdn.hostname; + +const CDN_PATHS = { + BLOG: "blog/", + CITIES: "cities/", + PROFILE: "profile/", + SPEAKERS: "speakers/", + WALLPAPERS: "wallpapers/" +}; + + +const getCDNMediaUrl = (mediaUri) => { + if (mediaUri) { + const pathParsed = mediaUri.indexOf("media") == 0 ? mediaUri.substr("media/".length, mediaUri.length) : mediaUri; + return encodeURI(encodeURI(`${assetsUrl}/${pathParsed}`)); + } + else { + return encodeURI(dummyMedia); + } +} + +const getCDNCityMediaUrl = (cityName) => encodeURI(`${assetsUrl}/${CDN_PATHS.CITIES}/${cityName}.jpg`); + + + +module.exports = { + getCDNCityMediaUrl, + getCDNMediaUrl +} \ No newline at end of file diff --git a/modules/blog/blog.routes.js b/modules/blog/blog.routes.js index 4a6f8e2..06f2195 100644 --- a/modules/blog/blog.routes.js +++ b/modules/blog/blog.routes.js @@ -16,7 +16,7 @@ routes.get('/posts', isLoggedUser, }), PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "date" }), - blogController.find); + blogController.find()); routes.post('/posts', isAdministratorUser, blogController.create); @@ -26,7 +26,8 @@ routes.get('/posts/:id', isLoggedUser, }), //PaginateMiddleware.middleware(), //SortMiddleware.middleware({ default: "date" }), - blogController.findOne); + blogController.findOne() + ); routes.put('/posts/:id', isAdministratorUser, blogController.update); diff --git a/modules/comments/comment.model.js b/modules/comments/comment.model.js index 73d0e1d..ab92f96 100644 --- a/modules/comments/comment.model.js +++ b/modules/comments/comment.model.js @@ -54,7 +54,7 @@ module.exports = function (sequelize, DataTypes) { Comment.associate = function (models) { - Comment.User = Comment.belongsTo(models.User, { foreignKey: 'userId', constraints: false }); + Comment.User = Comment.belongsTo(models.User, { foreignKey: 'userId', constraints: false, as: 'user' }); //Comment.Conference = Comment.belongsTo(models.Conference, { foreignKey: 'conferenceId', constraints: false }); //Comment.Post = Comment.belongsTo(models.Post, { foreignKey: 'postId', constraints: false }); //Comment.Speaker = Comment.belongsTo(models.Speaker, { foreignKey: 'speakerId', constraints: false }); diff --git a/modules/events/event.service.js b/modules/events/event.service.js index 1c7c05b..fc2655b 100644 --- a/modules/events/event.service.js +++ b/modules/events/event.service.js @@ -6,6 +6,7 @@ const moment = require('moment'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const Sequelize = require('sequelize'); const models = require('../../core/models'); +const cdnHelper = require('../../helpers/cdn.helper'); const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({ @@ -17,6 +18,7 @@ const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({ createdAt: undefined, updatedAt: undefined, userId: undefined, + url: (multimedia.MultimediaFile.provider === 'cdn') ? cdnHelper.getCDNMediaUrl(multimedia.MultimediaFile.url) : multimedia.MultimediaFile.url, })); const speakerComposer = (speaker, context) => { @@ -31,7 +33,8 @@ const eventComposer = (event, context) => { if (context.scopes.includes('includeVenue')) { delete event.venue.updatedAt; - delete event.venue.createdAt; + delete event.venue.createdAt; + event.venue.image_url = cdnHelper.getCDNCityMediaUrl(event.venue.city); }; let multimedias = [] diff --git a/modules/speakers/speaker.model.js b/modules/speakers/speaker.model.js index 3b54b45..b03ecb9 100644 --- a/modules/speakers/speaker.model.js +++ b/modules/speakers/speaker.model.js @@ -141,6 +141,10 @@ module.exports = function (sequelize, DataTypes) { model: sequelize.models.Comment, as: 'comments', required: false, + include: [{ + model: sequelize.models.User, + as: 'user', + }] }] } }); diff --git a/modules/speakers/speaker.service.js b/modules/speakers/speaker.service.js index ab9d28a..aa21006 100644 --- a/modules/speakers/speaker.service.js +++ b/modules/speakers/speaker.service.js @@ -5,6 +5,7 @@ const _ = require('lodash'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const Sequelize = require('sequelize'); const models = require('../../core/models'); +const cdnHelper = require('../../helpers/cdn.helper'); const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({ @@ -16,6 +17,7 @@ const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({ createdAt: undefined, updatedAt: undefined, userId: undefined, + url: (multimedia.MultimediaFile.provider === 'cdn') ? cdnHelper.getCDNMediaUrl(multimedia.MultimediaFile.url) : multimedia.MultimediaFile.url, })); const valuesComposer = (values) => values.map(value => ({ @@ -23,6 +25,16 @@ const valuesComposer = (values) => values.map(value => ({ name: value.name, })); + const commentsComposer = (comments) => comments.map(comment => ({ + ...comment, + userId: undefined, + user: { + ...comment.user, + profile_picture: cdnHelper.getCDNMediaUrl(comment.user.profile_picture) + + } + })) + const socialNetworksComposer = (speaker, context) => { return { @@ -44,9 +56,14 @@ const socialNetworksComposer = (speaker, context) => { }; const speakerComposer = (speaker, context) => { - let multimedias = [] + let multimedias = []; if (context.scopes.includes('includeMultimedias')) { - multimedias = multimediaComposer(speaker.multimedias) + multimedias = multimediaComposer(speaker.multimedias); + }; + + let comments = []; + if (context.scopes.includes('includeComments')) { + comments = commentsComposer(speaker.comments); }; speaker.typename = speaker.type.name; @@ -60,6 +77,7 @@ const speakerComposer = (speaker, context) => { speaker, rrss, { multimedias: multimedias }, + { comments: comments }, ) };