diff --git a/Server/src/routes/api/event_creator.js b/Server/src/routes/api/event_creator.js new file mode 100644 index 0000000..d7c6431 --- /dev/null +++ b/Server/src/routes/api/event_creator.js @@ -0,0 +1,185 @@ +var dbEvents = require('../../database/events'); +var moment = require('moment-timezone'); + + +var config = { + ss:{ + title: "Sunday School", + description: "Sunday School Service", + exists: false + }, + sm: { + title: "Sunday Morning", + description: "Sunday Morning Worship Service", + exists: false + }, + se: { + title: "Sunday Evening", + description: "Sunday Evening Service", + exists: false + }, + we: { + title: "Wednesday Evening", + description: "Wednesday Evening Bible Study and Prayer", + exists: false + }, + reset: function(){ + this.ss.exists = false; + this.sm.exists = false; + this.se.exists = false; + this.we.exists = false; + } +}; + +exports.getEvents = getEvents; + +function getEvents(pageNumber, pageSize, callback){ + dbEvents.getEvents(pageSize,pageNumber,function(err,events){ + if (err){ + callback(err,null); + } + if (pageNumber < 2 && events.length < 4){ + addEventsToDB(events,pageNumber,pageSize,callback); + } else { + callback(null,events); + } + }); +} + +function addEventsToDB(currentEvents, pageNumber, pageSize, callback){ + config.reset(); + var now = new Date(); + var offset = moment.tz.zone("America/Denver").offset(new Date()); + + config.ss.startTime = nextDay(now, 0, 10, 0, 0); + config.ss.endTime = nextDay(now, 0, 11, 0, 0); + config.sm.startTime = nextDay(now, 0, 11, 0, 0); + config.sm.endTime = nextDay(now, 0, 12, 30, 0); + config.se.startTime = nextDay(now, 0, 19, 0, 0); + config.se.endTime = nextDay(now, 0, 20, 30, 0); + + config.we.startTime = nextDay(now, 3, 19, 0, 0); + config.we.endTime = nextDay(now, 3, 20, 30, 0); + + for(var i = 0; i < currentEvents.length; i++){ + if (currentEvents[i].title === config.ss.title){ + config.ss.exists = true; + } else if (currentEvents[i].title === config.sm.title){ + config.sm.exists = true; + } else if (currentEvents[i].title === config.se.title){ + config.se.exists = true; + } else if (currentEvents[i].title === config.we.title){ + config.we.exists = true; + } + } + + waitForAll(function(cb){ + if (config.ss.exists == false){ + config.ss.exists = false; + dbEvents.insertEvent(config.ss.title,config.ss.startTime,config.ss.endTime,offset,config.ss.description,function(error, event){ + if (error){ + cb("Error getting events"); + } else { + cb(); + } + }); + } else { + cb(); + } + },function(cb){ + if (config.sm.exists == false){ + dbEvents.insertEvent(config.sm.title,config.sm.startTime,config.sm.endTime,offset,config.sm.description,function(error,event){ + if (error){ + cb("Error getting events"); + } else { + cb(); + } + }); + } else { + cb(); + } + },function(cb){ + if (config.se.exists == false){ + dbEvents.insertEvent(config.se.title,config.se.startTime,config.se.endTime,offset,config.se.description,function(error,event){ + if (error){ + cb("Error getting events"); + } else { + cb(); + } + }); + } else { + cb(); + } + },function(cb){ + if (config.we.exists == false){ + dbEvents.insertEvent(config.we.title,config.we.startTime,config.we.endTime,offset,config.we.description,function(error,event){ + if (error){ + cb("Error getting events"); + } else { + cb(); + } + }); + } else { + cb(); + } + }).done(function(){ + getEvents(pageNumber, pageSize, callback); + }).fail(function(err){ + callback(err); + }); +} + +function nextDay(startDate, dayOfWeek, hour, minutes, offset){ + startDate = new Date(startDate); + startDate.setDate(startDate.getDate() + (dayOfWeek+(7-startDate.getDay())) % 7); + startDate.setHours(hour); + startDate.setMinutes(minutes); + startDate.setSeconds(0); + startDate.setMilliseconds(0); + startDate.setTime(startDate.getTime() + (offset * 60000)); + return startDate; +} + +function waitForAll(){ + var doneCallback; + var failCallback; + var callbackCount = 0; + var error; + var argLength = arguments.length; + for(var i = 0; i < argLength; i++){ + if (typeof arguments[i] === 'function'){ + arguments[i](singleCallback) + } + } + function singleCallback(err){ + error = err; + callbackCount += 1; + checkDone(); + } + function checkDone(){ + if (callbackCount == argLength && typeof error === 'undefined'){ + if (typeof doneCallback === 'function'){ + doneCallback(); + } + } else if (typeof error !== 'undefined'){ + if (typeof failCallback === 'function'){ + failCallback(error); + } + } + } + function doneCB(cb){ + doneCallback = cb; + checkDone(); + return returnObj; + } + function failCB(cb){ + failCallback = cb; + checkDone(); + return returnObj; + } + var returnObj = { + done: doneCB, + fail: failCB + } + return returnObj; +} \ No newline at end of file diff --git a/Server/src/routes/api/events.js b/Server/src/routes/api/events.js index b653998..d189a4b 100644 --- a/Server/src/routes/api/events.js +++ b/Server/src/routes/api/events.js @@ -1,6 +1,7 @@ var express = require('express'); var router = express.Router(); var dbEvents = require('../../database/events'); +var eventCreator = require('./event_creator'); var moment = require('moment-timezone'); @@ -19,60 +20,18 @@ router.get("/:id",function(req,res){ }); router.get("/page/:page",function(req,res){ - console.log("page"); var pageSize = 5; if (req.query.pageSize){ pageSize = parseInt(req.query.pageSize); } - dbEvents.getEvents(pageSize,req.params.page,function(err,events){ + eventCreator.getEvents(req.params.page,pageSize,function(err,events){ if (err){ res.status(500).json({"status":500,"message":"Error processing request","error":err}); return; } - if (req.params.page < 2 && events.length < 23){ - var now = new Date(); - var offset = moment.tz.zone("America/Denver").offset(new Date()); - var sundaySchool = nextDay(now, 0, 10, 0, offset); - var sundayMorning = nextDay(now, 0, 11, 0, offset); - var sundayMorningEnd = nextDay(now, 0, 12, 30, offset); - var sundayEvening = nextDay(now, 0, 19, 0, offset); - var sundayEveningEnd = nextDay(now, 0, 20, 30, offset); - - var wednesday = nextDay(now, 3, 19, 0, offset); - var wednesdayEnd = nextDay(now, 3, 20, 30, offset); - if (wednesday < sundaySchool || 1 == 1){ - events.push({ - title: 'Wednesday Evening', - startDate: wednesdayEnd, - endDate: wednesdayEnd, - description: 'Bible study and prayer for Wednesday evening.' - }); - } - events.push({ - title: 'Sunday School ' + offset, - startDate: sundaySchool, - endDate: sundayMorning, - description: 'Sunday School Service' - }); - events.push({ - title: 'Sunday Morning Worship', - startDate: sundayMorningEnd, - endDate: sundayMorningEnd, - description: 'Sunday Morning Worship Service' - }); - events.push({ - title: 'Sunday Evening', - startDate: sundayEveningEnd, - endDate: sundayEveningEnd, - description: 'Sunday Evening Service' - }); - // id: json.id, - // title: json.title, - // startDate: new Date(json.startDate), - // endDate: new Date(json.endDate), - // description: json.description + else { + res.status(200).json({"status":200,"events":events,"page":req.params.page,"pageSize":pageSize > events.length ? events.length : pageSize}); } - res.status(200).json({"status":200,"events":events,"page":req.params.page,"pageSize":pageSize > events.length ? events.length : pageSize}); }); }); @@ -114,15 +73,5 @@ router.delete("/a/",function(req,res){ }); }); -function nextDay(startDate, dayOfWeek, hour, minutes, offset){ - startDate = new Date(startDate); - startDate.setDate(startDate.getDate() + (dayOfWeek+(7-startDate.getDay())) % 7); - startDate.setHours(hour); - startDate.setMinutes(minutes); - startDate.setSeconds(0); - startDate.setMilliseconds(0); - startDate.setTime(startDate.getTime() + (offset * 60000)); - return startDate; -} module.exports = router; \ No newline at end of file