'use strict'; const httpStatus = require('http-status'); const generateControllers = require('../../core/controllers'); const eventService = require('./event.service'); const eventReservationService = require('./events_reservations.service'); const { extractParamsFromRequest, handleErrorResponse, handleResultResponse } = require('../../helpers/controller.helper'); //PRUEBA const SchemaValidator = require('../../middlewares/schemaValidator'); const eventValidation = require('./event.validations'); const Joi = require('joi'); const userService = require('../auth/user.service'); const inscriptionService = require('./events_inscriptions.service'); // Module Name const MODULE_NAME = '[event.controller]'; const controllerOptions = { MODULE_NAME }; const extraControllers = { /* findNext: (config) => { config = config || { scopes: [], } return async function (req, res, next) { const params = extractParamsFromRequest(req, res, { includeAll: false }); try { const result = await eventService.fetch(params, { user: req.user, scopes: config.scopes, lapse: 'next' }); console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'); // Joi validation options const _validationOptions = { abortEarly: false, // abort after the last validation error allowUnknown: true, // allow unknown keys that will be ignored stripUnknown: true // remove unknown keys from the validated data }; console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa222'); const data = Joi.validate(result.dataValues, eventValidation.EventsListOutputType, _validationOptions); console.log('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa333'); console.log(data); return handleResultResponse(result, result.count, params, res); } catch (error) { handleErrorResponse(MODULE_NAME, 'findNext', error, res); } } }, findCurrent: async (req, res, next) => { const params = extractParamsFromRequest(req, res, {}); try { const result = await eventService.fetch(params, { user: req.user, lapse: 'current' }); return handleResultResponse(result, result.count, params, res); } catch (error) { handleErrorResponse(MODULE_NAME, 'findNext', error, res); } }, if (invitationCode) { _getLevelAndPartner()--------------------- .then(_getOrCreateUser)------------- .then(_existsInscription)---------------- .then(_getInscriptionCount)--------- .then(_updateLevel)-------------- .then(_createInscription)-- .then(_addMember) .then(_updateInscription) .then(_getConference) .then(_sendConfirmMail) .then(_handleResponse) .catch(_handleError); } else { _existsInscription()------------- .then(_getInscriptionCount)----------- .then(_getConference)------ .then(_updateConference)---- .then(_createInscription)-- .then(_addMember) .then(_updateInscription) .then(_handleResponse) .catch(_handleError); } */ checkReservationCode: async (req, res, next) => { const params = extractParamsFromRequest(req, res, {}); const eventId = params.params.id; const encodedInvitationCode = params.params.encodedInvitationCode; const registrationCode = encodedInvitationCode; //Buffer.from(req.params.encodedInvitationCode, 'base64').toString('ascii'); try { const result = await eventReservationService._getReservaByCode(eventId, registrationCode); handleResultResponse(!!result, null, params, res, (result === null) ? httpStatus.NOT_FOUND : httpStatus.OK); } catch(error) { handleErrorResponse(MODULE_NAME, 'checkReservationCode', error, res) } }, createInscription: async(req, res, next) => { const params = extractParamsFromRequest(req, res, {}); let context = { eventId : params.params.id, encodedInvitationCode : req.body.encodedInvitationCode, code: null, event : null, reservation : null, inscriptionCount : null, inscription : null, assistants : null, // aforo tickets : null, // nº de inscripciones type : (req.body.code) ? 'reserva' : 'libre', userId: '0939bb2a-d33d-4290-ac81-fc9faa1c015e', user: { phone: '+34686621059', name: 'aaaaaaaaaaaa', surname: 'bbbbbbb', email: 'lqdvi@lqdvi.com', }, } context.code = context.encodedInvitationCode; //Buffer.from(context.encodedInvitationCode, 'base64').toString('ascii'); //Si viene codigo invitacion _getLevelAndPartner()--------------------- if (context.code) { try { context.reservation = await eventReservationService._getReservaByCode(context.eventId, context.code); if (context.reservation) { context.reservation = await context.reservation.toJSON(); context.event = context.reservation.Event; } else { // No se ha encontrado return handleResultResponse("Código de reserva no encontrado", null, params, res, httpStatus.NOT_FOUND); } } catch(error) { return handleErrorResponse(MODULE_NAME, 'createInscription', error, res) } } else { try { context.event = await eventService._getEvent(context.eventId); if (context.event) { context.event = await context.event.toJSON(); } else { // No se ha encontrado return handleResultResponse("Evento no encontrado", null, params, res, httpStatus.NOT_FOUND); } } catch(error) { return handleErrorResponse(MODULE_NAME, 'createInscription', error, res) } } console.log('esta es la reserva y el evento a la que pertenece'); console.log(context.reservation); console.log(context.event); //creamos o recuperamos el usuario .then(_getOrCreateUser)------------- try { context.user = await userService._getOrCreateUser(params, context); context.user = await context.user.toJSON(); console.log('creamos o recuperamos el usuario'); console.log(context.user); } catch(error) { return handleErrorResponse(MODULE_NAME, 'createInscription', error, res); } inscriptionService._existsInscription(params, context) .then(inscriptionService._getInscriptionCount) .then(function () { if (context.code) {return eventReservationService._updateReservation } else { return evenService._updateEvent }}) .then(inscriptionService._createInscription) .catch(_handleError); //_createInscription(user, congressId, invitationCode, source, callback); // const result = await eventService.createIncription(params, { user: req.user, lapse: 'pass' }); // return handleResultResponse(result, result.count, params, res); }, /* findOne2: async (req, res, next) => { const params = extractParamsFromRequest(req, res, { includeAll: false }); try { const result = await eventService.fetchOne(params, { user: req.user }); return handleResultResponse(result, null, params, res, (result === null) ? httpStatus.NOT_FOUND : httpStatus.OK); } catch (error) { handleErrorResponse(MODULE_NAME, 'findOne', error, res) } }, */ }; module.exports = generateControllers(eventService, extraControllers, controllerOptions);