From c2b52afa3f95f77e9f71d0ca0aa0a0c6424bf7bd Mon Sep 17 00:00:00 2001 From: Udo Walter Date: Tue, 16 Apr 2019 02:40:48 +0000 Subject: laterjs tests --- server/app.js | 4 ++++ server/lib/eventhelper.js | 53 +++++++++++++++++++++++++++++++++++++++++++++++ server/package-lock.json | 5 +++++ server/package.json | 1 + 4 files changed, 63 insertions(+) create mode 100644 server/lib/eventhelper.js (limited to 'server') diff --git a/server/app.js b/server/app.js index 23f1584..8c38faa 100644 --- a/server/app.js +++ b/server/app.js @@ -5,6 +5,10 @@ var cookieParser = require('cookie-parser') var compression = require('compression') var fileUpload = require('express-fileupload') +process.env.TZ = 'Europe/Berlin' +const later = require('later') +later.date.localTime() + var app = express() global.__appdir = __dirname diff --git a/server/lib/eventhelper.js b/server/lib/eventhelper.js new file mode 100644 index 0000000..0986b25 --- /dev/null +++ b/server/lib/eventhelper.js @@ -0,0 +1,53 @@ +/* global __appdir */ +var path = require('path') +var db = require(path.join(__appdir, 'lib', 'sequelize')) +const later = require('later') + +function isActive (eventData) { + const startDate = new Date(eventData.startDate * 1000) + const endDate = new Date(eventData.endDate * 1000) + let now = new Date() + if (eventData.repetitive) { + if (startDate < now && now < endDate) return false + return later.schedule(getTimeSpans(eventData)).isValid(now) + } else { + const startTime = eventData.startTime.split(':') + startDate.setHours(startTime[0]) + startDate.setMinutes(startTime[1]) + const endTime = eventData.endTime.split(':') + endDate.setHours(endTime[0]) + endDate.setMinutes(endTime[1]) + return startDate < now && now < endDate + } +} + +function getTimeSpans (eventData) { + const schedule = later.parse.recur() + schedule.after(eventData.startTime).time() + const startTime = eventData.startTime.split(':').map(x => parseInt(x)) + const endTime = eventData.endTime.split(':').map(x => parseInt(x)) + if (startTime[0] > endTime[0] || (startTime[0] === endTime[0] && startTime[1] > endTime[1])) { + _setUpSchedule(eventData, schedule) + schedule.and() + } + schedule.before(eventData.endTime).time() + _setUpSchedule(eventData, schedule) + return schedule +} + +function getStartTimes (eventData) { + const schedule = later.parse.recur() + schedule.on(eventData.startTime).time() + _setUpSchedule(eventData, schedule) + return schedule +} + +function _setUpSchedule (eventData, schedule) { + schedule.on(eventData.monthMap.reduce((arr, v, i) => { if (v) arr.push(i + 1); return arr }, [])).month() + schedule.on(eventData.dayMap.reduce((arr, v, i) => { if (v) arr.push(((i + 1) % 7) + 1); return arr }, [])).dayOfWeek() + schedule.every(parseInt(eventData.interval)) + const type = eventData.intervalType + if (type === 'month') schedule.month() + else if (type === 'week') schedule.weekOfYear() + else schedule.dayOfYear() +} diff --git a/server/package-lock.json b/server/package-lock.json index e6c98bd..d9b6798 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -2467,6 +2467,11 @@ "safe-buffer": "^5.0.1" } }, + "later": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/later/-/later-1.2.0.tgz", + "integrity": "sha1-8s9sTdeVbdL1IK3wMpg26YdrrQ8=" + }, "lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", diff --git a/server/package.json b/server/package.json index d726807..e3484c9 100644 --- a/server/package.json +++ b/server/package.json @@ -18,6 +18,7 @@ "http-errors": "^1.7.2", "infoblox": "^1.1.5", "jsonwebtoken": "^8.5.0", + "later": "^1.2.0", "morgan": "^1.9.1", "mysql": "^2.16.0", "mysql2": "^1.6.5", -- cgit v1.2.3-55-g7522