Skip to content

Commit 2a3cd94

Browse files
committed
(CON-328-story): add organizer_email and room_id
- ensure the returned url is comprised with the organizer_email and room_id [Delivers CON-328]
1 parent fcfa7bc commit 2a3cd94

File tree

12 files changed

+203
-47
lines changed

12 files changed

+203
-47
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""add organizer email field
2+
3+
Revision ID: 859f31384fe2
4+
Revises: c058d462a21d
5+
Create Date: 2019-11-18 09:26:07.682060
6+
7+
"""
8+
from alembic import op
9+
import sqlalchemy as sa
10+
11+
12+
# revision identifiers, used by Alembic.
13+
revision = '859f31384fe2'
14+
down_revision = 'c058d462a21d'
15+
branch_labels = None
16+
depends_on = None
17+
18+
19+
def upgrade():
20+
op.add_column('events', sa.Column(
21+
'organizer_email', sa.String(), nullable=True))
22+
23+
24+
def downgrade():
25+
op.drop_column('events', 'organizer_email')

api/events/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class Events(Base, Utility):
2929
meeting_end_time = Column(String, nullable=True)
3030
auto_cancelled = Column(Boolean, nullable=True, default=False)
3131
app_booking = Column(Boolean, nullable=True, default=False)
32+
organizer_email = Column(String, nullable=True)
3233

3334

3435
def filter_events_by_date_range(query, start_date, end_date):

api/events/schema.py

Lines changed: 69 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,18 @@ class Meta:
4343
model = EventsModel
4444

4545

46+
class EventArguments(graphene.ObjectType):
47+
48+
"""
49+
returns common event arguments
50+
"""
51+
52+
calendar_id = graphene.String(required=True)
53+
event_id = graphene.String(required=True)
54+
start_time = graphene.String(required=True)
55+
end_time = graphene.String(required=True)
56+
57+
4658
class BookEvent(graphene.Mutation):
4759
"""
4860
Book Calendar events
@@ -58,6 +70,7 @@ class Arguments:
5870
organizer = graphene.String(required=False)
5971
description = graphene.String(required=False)
6072
room = graphene.String(required=True)
73+
room_id = graphene.Int(required=True)
6174
time_zone = graphene.String(required=True)
6275

6376
@Auth.user_roles('Admin', 'Default User', 'Super Admin')
@@ -73,9 +86,11 @@ def mutate(self, info, **kwargs):
7386
attendees: A string of emails of the event guests
7487
description: Any additional information about the event
7588
room: The meeting room where the even will be held [required]
89+
room_id: The id of the meeting room where the even will
90+
be held [required]
7691
time_zone: The timezone of the event location eg. 'Africa/Kigali'
77-
organizer: The email of the co-organizer, the converge email is
78-
the default
92+
organizer: The email of the organizer. it should be gotten
93+
from the user token.
7994
8095
Returns:
8196
A string that communicates a successfully created event.
@@ -88,12 +103,14 @@ def mutate(self, info, **kwargs):
88103
organizer = kwargs.get('organizer', None)
89104

90105
event_title = kwargs['event_title']
106+
room_id = kwargs['room_id']
91107
empty_string_checker(event_title)
92108
empty_string_checker(room)
109+
empty_string_checker(room_id)
93110
empty_string_checker(time_zone)
94111

95112
start_date, end_date = calendar_dates_format(
96-
kwargs['start_date'], kwargs['start_time'], duration)
113+
kwargs['start_date'], kwargs['start_time'], duration, time_zone)
97114

98115
attendees = attendees.replace(" ", "").split(",")
99116
guests = []
@@ -119,8 +136,23 @@ def mutate(self, info, **kwargs):
119136
}
120137
}
121138
service = credentials.set_api_credentials()
122-
service.events().insert(calendarId='primary', body=event,
123-
sendNotifications=True).execute()
139+
event_created = service.events() \
140+
.insert(calendarId='primary',
141+
body=event,
142+
sendNotifications=True).execute()
143+
new_event = EventsModel(
144+
event_id=event_created['id'],
145+
event_title=kwargs['event_title'],
146+
start_time=start_date,
147+
end_time=end_date,
148+
number_of_participants=len(guests),
149+
app_booking=True,
150+
checked_in=False,
151+
room_id=room_id,
152+
cancelled=False,
153+
organizer_email=organizer
154+
)
155+
new_event.save()
124156
return BookEvent(response='Event created successfully')
125157

