Skip to content

Commit

Permalink
fix: Filter after events efficiently (#7454)
Browse files Browse the repository at this point in the history
  • Loading branch information
iamareebjamal authored Nov 17, 2020
1 parent b0a90f0 commit aaacb23
Showing 1 changed file with 32 additions and 33 deletions.
65 changes: 32 additions & 33 deletions app/api/helpers/scheduled_jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,39 +27,38 @@

@celery.task(base=RequestContextTask, name='send.after.event.mail')
def send_after_event_mail():
from app.instance import current_app as app

with app.app_context():
events = Event.query.filter_by(state='published', deleted_at=None).all()
for event in events:
organizers = get_user_event_roles_by_role_name(event.id, 'organizer')
speakers = Speaker.query.filter_by(event_id=event.id, deleted_at=None).all()
owner = get_user_event_roles_by_role_name(event.id, 'owner').first()
current_time = datetime.datetime.now(pytz.timezone(event.timezone))
time_difference = current_time - event.ends_at
time_difference_minutes = (time_difference.days * 24 * 60) + (
time_difference.seconds / 60
)
frontend_url = get_settings()['frontend_url']
if current_time > event.ends_at and time_difference_minutes < 1440:
unique_emails = set()
user_objects = []
for speaker in speakers:
if not speaker.is_email_overridden:
unique_emails.add(speaker.user.email)
user_objects.append(speaker.user)
for organizer in organizers:
unique_emails.add(organizer.user.email)
user_objects.append(organizer.user)
if owner:
unique_emails.add(owner.user.email)
user_objects.append(owner.user)
for email in unique_emails:
send_email_after_event(email, event.name, frontend_url)
# Unique user's dict based on their id.
unique_users_dict = make_dict(user_objects, "id")
for user in unique_users_dict.values():
send_notif_after_event(user, event.name)
current_time = datetime.datetime.now()
events = (
Event.query.filter_by(state='published', deleted_at=None)
.filter(
Event.ends_at < current_time,
current_time - Event.ends_at < datetime.timedelta(days=1),
)
.all()
)
for event in events:
organizers = get_user_event_roles_by_role_name(event.id, 'organizer')
speakers = Speaker.query.filter_by(event_id=event.id, deleted_at=None).all()
owner = get_user_event_roles_by_role_name(event.id, 'owner').first()
frontend_url = get_settings()['frontend_url']
unique_emails = set()
user_objects = []
for speaker in speakers:
if not speaker.is_email_overridden:
unique_emails.add(speaker.user.email)
user_objects.append(speaker.user)
for organizer in organizers:
unique_emails.add(organizer.user.email)
user_objects.append(organizer.user)
if owner:
unique_emails.add(owner.user.email)
user_objects.append(owner.user)
for email in unique_emails:
send_email_after_event(email, event.name, frontend_url)
# Unique user's dict based on their id.
unique_users_dict = make_dict(user_objects, "id")
for user in unique_users_dict.values():
send_notif_after_event(user, event.name)


@celery.task(base=RequestContextTask, name='change.session.state.on.event.completion')
Expand Down

0 comments on commit aaacb23

Please sign in to comment.