This commit is contained in:
David Arranz 2019-07-18 20:13:07 +02:00
parent c7f6b3d948
commit 6203caf9a0
5 changed files with 58 additions and 109 deletions

View File

@ -13,7 +13,7 @@ const defaultOptions = {
MODULE_NAME: 'default', MODULE_NAME: 'default',
params: { params: {
find: { includeAll: false }, find: { includeAll: false },
findOne: { includeAll: true, paginate: { limit: 1, page: 1 } }, findOne: { includeAll: false, paginate: { limit: 1, page: 1 } },
count: {}, count: {},
} }
} }
@ -44,7 +44,8 @@ const generateControllers = (service, extraControllers = {}, options = {}) => {
findOne: (config) => { findOne: (config) => {
return async (req, res, next) => { return async (req, res, next) => {
const params = extractParamsFromRequest(req, res, _options.params.findOne); const params = extractParamsFromRequest(req, res, _options.params.findOne);
console.log('------------------------------------PARAMS');
console.log(params);
try { try {
const result = await service.fetchOne(params, buildContext(req, config)); const result = await service.fetchOne(params, buildContext(req, config));
return handleResultResponse(result, null, params, res, (result === null) ? httpStatus.NOT_FOUND : httpStatus.OK); return handleResultResponse(result, null, params, res, (result === null) ? httpStatus.NOT_FOUND : httpStatus.OK);

View File

@ -162,12 +162,9 @@ const generateService = (model, extraMethods = {}, options = defaultOptions) =>
}, },
fetchOne: async (params, context) => { fetchOne: async (params, context) => {
const findOptions = parseParamsToFindOptions(params);
const result = await model.scope(context.scopes).findOne({ const findOptions = parseParamsToFindOptions(params);
where: findOptions.where, const result = await model.scope(context.scopes).findOne(findOptions);
include: findOptions.include
});
if (extraMethods.afterFetchOne) { if (extraMethods.afterFetchOne) {
return extraMethods.afterFetchOne(result, params, context); return extraMethods.afterFetchOne(result, params, context);

View File

@ -76,8 +76,8 @@ const extraControllers = {
return handleResultResponse(result, result.count, params, res); return handleResultResponse(result, result.count, params, res);
}, },
/*
findOne: async (req, res, next) => { findOne2: async (req, res, next) => {
const params = extractParamsFromRequest(req, res, { includeAll: false }); const params = extractParamsFromRequest(req, res, { includeAll: false });
try { try {
@ -87,7 +87,7 @@ const extraControllers = {
handleErrorResponse(MODULE_NAME, 'findOne', error, res) handleErrorResponse(MODULE_NAME, 'findOne', error, res)
} }
}, },
*/
}; };

View File

@ -25,7 +25,7 @@ routes.get('/events',
PaginateMiddleware.middleware(), PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }), SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({ eventController.find({
scopes: ['defaultScope', 'includeVenue'], scopes: ['defaultScope', 'includeVenue', 'includeMultimedias'],
}), }),
); );
@ -61,7 +61,7 @@ routes.get('/events/current',
PaginateMiddleware.middleware(), PaginateMiddleware.middleware(),
SortMiddleware.middleware({ default: "-init_date" }), SortMiddleware.middleware({ default: "-init_date" }),
eventController.find({ eventController.find({
scopes: ['defaultScope', 'current', 'includeVenue', 'includeSpeakers'], scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeSpeakers'],
}), }),
); );
@ -71,15 +71,9 @@ routes.get('/events/:id',
FieldMiddleware.middleware({ FieldMiddleware.middleware({
invalidFields: generalInvalidFields invalidFields: generalInvalidFields
}), }),
eventController.findOne eventController.findOne({
scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeSpeakers'],
}),
// eventController.find({
// scopes: ['defaultScope', 'next', 'includeVenue', 'includeSpeakers'],
// }),
); );
// Comentarios // Comentarios

View File

@ -7,7 +7,8 @@ const { generateService, parseParamsToFindOptions } = require('../../helpers/ser
const Sequelize = require('sequelize'); const Sequelize = require('sequelize');
const models = require('../../core/models'); const models = require('../../core/models');
const XXX = (multimedias) => multimedias.map(multimedia => ({
const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({
...multimedia, ...multimedia,
...multimedia.MultimediaFile, ...multimedia.MultimediaFile,
type: multimedia.type, type: multimedia.type,
@ -18,6 +19,43 @@ const XXX = (multimedias) => multimedias.map(multimedia => ({
userId: undefined, userId: undefined,
})); }));
const speakerComposer = (speaker, context) => {
delete speaker.createdAt;
delete speaker.updatedAt;
return {...speaker,
multimedias: multimediaComposer(speaker.multimedias),
}
}
const eventComposer = (event, context) => {
if (context.scopes.includes('includeVenue')) {
delete event.venue.updatedAt;
delete event.venue.createdAt;
};
let multimedias = []
if (context.scopes.includes('includeMultimedias')) {
multimedias = multimediaComposer(event.multimedias)
};
let speakers = []
if (context.scopes.includes('includeSpeakers')) {
speakers = event.details.map((detail) => ({
order: detail.order,
... speakerComposer(detail.speaker),
}))
};
return Object.assign({},
event,
{ multimedias: multimedias },
{ details: undefined },
{ speakers: speakers }
)
};
const extraMethods = { const extraMethods = {
afterFetchAll: (result, params, context) => { afterFetchAll: (result, params, context) => {
@ -26,20 +64,7 @@ const extraMethods = {
} }
let rows = result.rows.map(row => row.toJSON()); let rows = result.rows.map(row => row.toJSON());
rows = rows.map(event => eventComposer(event, context));
if (context.scopes.includes('includeSpeakers')) {
rows = rows.map(event => Object.assign({},
event,
{ multimedias: XXX(event.multimedias) },
{ details: undefined },
{ speakers: event.details.map((detail) => ({
...detail.speaker,
order: detail.order,
//...XXX(detail.speaker.multimedias)
multimedias: XXX(detail.speaker.multimedias),
}))}
))
}
return { return {
count: rows.length, count: rows.length,
@ -48,80 +73,11 @@ const extraMethods = {
}, },
fetch2: async (params, context) => { afterFetchOne: (result, params, context) => {
//const lapse = context.lapse; return eventComposer(result.toJSON(), context);
const findOptions = parseParamsToFindOptions(params);
/*switch (lapse) {
case 'next':
findOptions.where = Object.assign({},
findOptions.where, {
date: {
[Sequelize.Op.gte]: moment().add(1, 'days').startOf('day').utc()
}
});
break;
case 'current':
findOptions.where = Object.assign({},
findOptions.where, {
date: {
[Sequelize.Op.gte]: moment().startOf('day').utc(),
[Sequelize.Op.lt]: moment().add(1, 'days').startOf('day').utc(),
}
});
break;
case 'past':
findOptions.where = Object.assign ({},
findOptions.where, {
date: {
[Sequelize.Op.lt]: moment().startOf('day').utc()
}
});
break;
default:
break;
}*/
// Incluir
/* findOptions.include.push({
model: models.EventSchedule,
as: 'schedule',
include: {
model: models.Speaker,
as: 'speaker',
attributes: ['id', 'name', 'description']
}
});
findOptions.include.push({
model: models.EventType,
as: 'type',
attributes: ['name', 'title'],
});
findOptions.include.push({
model: models.Venue,
as: 'venue'
});
// findOptions.include.push({
// model: models.Multimedia, //where: { alias: type }, attributes: [],
// });
findOptions.where = Object.assign({},
findOptions.where, {
state: 'publish'
});
console.log(context);
try {
return await models.Event.scope(context.scopes).findAll(findOptions);
} catch(error) {
throw error;
}
*/
}, },
/*
fetchOne: async (params, context) => { fetchOne: async (params, context) => {
const findOptions = parseParamsToFindOptions(params); const findOptions = parseParamsToFindOptions(params);
@ -161,6 +117,7 @@ const extraMethods = {
include: findOptions.include include: findOptions.include
}); });
}, },
*/
}; };
module.exports = generateService(models.Event, extraMethods); module.exports = generateService(models.Event, extraMethods);