Public API for a society manager application

schedule-controller.js 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. var Redis = require("ioredis");
  2. var redis = new Redis();
  3. var scheduler = require("node-schedule");
  4. var notification_controller = require("./notification-controller.js");
  5. var registered_events = {};
  6. module.exports = {
  7. schedule_event: function (event_id, time) {
  8. var event_time = new Date(Number(time));
  9. console.log("Scheduled event for " + event_time);
  10. var job = scheduler.scheduleJob(event_time, function(evt_id) {
  11. notification_controller.send_notifications_for(evt_id);
  12. }.bind(null, event_id));
  13. registered_events[event_id] = job;
  14. },
  15. register_existing_events: function () {
  16. var self = this;
  17. var stream = redis.scanStream({
  18. match: "event:*"
  19. });
  20. var event_ids = [];
  21. stream.on('data', function (keys) {
  22. keys.map(function (key) {
  23. event_ids.push(key.split(":")[1]);
  24. });
  25. })
  26. stream.on('end', function () {
  27. var event_controller = require("./event-controller.js");
  28. for (var ii = 0; ii < event_ids.length; ii++) {
  29. event_controller.get_event(event_ids[ii], "", function (response) {
  30. var event = response.event;
  31. self.schedule_event(event.id, event.start);
  32. }, true);
  33. }
  34. });
  35. },
  36. cancel_registered: function (event_id) {
  37. var event = registered_events[event_id];
  38. if (event !== undefined) {
  39. event.cancel();
  40. delete registered_events.event_id;
  41. }
  42. }
  43. }