126158

@@ -129,11 +161,11 @@ class EventCheckin(graphene.Mutation):
129161
Returns the eventcheckin payload
130162
"""
131163
class Arguments:
132-
calendar_id = graphene.String(required=True)
133-
event_id = graphene.String(required=True)
164+
calendar_id = EventArguments.calendar_id
165+
event_id = EventArguments.event_id
134166
event_title = graphene.String(required=True)
135-
start_time = graphene.String(required=True)
136-
end_time = graphene.String(required=True)
167+
start_time = EventArguments.start_time
168+
end_time = EventArguments.end_time
137169
number_of_participants = graphene.Int(required=True)
138170
check_in_time = graphene.String(required=False)
139171
event = graphene.Field(Events)
@@ -162,11 +194,11 @@ class CancelEvent(graphene.Mutation):
162194
Returns the payload on event cancelation
163195
"""
164196
class Arguments:
165-
calendar_id = graphene.String(required=True)
166-
event_id = graphene.String(required=True)
197+
calendar_id = EventArguments.calendar_id
198+
event_id = EventArguments.event_id
167199
event_title = graphene.String(required=True)
168-
start_time = graphene.String(required=True)
169-
end_time = graphene.String(required=True)
200+
start_time = EventArguments.start_time
201+
end_time = EventArguments.end_time
170202
number_of_participants = graphene.Int()
171203
event = graphene.Field(Events)
172204

