diff --git a/core/controllers/index.js b/core/controllers/index.js index ef50997..acd0f63 100644 --- a/core/controllers/index.js +++ b/core/controllers/index.js @@ -74,11 +74,13 @@ const generateControllers = (service, extraControllers = {}, options = {}) => { create: (config) => { return async (req, res, next) => { + const params = extractParamsFromRequest(req, res, _options.params.count); try { //Asignamos el usuario que crea el elemento req.body.userId = req.user.id; - console.log('SERVICE CREATE ->', req.body); - const result = await service.create(req.body, buildContext(req, config)); + const values = Object.assign({}, params.params, req.body); + console.log('SERVICE CREATE ->', values); + const result = await service.create(values, buildContext(req, config)); return handleResultResponse(result, null, null, res, httpStatus.CREATED) } catch (error) { return handleErrorResponse(_options.MODULE_NAME, 'create', error, res) diff --git a/modules/auth/user.model.js b/modules/auth/user.model.js index 7ccfc14..efd0a3c 100644 --- a/modules/auth/user.model.js +++ b/modules/auth/user.model.js @@ -76,7 +76,9 @@ module.exports = function (sequelize, DataTypes) { User.Devices = User.hasMany(models.UserDevice, { foreignKey: 'userId' }); User.Comments = User.hasMany(models.Comment, { foreignKey: 'userId' }); User.EventsReservations = User.hasMany(models.EventReservation, { foreignKey: 'userId' }); - User.EventsInscriptions = User.hasMany(models.EventInscription, { foreignKey: 'userId' }); + User.EventsInscriptions = User.hasMany(models.EventInscription, { foreignKey: 'userId' }); + User.Questions = User.hasMany(models.EventQuestion, { foreignKey: 'userId', as: "questions", required: false, }); + // User.InscriptionsValidate = User.hasMany(models.EventIncription, { foreignkey: 'validateUserId'}) //User.Reactions = User.hasMany(models.UserReaction, { foreignKey: 'UserId' }); }; diff --git a/modules/events/event.model.js b/modules/events/event.model.js index a26767d..6b9fe8e 100644 --- a/modules/events/event.model.js +++ b/modules/events/event.model.js @@ -35,7 +35,6 @@ const getStateCode = (event) => { }; - const getStateText = (event) => { var currentDate = moment().utc(), initDate = moment.utc(event.ini_date), diff --git a/modules/events/event.routes.js b/modules/events/event.routes.js index 68402fc..9f53fff 100644 --- a/modules/events/event.routes.js +++ b/modules/events/event.routes.js @@ -8,12 +8,11 @@ const PaginateMiddleware = require('../../middlewares/paginate'); const FieldMiddleware = require('../../middlewares/fields'); const SortMiddleware = require('../../middlewares/sort'); -//const entityValidation = require('./entity.validations'); const eventController = require('./event.controller'); const eventInscriptionController = require('./events_inscriptions.controller'); const eventReservationController = require('./events_reservations.controller'); +const eventQuestionController = require('./events_questions.controller'); const eventValidation = require('./event.validations'); -//const moment = require('moment'); const generalInvalidFields = [ 'userId', 'createdAt', 'updatedAt', @@ -22,8 +21,6 @@ const generalInvalidFields = [ 'multiple_limit', 'marketing_list', ]; -//moment.locale('es'); - routes.get('/events', isLoggedUser, FieldMiddleware.middleware({ @@ -212,6 +209,13 @@ routes.post('/events/:id/inscriptions', eventController.createInscription ); +// Hacer una pregunta +routes.post('/events/:eventId/questions', + isLoggedUser, + SchemaValidator(eventValidation.EventQuestionInputType, true), + eventQuestionController.create() +); + // Borrar una inscripción routes.delete('/inscriptions/:id', isLoggedUser, diff --git a/modules/events/event.validations.js b/modules/events/event.validations.js index a4d2a6b..78f53f1 100644 --- a/modules/events/event.validations.js +++ b/modules/events/event.validations.js @@ -24,16 +24,15 @@ const ReservationInputType = Joi.object().keys({ end_available_date: Joi.date().optional(), }); - -/* -const EventsListOutputType = Joi.object().keys({ - id: Joi.string().required(), - name: Joi.string().required(), - description: Joi.string().required(), +const EventQuestionInputType = Joi.object().keys({ + //eventId: Joi.string().required(), + speakerId: Joi.string().required(), + answer: Joi.string().required(), }); -*/ module.exports = { webInscriptionInputType, - InscriptionInputType + InscriptionInputType, + ReservationInputType, + EventQuestionInputType }; diff --git a/modules/events/events_questions.controller.js b/modules/events/events_questions.controller.js new file mode 100644 index 0000000..9dff323 --- /dev/null +++ b/modules/events/events_questions.controller.js @@ -0,0 +1,14 @@ +'use strict'; + +const generateControllers = require('../../core/controllers'); +const eventQuestionService = require('./events_questions.service'); + + +// Module Name +const MODULE_NAME = '[eventQuestion.controller]'; + +const controllerOptions = { MODULE_NAME }; +const extraControllers = {}; + +module.exports = generateControllers(eventQuestionService, extraControllers, controllerOptions); + diff --git a/modules/events/events_questions.model.js b/modules/events/events_questions.model.js new file mode 100644 index 0000000..c59c97d --- /dev/null +++ b/modules/events/events_questions.model.js @@ -0,0 +1,45 @@ +'use strict'; +const moment = require('moment'); +const Sequelize = require('sequelize'); +moment.locale('es'); + +module.exports = function (sequelize, DataTypes) { + const EventQuestion = sequelize.define('EventQuestion', { + id: { + type: DataTypes.UUID, + defaultValue: DataTypes.UUIDV4, + primaryKey: true, + }, + description: { + type: DataTypes.STRING, + }, + anonimous: { + type: DataTypes.BOOLEAN, + defaultValue: false, + }, + answered: { + type: DataTypes.BOOLEAN, + defaultValue: false, + }, + discared: { + type: DataTypes.BOOLEAN, + defaultValue: false, + }, + answer: { + type: DataTypes.TEXT, + allowNull: true + }, + }, { + tableName: 'events_questions', + freezeTableName: true, + timestamps: true, + }); + + EventQuestion.associate = function (models) { + EventQuestion.Event = EventQuestion.belongsTo(models.Event, { foreignKey: 'eventId' }); + EventQuestion.Speaker = EventQuestion.belongsTo(models.Speaker, { foreignKey: 'speakerId' }); + EventQuestion.UserCreate = EventQuestion.belongsTo(models.User, { foreignKey: 'userId' }); + }; + + return EventQuestion; +}; \ No newline at end of file diff --git a/modules/events/events_questions.service.js b/modules/events/events_questions.service.js new file mode 100644 index 0000000..81bdd2d --- /dev/null +++ b/modules/events/events_questions.service.js @@ -0,0 +1,10 @@ +'use strict'; + +const _ = require('lodash'); +const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); +const models = require('../../core/models'); + +const extraMethods = { +}; + +module.exports = generateService(models.EventQuestion, extraMethods); \ No newline at end of file diff --git a/modules/events/events_reservations.model.js b/modules/events/events_reservations.model.js index 9a344b9..18e8088 100644 --- a/modules/events/events_reservations.model.js +++ b/modules/events/events_reservations.model.js @@ -38,7 +38,7 @@ module.exports = function (sequelize, DataTypes) { state: { type: DataTypes.STRING, allowNull: false, - defaultValue: 'borrador' + defaultValue: 'draft' }, assistants: { type: DataTypes.INTEGER, diff --git a/modules/speakers/speaker.model.js b/modules/speakers/speaker.model.js index 5a4d5ec..af0694b 100644 --- a/modules/speakers/speaker.model.js +++ b/modules/speakers/speaker.model.js @@ -41,7 +41,7 @@ module.exports = function (sequelize, DataTypes) { state: { type: DataTypes.STRING, allowNull: false, - defaultValue: 'borrador' + defaultValue: 'draft' }, typeId: { type: DataTypes.UUID, @@ -82,7 +82,7 @@ module.exports = function (sequelize, DataTypes) { }); Speaker.EventDetails = Speaker.hasMany(models.EventDetail, { foreignKey: 'speakerId', as: "eventdetails" }); - Speaker.Questions = Speaker.hasMany(models.EventQuestion, { foreignKey: 'speakerId', as: "questions" }); + Speaker.Questions = Speaker.hasMany(models.EventQuestion, { foreignKey: 'speakerId', as: "questions", required: false, }); //OJO antes de force comentar // OJO GENERA UN FOREIGN KEY Con eventos y habrá ID de otras entidades que no exitan en la tabla eventos, porque son post o speakers diff --git a/script-carga-bd-completa.sql b/script-carga-bd-completa.sql index f55283e..f69703a 100644 --- a/script-carga-bd-completa.sql +++ b/script-carga-bd-completa.sql @@ -369,7 +369,7 @@ CREATE TABLE `events_reservations` ( `init_available_date` datetime DEFAULT NULL, `end_available_date` datetime DEFAULT NULL, `gmt` int(11) DEFAULT '1', - `state` varchar(255) NOT NULL DEFAULT 'borrador', + `state` varchar(255) NOT NULL DEFAULT 'draft', `assistants` int(11) DEFAULT NULL, `confirmed` int(11) DEFAULT NULL, `sold_out` tinyint(1) DEFAULT '0', @@ -602,7 +602,7 @@ CREATE TABLE `speakers` ( `linkedin` varchar(255) DEFAULT NULL, `instagram` varchar(255) DEFAULT NULL, `web` varchar(255) DEFAULT NULL, - `state` varchar(255) NOT NULL DEFAULT 'borrador', + `state` varchar(255) NOT NULL DEFAULT 'draft', `typeId` char(36) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `createdAt` datetime NOT NULL, `updatedAt` datetime NOT NULL,