17
17
from app .models .user import User
18
18
from app .models .users_events_role import UsersEventsRoles
19
19
from app .settings import get_settings
20
+ from flask import jsonify , request , Blueprint
21
+ from app .api .helpers .errors import NotFoundError
22
+ from sqlalchemy .orm .exc import NoResultFound
23
+
24
+
25
+ role_invites_misc_routes = Blueprint ('role_invites_misc' , __name__ , url_prefix = '/v1' )
20
26
21
27
22
28
class RoleInviteListPost (ResourceList ):
@@ -45,19 +51,10 @@ def after_create_object(self, role_invite, data, view_kwargs):
45
51
:return:
46
52
"""
47
53
user = User .query .filter_by (email = role_invite .email ).first ()
48
- if 'status' in data and data ['status' ] == 'accepted' :
49
- role = Role .query .filter_by (name = role_invite .role_name ).first ()
50
- event = Event .query .filter_by (id = role_invite .event_id ).first ()
51
- uer = UsersEventsRoles .query .filter_by (user = user ).filter_by (
52
- event = event ).filter_by (role = role ).first ()
53
- if not uer :
54
- uer = UsersEventsRoles (user , event , role )
55
- save_to_db (uer , 'Role Invite accepted' )
56
-
57
54
event = Event .query .filter_by (id = role_invite .event_id ).first ()
58
55
frontend_url = get_settings ()['frontend_url' ]
59
- link = "{}/events /{}/role-invites/ {}" \
60
- .format (frontend_url , event .id , role_invite .hash )
56
+ link = "{}/e /{}/role-invites?token= {}" \
57
+ .format (frontend_url , event .identifier , role_invite .hash )
61
58
62
59
send_email_role_invite (role_invite .email , role_invite .role_name , event .name , link )
63
60
if user :
@@ -90,7 +87,7 @@ def query(self, view_kwargs):
90
87
91
88
view_kwargs = True
92
89
methods = ['GET' ]
93
- decorators = (api .has_permission ('is_organizer ' , fetch = 'event_id' , fetch_as = "event_id" ),)
90
+ decorators = (api .has_permission ('is_coorganizer ' , fetch = 'event_id' , fetch_as = "event_id" ),)
94
91
schema = RoleInviteSchema
95
92
data_layer = {'session' : db .session ,
96
93
'model' : RoleInvite ,
@@ -122,23 +119,12 @@ def before_update_object(self, role_invite, data, view_kwargs):
122
119
'status' not in data ):
123
120
raise UnprocessableEntity ({'source' : '' }, "You can only change your status" )
124
121
125
- def after_update_object (self , role_invite , data , view_kwargs ):
126
- user = User .query .filter_by (email = role_invite .email ).first ()
127
- if 'status' in data and data ['status' ] == 'accepted' :
128
- role = Role .query .filter_by (name = role_invite .role_name ).first ()
129
- event = Event .query .filter_by (id = role_invite .event_id ).first ()
130
- uer = UsersEventsRoles .query .filter_by (user = user ).filter_by (
131
- event = event ).filter_by (role = role ).first ()
132
- if not uer :
133
- uer = UsersEventsRoles (user , event , role )
134
- save_to_db (uer , 'Role Invite accepted' )
135
122
decorators = (api .has_permission ('is_organizer' , methods = "DELETE" , fetch = "event_id" , fetch_as = "event_id" ,
136
123
model = RoleInvite ),)
137
124
schema = RoleInviteSchema
138
125
data_layer = {'session' : db .session ,
139
126
'model' : RoleInvite ,
140
- 'methods' : {'before_update_object' : before_update_object ,
141
- 'after_update_object' : after_update_object }}
127
+ 'methods' : {'before_update_object' : before_update_object }}
142
128
143
129
144
130
class RoleInviteRelationship (ResourceRelationship ):
@@ -149,3 +135,51 @@ class RoleInviteRelationship(ResourceRelationship):
149
135
schema = RoleInviteSchema
150
136
data_layer = {'session' : db .session ,
151
137
'model' : RoleInvite }
138
+
139
+
140
+ @role_invites_misc_routes .route ('/role_invites/accept-invite' , methods = ['POST' ])
141
+ def accept_invite ():
142
+ token = request .json ['data' ]['token' ]
143
+ try :
144
+ role_invite = RoleInvite .query .filter_by (hash = token ).one ()
145
+ except NoResultFound :
146
+ return NotFoundError ({'source' : '' }, 'Role Invite Not Found' ).respond ()
147
+ else :
148
+ try :
149
+ user = User .query .filter_by (email = role_invite .email ).first ()
150
+ except NoResultFound :
151
+ return NotFoundError ({'source' : '' }, 'User corresponding to role invite not Found' ).respond ()
152
+ try :
153
+ role = Role .query .filter_by (name = role_invite .role_name ).first ()
154
+ except NoResultFound :
155
+ return NotFoundError ({'source' : '' }, 'Role corresponding to role invite not Found' ).respond ()
156
+ event = Event .query .filter_by (id = role_invite .event_id ).first ()
157
+ uer = UsersEventsRoles .query .filter_by (user = user ).filter_by (
158
+ event = event ).filter_by (role = role ).first ()
159
+ if not uer :
160
+ role_invite .status = "accepted"
161
+ save_to_db (role_invite , 'Role Invite Accepted' )
162
+ uer = UsersEventsRoles (user , event , role )
163
+ save_to_db (uer , 'User Event Role Created' )
164
+ if not user .is_verified :
165
+ user .is_verified = True
166
+ save_to_db (user , 'User verified' )
167
+
168
+ return jsonify ({
169
+ "email" : user .email ,
170
+ "event" : role_invite .event_id ,
171
+ "name" : user .fullname if user .fullname else None
172
+ })
173
+
174
+
175
+ @role_invites_misc_routes .route ('/role_invites/user' , methods = ['POST' ])
176
+ def fetch_user ():
177
+ token = request .json ['data' ]['token' ]
178
+ try :
179
+ role_invite = RoleInvite .query .filter_by (hash = token ).one ()
180
+ except NoResultFound :
181
+ return NotFoundError ({'source' : '' }, 'Role Invite Not Found' ).respond ()
182
+ else :
183
+ return jsonify ({
184
+ "email" : role_invite .email
185
+ })
0 commit comments