/* global Venue */ 'use strict'; 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 => ({ ...multimedia, ...multimedia.MultimediaFile, type: multimedia.type, media_type: multimedia.MultimediaFile.type, MultimediaFile: undefined, 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 => ({ id: value.id, 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 { 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); }; let comments = []; if (context.scopes.includes('includeComments')) { comments = commentsComposer(speaker.comments); }; speaker.typename = speaker.type.name; delete speaker.type; speaker.values = valuesComposer(speaker.values); const rrss = socialNetworksComposer(speaker, context); return Object.assign({}, speaker, rrss, { multimedias: multimedias }, { comments: comments }, ) }; 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);