/* global Venue */ 'use strict'; const _ = require('lodash'); const moment = require('moment'); const { generateService, parseParamsToFindOptions } = require('../../helpers/service.helper'); const Sequelize = require('sequelize'); const models = require('../../core/models'); const extraMethods = { fetch: 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, }); findOptions.include.push({ model: models.EventType, }); findOptions.include.push({ model: models.Venue, }); findOptions.where = Object.assign({}, findOptions.where, { state: 'publish' }); try { return await models.Event.findAll(findOptions); } catch(error) { throw error; } } }; module.exports = generateService(models.Event, extraMethods);