Skip to content

Commit 6790e7e

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 6790e7e

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

app/api/helpers/role_invite.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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 before adding a new one
9+
:param uer: User Event Role to be deleted.
10+
:return:
11+
"""
12+
role_invite = db.session.query(RoleInvite).filter_by(
13+
email=uer.user.email, event_id=uer.event_id, role_name='owner', status='accepted'
14+
).first()
15+
16+
if role_invite:
17+
db.session.delete(role_invite)
18+
db.session.delete(uer)
19+
try:
20+
db.session.commit()
21+
except Exception as e:
22+
logging.error('DB Exception! %s' % e)
23+
db.session.rollback()

app/api/role_invites.py

Lines changed: 19 additions & 0 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
@@ -159,6 +173,7 @@ def accept_invite():
159173
event = Event.query.filter_by(id=role_invite.event_id).first()
160174
uer = UsersEventsRoles.query.filter_by(user=user).filter_by(
161175
event=event).filter_by(role=role).first()
176+
162177
if not uer:
163178
role_invite.status = "accepted"
164179
save_to_db(role_invite, 'Role Invite Accepted')
@@ -167,6 +182,10 @@ def accept_invite():
167182
if not user.is_verified:
168183
user.is_verified = True
169184
save_to_db(user, 'User verified')
185+
if role_invite.role_name == 'owner':
186+
past_owner = UsersEventsRoles.query.filter_by(event=event, role=role).first()
187+
if past_owner:
188+
delete_previous_uer(past_owner)
170189

171190
return jsonify({
172191
"email": user.email,

0 commit comments

Comments
 (0)