137 lines
3.7 KiB
JavaScript
137 lines
3.7 KiB
JavaScript
'use strict';
|
|
const cdnHelper = require('./cdn.helper');
|
|
|
|
const valuesComposer = (values) => (values) ? values.map(value => ({id: value.id, name: value.name,})): values;
|
|
|
|
|
|
const commentsComposer = (comments) => {
|
|
if (comments) {
|
|
return comments.map(comment => ({
|
|
...comment,
|
|
userId: undefined,
|
|
user: {
|
|
...comment.user,
|
|
profile_picture: cdnHelper.getCDNMediaUrl(comment.user.profile_picture)
|
|
}
|
|
}));
|
|
}
|
|
else return comments;
|
|
};
|
|
|
|
|
|
const multimediaComposer = (multimedias) => {
|
|
if(multimedias) {
|
|
return 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,
|
|
}));
|
|
}
|
|
else
|
|
return multimedias;
|
|
};
|
|
|
|
|
|
const socialNetworksComposer = (speaker) => {
|
|
if (speaker) {
|
|
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
|
|
};
|
|
}
|
|
else
|
|
return speaker;
|
|
};
|
|
|
|
|
|
const speakerComposer = (speaker, context) => {
|
|
|
|
let multimedias = [];
|
|
if ((context.scopes) && (context.scopes.includes('includeMultimedias'))) {
|
|
multimedias = multimediaComposer(speaker.multimedias);
|
|
};
|
|
|
|
let comments = [];
|
|
if ((context.scopes) && (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 eventComposer = (event, context) => {
|
|
|
|
if ((context.scopes) && (context.scopes.includes('includeVenue'))){
|
|
delete event.venue.updatedAt;
|
|
delete event.venue.createdAt;
|
|
event.venue.image_url = cdnHelper.getCDNCityMediaUrl(event.venue.city);
|
|
};
|
|
|
|
let multimedias = []
|
|
if ((context.scopes) && (context.scopes.includes('includeMultimedias'))) {
|
|
multimedias = multimediaComposer(event.multimedias)
|
|
};
|
|
|
|
let speakers = []
|
|
if ((context.scopes) && (context.scopes.includes('includeSpeakers'))) {
|
|
speakers = event.details.map((detail) => ({
|
|
order: detail.order,
|
|
...speakerComposer(detail.speaker, context),
|
|
}))
|
|
};
|
|
|
|
return Object.assign({},
|
|
event,
|
|
{ multimedias: multimedias },
|
|
{ details: undefined },
|
|
{ speakers: speakers }
|
|
)
|
|
};
|
|
|
|
const entityComposer = (entity, context) => {
|
|
|
|
delete entity.contact_person;
|
|
delete entity.contact_email;
|
|
|
|
return Object.assign({},
|
|
entity,
|
|
)
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
entityComposer,
|
|
speakerComposer,
|
|
eventComposer
|
|
} |