78 lines
3.0 KiB
JavaScript
78 lines
3.0 KiB
JavaScript
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} |