From 3b705a780a022fbec6d3076fba47c465d5bf6440 Mon Sep 17 00:00:00 2001 From: Ben Thorner Date: Tue, 5 Apr 2022 11:29:36 +0100 Subject: [PATCH] Extract broadcast validations into separate fn This makes it easier to see the key stages of the function, which we're about to make a bit bigger. --- app/broadcast_message/utils.py | 41 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/app/broadcast_message/utils.py b/app/broadcast_message/utils.py index cb3a0b412..91807228b 100644 --- a/app/broadcast_message/utils.py +++ b/app/broadcast_message/utils.py @@ -14,6 +14,29 @@ from app.models import ( def validate_and_update_broadcast_message_status(broadcast_message, new_status, updating_user=None, api_key_id=None): + _validate_broadcast_update(broadcast_message, new_status, updating_user) + + if new_status == BroadcastStatusType.BROADCASTING: + broadcast_message.approved_at = datetime.utcnow() + broadcast_message.approved_by = updating_user + + if new_status == BroadcastStatusType.CANCELLED: + broadcast_message.cancelled_at = datetime.utcnow() + broadcast_message.cancelled_by = updating_user + broadcast_message.cancelled_by_api_key_id = api_key_id + + current_app.logger.info( + f'broadcast_message {broadcast_message.id} moving from {broadcast_message.status} to {new_status}' + ) + broadcast_message.status = new_status + + dao_save_object(broadcast_message) + + if new_status in {BroadcastStatusType.BROADCASTING, BroadcastStatusType.CANCELLED}: + _create_broadcast_event(broadcast_message) + + +def _validate_broadcast_update(broadcast_message, new_status, updating_user): if new_status not in BroadcastStatusType.ALLOWED_STATUS_TRANSITIONS[broadcast_message.status]: raise InvalidRequest( f'Cannot move broadcast_message {broadcast_message.id} from {broadcast_message.status} to {new_status}', @@ -32,24 +55,6 @@ def validate_and_update_broadcast_message_status(broadcast_message, new_status, f'broadcast_message {broadcast_message.id} has no selected areas and so cannot be broadcasted.', status_code=400 ) - else: - broadcast_message.approved_at = datetime.utcnow() - broadcast_message.approved_by = updating_user - - if new_status == BroadcastStatusType.CANCELLED: - broadcast_message.cancelled_at = datetime.utcnow() - broadcast_message.cancelled_by = updating_user - broadcast_message.cancelled_by_api_key_id = api_key_id - - current_app.logger.info( - f'broadcast_message {broadcast_message.id} moving from {broadcast_message.status} to {new_status}' - ) - broadcast_message.status = new_status - - dao_save_object(broadcast_message) - - if new_status in {BroadcastStatusType.BROADCASTING, BroadcastStatusType.CANCELLED}: - _create_broadcast_event(broadcast_message) def _create_broadcast_event(broadcast_message):