Skip to content

Commit 715a863

Browse files
feat: adds checks for accepting owner role invite
changed the filter_by query updates checks while creation/updation/acceptance of owner-role-invite
1 parent d4825f1 commit 715a863

File tree

2 files changed

+56
-3
lines changed

2 files changed

+56
-3
lines changed

app/api/helpers/role_invite.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import logging
2+
from app.models import db
3+
from app.models.role_invite import RoleInvite
4+
5+
6+
def delete_previous_uer(uer):
7+
"""
8+
delete previous owner and previous role of the user before adding the user as new owner
9+
:param uer: User Event Role to be deleted.
10+
:return:
11+
"""
12+
if uer.role.name == 'owner':
13+
role_invite = db.session.query(RoleInvite).filter_by(
14+
email=uer.user.email, event_id=uer.event_id, role_name='owner', status='accepted'
15+
).first()
16+
else:
17+
role_invite = db.session.query(RoleInvite).filter_by(
18+
email=uer.user.email, event_id=uer.event_id, status='accepted'
19+
).first()
20+
21+
if role_invite:
22+
db.session.delete(role_invite)
23+
db.session.delete(uer)
24+
try:
25+
db.session.commit()
26+
except Exception as e:
27+
logging.error('DB Exception! %s' % e)
28+
db.session.rollback()

app/api/role_invites.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from app.api.helpers.notification import send_notif_event_role
1212
from app.api.helpers.permission_manager import has_access
1313
from app.api.helpers.query import event_query
14+
from app.api.helpers.role_invite import delete_previous_uer
1415
from app.api.helpers.utilities import require_relationship
1516
from app.api.schema.role_invites import RoleInviteSchema
1617
from app.models import db
@@ -41,6 +42,16 @@ def before_post(self, args, kwargs, data):
4142
if not has_access('is_organizer', event_id=data['event']):
4243
raise ForbiddenException({'source': ''}, 'Organizer access is required.')
4344

45+
def before_create_object(self, data, view_kwargs):
46+
"""
47+
before create object method for RoleInviteListPost Class
48+
:param data:
49+
:param view_kwargs:
50+
:return:
51+
"""
52+
if data['role_name'] == 'owner' and not has_access('is_owner', event_id=data['event']):
53+
raise ForbiddenException({'source': ''}, 'Owner access is required.')
54+
4455
def after_create_object(self, role_invite, data, view_kwargs):
4556
"""
4657
after create object method for role invite links
@@ -67,6 +78,7 @@ def after_create_object(self, role_invite, data, view_kwargs):
6778
data_layer = {'session': db.session,
6879
'model': RoleInvite,
6980
'methods': {
81+
'before_create_object': before_create_object,
7082
'after_create_object': after_create_object
7183
}}
7284

@@ -116,6 +128,8 @@ def before_update_object(self, role_invite, data, view_kwargs):
116128
user_id=user.id):
117129
raise UnprocessableEntity({'source': ''},
118130
"Status can be updated only by event organizer or user hiself")
131+
if 'role_name' in data and data['role_name'] == 'owner' and not has_access('is_owner', event_id=data['event']):
132+
raise ForbiddenException({'source': ''}, 'Owner access is required.')
119133
if not user and not has_access('is_organizer', event_id=role_invite.event_id):
120134
raise UnprocessableEntity({'source': ''}, "User not registered")
121135
if not has_access('is_organizer', event_id=role_invite.event_id) and (len(list(data.keys())) > 1 or
@@ -160,13 +174,24 @@ def accept_invite():
160174
uer = UsersEventsRoles.query.filter_by(user=user).filter_by(
161175
event=event).filter_by(role=role).first()
162176
if not uer:
177+
if not user.is_verified:
178+
user.is_verified = True
179+
save_to_db(user, 'User verified')
180+
if role_invite.role_name == 'owner':
181+
# to delete past owner from users_events_roles table
182+
past_owner = UsersEventsRoles.query.filter_by(event=event, role=role).first()
183+
if past_owner:
184+
delete_previous_uer(past_owner)
185+
# to delete any previous role of the current user (going to be owner)
186+
previous_uer = UsersEventsRoles.query.filter_by(event=event, user_id=user.id).first()
187+
if previous_uer:
188+
delete_previous_uer(previous_uer)
189+
163190
role_invite.status = "accepted"
164191
save_to_db(role_invite, 'Role Invite Accepted')
165192
uer = UsersEventsRoles(user, event, role)
166193
save_to_db(uer, 'User Event Role Created')
167-
if not user.is_verified:
168-
user.is_verified = True
169-
save_to_db(user, 'User verified')
194+
170195

171196
return jsonify({
172197
"email": user.email,

0 commit comments

Comments
 (0)