Procházet zdrojové kódy

Add route for cancelling events

Matt Coles před 9 roky
rodič
revize
bb043cca99
4 změnil soubory, kde provedl 119 přidání a 9 odebrání
  1. 17 0
      README.md
  2. 77 9
      presenters/event-controller.js
  3. 23 0
      routes/events/cancel-event.js
  4. 2 0
      utils/route-manager.js

+ 17 - 0
README.md

@@ -592,6 +592,23 @@ The response will then look like this:
592 592
 The error codes are as follows, `1` indicates an invalid auth code, `2`
593 593
 indicates the event could not be found and `3` indicates a malformed request.
594 594
 
595
+### /events/cancel/:eventid
596
+To cancel an event, a `POST` request should be sent with the following data:
597
+```javascript
598
+{
599
+    "auth": "$2a$10$qjkvbcPZ4YC7/a/I0ZpTaeJp6auXjGrG9pgAdI3PP61u4CftQPSL2"
600
+}
601
+```
602
+The response will then look like this:
603
+```javascript
604
+{
605
+    "success": 1,
606
+    "error": 0
607
+}
608
+```
609
+The error codes are as follows, `1` indicates an invalid auth code, `2`
610
+indicates the event could not be found and `3` indicates a malformed request.
611
+
595 612
 ### /friends/add/
596 613
 To add a new friend, a `POST` request should be sent with the following data:
597 614
 ```javascript

+ 77 - 9
presenters/event-controller.js

@@ -46,21 +46,80 @@ module.exports = {
46 46
           } else {
47 47
             complete({
48 48
               "success": 0,
49
-              "error": 2
49
+              "error": 1
50 50
             })
51 51
           }
52 52
         });
53 53
       } else {
54 54
         complete({
55 55
           "success": 0,
56
-          "error": 1
56
+          "error": 2
57 57
         });
58 58
       }
59 59
     });
60 60
   },
61 61
 
62 62
   cancel_event: function (event_id, auth, complete, force) {
63
-
63
+    var self = this;
64
+    self.get_event(event_id, auth, function (response) {
65
+      if (response) {
66
+        var event = response.event;
67
+        permissions_controller.user_can_manage_soc_events(auth, event.society, function (manageable) {
68
+          if (manageable || force) {
69
+            society_controller.get_society(event.society, function (soc_resp) {
70
+              var users = soc_resp.society.users;
71
+              var soc_events = soc_resp.society.events;
72
+              var completed_count = 1;
73
+              if (soc_events.indexOf(event_id) > -1) {
74
+                console.log(soc_events.indexOf(event_id));
75
+                soc_events.splice(soc_events.indexOf(event_id), 1);
76
+                redis.hset("society:" + soc_resp.society.name.toLowerCase(), "events", JSON.stringify(soc_events));
77
+              }
78
+              redis.del("event:" + event_id);
79
+              users.map(function (user) {
80
+                user_controller.get_raw_user(user, function (userdata) {
81
+                  var pending_events = JSON.parse(userdata.pending_events);
82
+                  var accepted_events = JSON.parse(userdata.accepted_events);
83
+                  var declined_events = JSON.parse(userdata.declined_events);
84
+                  var pending_idx = pending_events.indexOf(event_id);
85
+                  var accepted_idx = accepted_events.indexOf(event_id);
86
+                  var declined_idx = declined_events.indexOf(event_id);
87
+                  if (pending_idx > -1) {
88
+                    pending_events.splice(pending_idx, 1);
89
+                    redis.hset("user:" + user, "pending_events", JSON.stringify(pending_events));
90
+                  }
91
+                  if (accepted_idx > -1) {
92
+                    accepted_events.splice(accepted_idx, 1);
93
+                    redis.hset("user:" + user, "accepted_events", JSON.stringify(accepted_events));
94
+                  }
95
+                  if (declined_idx > -1) {
96
+                    declined_events.splice(declined_idx, 1);
97
+                    redis.hset("user:" + user, "declined_events", JSON.stringify(declined_events));
98
+                  }
99
+                  completed_count++;
100
+                  if (completed_count === users.length) {
101
+                    complete({
102
+                      "success": 1,
103
+                      "error": 0
104
+                    });
105
+                  }
106
+                });
107
+              });
108
+            });
109
+          } else {
110
+            complete({
111
+              "success": 0,
112
+              "error": 2
113
+            });
114
+          }
115
+        });
116
+      } else {
117
+        complete({
118
+          "success": 0,
119
+          "error": 1
120
+        });
121
+      }
122
+    }, force);
64 123
   },
65 124
 
66 125
   invite_all: function (soc_name, event_id) {
@@ -75,16 +134,25 @@ module.exports = {
75 134
 
76 135
   get_event: function (event_id, auth, complete, preauth) {
77 136
     redis.hgetall("event:" + event_id, function (err, event) {
78
-      event.attendees = JSON.parse(event.attendees);
79 137
       if (preauth) {
80
-        complete({
81
-          "event": event,
82
-          "error": 0
83
-        });
84
-        return;
138
+        if (event) {
139
+          event.attendees = JSON.parse(event.attendees);
140
+          complete({
141
+            "event": event,
142
+            "error": 0
143
+          });
144
+          return;
145
+        } else {
146
+          complete({
147
+            "event": {},
148
+            "error": 1
149
+          });
150
+          return;
151
+        }
85 152
       }
86 153
       permissions_controller.user_is_in_society(auth, event.society, function (canview) {
87 154
         if (canview) {
155
+          event.attendees = JSON.parse(event.attendees);
88 156
           complete({
89 157
             "event": event,
90 158
             "error": 0

+ 23 - 0
routes/events/cancel-event.js

@@ -0,0 +1,23 @@
1
+var event_controller = require("./../../presenters/event-controller.js");
2
+
3
+module.exports = {
4
+  perform: function (a,b) {
5
+    perform(a,b);
6
+  }
7
+}
8
+
9
+var perform = function (req, res) {
10
+  var event_id = req.params.eventid;
11
+  var auth = req.body.auth || req.query.auth;
12
+
13
+  if (event_id && auth) {
14
+    event_controller.cancel_event(event_id, auth, function (response) {
15
+      res.send(response);
16
+    });
17
+  } else {
18
+    res.send({
19
+      "success": 0,
20
+      "error": 3
21
+    });
22
+  }
23
+};

+ 2 - 0
utils/route-manager.js

@@ -17,6 +17,7 @@ var event_accepted = require("../routes/events/view-accepted-events.js");
17 17
 var event_declined = require("../routes/events/view-declined-events.js");
18 18
 var event_accept = require("../routes/events/accept-event.js");
19 19
 var event_decline = require("../routes/events/decline-event.js");
20
+var event_cancel = require("../routes/events/cancel-event.js");
20 21
 var friend_add = require("../routes/friends/add-friend.js");
21 22
 var friend_remove = require("../routes/friends/remove-friend.js");
22 23
 
@@ -42,6 +43,7 @@ router.all('/events/accepted/', event_accepted.perform);
42 43
 router.all('/events/declined/', event_declined.perform);
43 44
 router.all('/events/accept/:eventid', event_accept.perform);
44 45
 router.all('/events/decline/:eventid', event_decline.perform);
46
+router.all('/events/cancel/:eventid', event_cancel.perform);
45 47
 
46 48
 router.all('/friends/add/', friend_add.perform);
47 49
 router.all('/friends/remove/', friend_remove.perform);