DRY-up and enforce kwargs for most events

For most events this makes the purpose of each argument clearer at
the point the event is called. It's still worth having a function
for each event type, as this abstracts knowledge of the event label.
Using a schema approach will make adding new events easier.

In the next commit we'll DRY-up the duplication in the tests as well.
This commit is contained in:
Ben Thorner
2021-07-12 15:29:53 +01:00
parent cfe022bc7f
commit 22ac1bfcae
7 changed files with 100 additions and 96 deletions

View File

@@ -2,94 +2,62 @@ from flask import request
from app import events_api_client
EVENT_SCHEMAS = {
"sucessful_login": {"user_id"},
"update_user_email": {"user_id", "updated_by_id", "original_email_address", "new_email_address"},
"update_user_mobile_number": {"user_id", "updated_by_id", "original_mobile_number", "new_mobile_number"},
"remove_user_from_service": {"user_id", "removed_by_id", "service_id"},
"add_user_to_service": {"user_id", "invited_by_id", "service_id"},
"archive_user": {"user_id", "archived_by_id"},
"change_broadcast_account_type": {"service_id", "changed_by_id", "service_mode", "broadcast_channel", "provider_restriction"}, # noqa: E501 (length)
"archive_service": {"service_id", "archived_by_id"},
"suspend_service": {"service_id", "suspended_by_id"},
}
def on_user_logged_in(_sender, user):
_send_event('sucessful_login', user_id=user.id)
def create_email_change_event(user_id, updated_by_id, original_email_address, new_email_address):
_send_event(
'update_user_email',
user_id=user_id,
updated_by_id=updated_by_id,
original_email_address=original_email_address,
new_email_address=new_email_address)
def create_email_change_event(**kwargs):
_send_event('update_user_email', **kwargs)
def create_mobile_number_change_event(user_id, updated_by_id, original_mobile_number, new_mobile_number):
_send_event(
'update_user_mobile_number',
user_id=user_id,
updated_by_id=updated_by_id,
original_mobile_number=original_mobile_number,
new_mobile_number=new_mobile_number)
def create_mobile_number_change_event(**kwargs):
_send_event('update_user_mobile_number', **kwargs)
def create_remove_user_from_service_event(user_id, removed_by_id, service_id):
_send_event(
'remove_user_from_service',
user_id=user_id,
removed_by_id=removed_by_id,
service_id=service_id
)
def create_remove_user_from_service_event(**kwargs):
_send_event('remove_user_from_service', **kwargs)
def create_add_user_to_service_event(user_id, invited_by_id, service_id):
_send_event(
'add_user_to_service',
user_id=user_id,
invited_by_id=invited_by_id,
service_id=service_id
)
def create_add_user_to_service_event(**kwargs):
_send_event('add_user_to_service', **kwargs)
def create_archive_user_event(user_id, archived_by_id):
_send_event(
'archive_user',
user_id=user_id,
archived_by_id=archived_by_id)
def create_archive_user_event(**kwargs):
_send_event('archive_user', **kwargs)
def create_broadcast_account_type_change_event(
service_id,
changed_by_id,
service_mode,
broadcast_channel,
provider_restriction,
):
_send_event(
'change_broadcast_account_type',
service_id=service_id,
changed_by_id=changed_by_id,
service_mode=service_mode,
broadcast_channel=broadcast_channel,
provider_restriction=provider_restriction
)
def create_broadcast_account_type_change_event(**kwargs):
_send_event('change_broadcast_account_type', **kwargs)
def create_suspend_service_event(
service_id,
suspended_by_id,
):
_send_event(
'suspend_service',
service_id=service_id,
suspended_by_id=suspended_by_id,
)
def create_suspend_service_event(**kwargs):
_send_event('suspend_service', **kwargs)
def create_archive_service_event(
service_id,
archived_by_id,
):
_send_event(
'archive_service',
service_id=service_id,
archived_by_id=archived_by_id,
)
def create_archive_service_event(**kwargs):
_send_event('archive_service', **kwargs)
def _send_event(event_type, **kwargs):
expected_keys = EVENT_SCHEMAS[event_type]
actual_keys = set(kwargs.keys())
if expected_keys != actual_keys:
raise ValueError(f'Expected {expected_keys}, but got {actual_keys}')
event_data = _construct_event_data(request)
event_data.update(kwargs)