Cambios en speakers

This commit is contained in:
David Arranz 2019-07-19 17:47:06 +02:00
parent 49822f6737
commit e85682ce30
3 changed files with 111 additions and 14 deletions

View File

@ -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;
};

View File

@ -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

View File

@ -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);