diff --git a/core/controllers/index.js b/core/controllers/index.js index dd527e7..f3b7ff1 100644 --- a/core/controllers/index.js +++ b/core/controllers/index.js @@ -13,7 +13,7 @@ const defaultOptions = { MODULE_NAME: 'default', params: { find: { includeAll: false }, - findOne: { includeAll: true, paginate: { limit: 1, page: 1 } }, + findOne: { includeAll: false, paginate: { limit: 1, page: 1 } }, count: {}, } } @@ -44,7 +44,8 @@ const generateControllers = (service, extraControllers = {}, options = {}) => { findOne: (config) => { return async (req, res, next) => { const params = extractParamsFromRequest(req, res, _options.params.findOne); - +console.log('------------------------------------PARAMS'); +console.log(params); try { const result = await service.fetchOne(params, buildContext(req, config)); return handleResultResponse(result, null, params, res, (result === null) ? httpStatus.NOT_FOUND : httpStatus.OK); diff --git a/helpers/service.helper.js b/helpers/service.helper.js index 09b1d45..1a34aad 100644 --- a/helpers/service.helper.js +++ b/helpers/service.helper.js @@ -162,12 +162,9 @@ const generateService = (model, extraMethods = {}, options = defaultOptions) => }, fetchOne: async (params, context) => { + const findOptions = parseParamsToFindOptions(params); - - const result = await model.scope(context.scopes).findOne({ - where: findOptions.where, - include: findOptions.include - }); + const result = await model.scope(context.scopes).findOne(findOptions); if (extraMethods.afterFetchOne) { return extraMethods.afterFetchOne(result, params, context); diff --git a/modules/events/event.controller.js b/modules/events/event.controller.js index 86f403e..b50bcd9 100644 --- a/modules/events/event.controller.js +++ b/modules/events/event.controller.js @@ -76,8 +76,8 @@ const extraControllers = { return handleResultResponse(result, result.count, params, res); }, - - findOne: async (req, res, next) => { +/* + findOne2: async (req, res, next) => { const params = extractParamsFromRequest(req, res, { includeAll: false }); try { @@ -87,7 +87,7 @@ const extraControllers = { handleErrorResponse(MODULE_NAME, 'findOne', error, res) } }, - + */ }; diff --git a/modules/events/event.routes.js b/modules/events/event.routes.js index f4b9499..3e5c6ab 100644 --- a/modules/events/event.routes.js +++ b/modules/events/event.routes.js @@ -25,7 +25,7 @@ routes.get('/events', PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-init_date" }), eventController.find({ - scopes: ['defaultScope', 'includeVenue'], + scopes: ['defaultScope', 'includeVenue', 'includeMultimedias'], }), ); @@ -61,7 +61,7 @@ routes.get('/events/current', PaginateMiddleware.middleware(), SortMiddleware.middleware({ default: "-init_date" }), eventController.find({ - scopes: ['defaultScope', 'current', 'includeVenue', 'includeSpeakers'], + scopes: ['defaultScope', 'current', 'includeVenue', 'includeMultimedias', 'includeSpeakers'], }), ); @@ -71,15 +71,9 @@ routes.get('/events/:id', FieldMiddleware.middleware({ invalidFields: generalInvalidFields }), - eventController.findOne - - - -// eventController.find({ -// scopes: ['defaultScope', 'next', 'includeVenue', 'includeSpeakers'], -// }), - - + eventController.findOne({ + scopes: ['defaultScope', 'includeVenue', 'includeMultimedias', 'includeSpeakers'], + }), ); // Comentarios diff --git a/modules/events/event.service.js b/modules/events/event.service.js index 86b5424..f1c82c7 100644 --- a/modules/events/event.service.js +++ b/modules/events/event.service.js @@ -7,8 +7,9 @@ const { generateService, parseParamsToFindOptions } = require('../../helpers/ser const Sequelize = require('sequelize'); const models = require('../../core/models'); -const XXX = (multimedias) => multimedias.map(multimedia => ({ - ...multimedia, + +const multimediaComposer = (multimedias) => multimedias.map(multimedia => ({ + ...multimedia, ...multimedia.MultimediaFile, type: multimedia.type, media_type: multimedia.MultimediaFile.type, @@ -18,6 +19,43 @@ const XXX = (multimedias) => multimedias.map(multimedia => ({ 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 = { afterFetchAll: (result, params, context) => { @@ -26,20 +64,7 @@ const extraMethods = { } let rows = result.rows.map(row => row.toJSON()); - - 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), - }))} - )) - } + rows = rows.map(event => eventComposer(event, context)); return { count: rows.length, @@ -48,80 +73,11 @@ const extraMethods = { }, - fetch2: async (params, context) => { - //const lapse = context.lapse; - 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; - } -*/ + afterFetchOne: (result, params, context) => { + return eventComposer(result.toJSON(), context); }, +/* fetchOne: async (params, context) => { const findOptions = parseParamsToFindOptions(params); @@ -161,6 +117,7 @@ const extraMethods = { include: findOptions.include }); }, +*/ }; module.exports = generateService(models.Event, extraMethods); \ No newline at end of file