@@ -212,14 +244,32 @@ class EndEvent(graphene.Mutation):
212244
Returns event payload on ending the event
213245
"""
214246
class Arguments:
215-
calendar_id = graphene.String(required=True)
216-
event_id = graphene.String(required=True)
217-
start_time = graphene.String(required=True)
218-
end_time = graphene.String(required=True)
247+
calendar_id = EventArguments.calendar_id
248+
event_id = EventArguments.event_id
249+
organizer_email = graphene.String(required=True)
250+
room_id = graphene.Int(required=True)
251+
start_time = EventArguments.start_time
252+
end_time = EventArguments.end_time
219253
meeting_end_time = graphene.String(required=True)
220254
event = graphene.Field(Events)
221255

222256
def mutate(self, info, **kwargs):
257+
calendar_id = kwargs['calendar_id']
258+
event_id = kwargs['event_id']
259+
organizer_email = kwargs['organizer_email']
260+
room_id = kwargs['room_id']
261+
start_time = kwargs['start_time']
262+
end_time = kwargs['end_time']
263+
meeting_end_time = kwargs['meeting_end_time']
264+
265+
empty_string_checker(calendar_id)
266+
empty_string_checker(event_id)
267+
empty_string_checker(organizer_email)
268+
empty_string_checker(room_id)
269+
empty_string_checker(start_time)
270+
empty_string_checker(end_time)
271+
empty_string_checker(meeting_end_time)
272+
223273
room_id, event = check_event_in_db(self, info, "ended", **kwargs)
224274
if kwargs.get('meeting_end_time'):
225275
update_device_last_activity(
@@ -230,8 +280,8 @@ def mutate(self, info, **kwargs):
230280
meeting_end_time=kwargs['meeting_end_time']
231281
)
232282
event.save()
233-
event_id = kwargs['event_id']
234-
notify_slack.delay(event_id)
283+
284+
notify_slack.delay(event_id, organizer_email, room_id)
235285
return EndEvent(event=event)
236286

237287

fixtures/events/book_event_fixtures.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
duration:60
77
88
timeZone: "Africa/Kigali",
9-
room:"Yankara"
9+
room:"Yankara",
10+
roomId:1
1011
){
1112
response
1213
}
@@ -21,7 +22,8 @@
2122
duration:60
2223
2324
timeZone: "Africa/Kigali",
24-
room:"Yankara"
25+
room:"Yankara",
26+
roomId:1
2527
){
2628
response
2729
}
@@ -36,7 +38,8 @@
3638
duration:60
3739
3840
timeZone: "Africa/Kigali",
39-
room:""
41+
room:"",
42+
roomId:1
4043
){
4144
response
4245
}
@@ -51,7 +54,8 @@
5154
duration:60
5255
5356
timeZone: "Africa/Kigali",
54-
room:"Yankara"
57+
room:"Yankara",
58+
roomId:1
5559
){
5660
response
5761
}
@@ -66,7 +70,8 @@
6670
duration:60
6771
6872
timeZone: "Africa/Kigali",
69-
room:"Yankara"
73+
room:"Yankara",
74+
roomId:1
7075
){
7176
response
7277
}
@@ -81,7 +86,8 @@
8186
duration:60
8287
8388
timeZone: "",
84-
room:"Yankara"
89+
room:"Yankara",
90+
roomId:1
8591
){
8692
response
8793
}

fixtures/events/end_event_fixtures.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
end_event_mutation = '''mutation {
22
endEvent(calendarId:"[email protected]",
33
eventId:"test_id5",
4+
organizerEmail:"[email protected]",
5+
roomId:1,
46
startTime:"2018-07-10T09:00:00Z",
57
endTime:"2018-07-10T09:45:00Z",
68
meetingEndTime: "2018-07-10T09:45:00Z"){
@@ -43,6 +45,8 @@
4345
endEvent(calendarId:"[email protected]",
4446
eventId:"test_id5",
4547
startTime:"2018-07-11T09:00:00Z",
48+
organizerEmail:"[email protected]",
49+
roomId:1,
4650
endTime:"2018-07-11T09:45:00Z",
4751
meetingEndTime: "2018-07-11T09:45:00Z"){
4852
event{
@@ -69,6 +73,8 @@
6973
endEvent(calendarId:"invalid_calendar_id",
7074
eventId:"test_id5",
7175
startTime:"2018-08-11T09:00:00Z",
76+
organizerEmail:"[email protected]",
77+
roomId:1,
7278
endTime:"2018-08-11T09:45:00Z",
7379
meetingEndTime: "2018-08-11T09:45:00Z"){
7480
event{

helpers/calendar/events.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ def sync_single_room_events(self, room):
189189
recurring_event_id=event.get("recurringEventId"),
190190
room_id=room.id,
191191
event_title=event.get("summary"),
192+
organizer_email=organizer.get('email'),
192193
start_time=event["start"].get(
193194
"dateTime") or event["start"].get("date"),
194195
end_time=event["end"].get(

helpers/event/slack_notifier.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@
22
import celery
33
from config import Config
44

5-
"""
6-
This function call slack bot url
7-
"""
8-
95

106
@celery.task(name="notify-slack")
11-
def notify_slack(event_id):
12-
responce = requests.get(url=Config.NOTIFY_URL + event_id)
13-
return(responce.status_code)
7+
def notify_slack(event_id, organizer_email, room_id):
8+
"""
9+
This function calls the slack BOT URL
10+
and notifies the organizer.
11+
"""
12+
params_data = {
13+
"event_id": event_id,
14+
"organizer_email": organizer_email,
15+
"room_id": room_id
16+
}
17+
response = requests.get(url=Config.NOTIFY_URL, params=params_data)
18+
return(response.status_code)

helpers/events_filter/events_filter.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77

88
utc = pytz.utc
9+
timezone = pytz.timezone
910

1011

1112
def validate_date_input(start_date, end_date):
@@ -97,14 +98,15 @@ def date_time_format_validator(date_text, time_text):
9798
raise ValueError("start time should be in this format: 'HH:MM'")
9899

99100

100-
def calendar_dates_format(start_date, start_time, duration):
101+
def calendar_dates_format(start_date, start_time, duration, time_zone):
101102
"""Converts user date, time and duration input into start_date
102103
and end_date format that is acceptable by the Google Calendar API
103104
104105
Args:
105106
start_date: Date string of the day of the event
106107
start_time: Time sting of the time of the event
107108
duration: A float of the duration of the event
109+
time_zone: The timezone of the event location eg. 'Africa/Kigali'
108110
109111
Returns:
110112
start_date and end_date in this format "%Y-%m-%dT%H:%M:%S".
@@ -121,7 +123,7 @@ def calendar_dates_format(start_date, start_time, duration):
121123

122124
end_date = start_date + timedelta(minutes=duration)
123125

124-
start_date = start_date.strftime('%Y-%m-%dT%H:%M:%S')
125-
end_date = end_date.strftime('%Y-%m-%dT%H:%M:%S')
126+
start_date = start_date.replace(tzinfo=timezone(time_zone)).isoformat()
127+
end_date = end_date.replace(tzinfo=timezone(time_zone)).isoformat()
126128

127129
return (start_date, end_date)

0 commit comments

Comments
 (0)