const express = require("express"); const eventsController = require("../controllers/event"); const router = express.Router(); const tsUtils = require("../lib/utils") const {teamsnapCallback} = require("../lib/utils") const multer = require("multer"); const upload = multer() // Middleware const loadEvent = (req,res,next) => { const {team_id, event_id} = req.params; const bulkLoadTypes = ["event", "availabilitySummary"] req.promises.push( teamsnap.bulkLoad( {teamId: team_id, types: bulkLoadTypes, scopeTo:'event', event__id:event_id}, null, (err, items) => {teamsnapCallback(err, items, {req, source:"loadEvent", method:'bulkLoad'})} ) .then(bulkLoadItems=>{ const items = tsUtils.groupTeamsnapItems(bulkLoadItems, bulkLoadTypes); req.availabilitySummary = items.availabilitySummaries.find(e=>e.eventId==event_id); req.event = items.events.find(e=>e.id==event_id); } )) next(); } // Middleware const loadEvents = async (req,res,next) => { const {team_id, event_id} = req.params req.timeline = {} await Promise.all(req.promises) const {recent_events, upcoming_events} = req const eventIds = [...recent_events.map(e=>e.id), event_id, ...upcoming_events.map(e=>e.id)] // if (!req.event_lineup){ bulkLoadTypes = ['event','eventLineup', 'eventLineupEntry'] req.promises.push( teamsnap.bulkLoad( {teamId: team_id, types: bulkLoadTypes, scopeTo:'event', event__id:eventIds}, null, (err, items) => {teamsnapCallback(err, items, {req, source:"loadEvents", method:'bulkLoad'})} ) .then(items => tsUtils.groupTeamsnapItems(items, bulkLoadTypes)) .then(items => { req.timeline.events = items.events; req.timeline.event_lineups = items.eventLineups; req.timeline.event_lineup_entries = items.eventLineupEntries; }) ) req.promises.push( teamsnap.loadAvailabilities( {eventId: eventIds}, (err, items) => {teamsnapCallback(err, items, {req, source:"loadEvents", method:'loadAvailabilities'})} ).then(availabilities => { req.timeline.availabilities = availabilities } ) ) // } // else { // // const {event_lineup} = req // } const {event_lineup} = req next(); } router.use("/:team_id([0-9]+)/event/:event_id([0-9]+)", loadEvent) // Routes router.get("/:team_id([0-9]+)/schedule", eventsController.getEvents); router.get("/:team_id([0-9]+)/event/:event_id([0-9]+)", eventsController.getEvent); router.post("/:team_id([0-9]+)/event/:event_id([0-9]+)/availability_reminders", upload.none(), eventsController.sendAvailabilityReminders) router.get("/:team_id([0-9]+)/event/:event_id([0-9]+)/modal-confirm-availability-reminders/", eventsController.confirmModalAvailabilityReminders) router.post("/:team_id([0-9]+)/event/:event_id([0-9]+)/reset_availabilities",upload.none(), eventsController.submitResetAvailabilities) module.exports = {router, loadEvent, loadEvents}