diff --git a/app/dao/broadcast_service_dao.py b/app/dao/broadcast_service_dao.py new file mode 100644 index 000000000..7ff40315e --- /dev/null +++ b/app/dao/broadcast_service_dao.py @@ -0,0 +1,65 @@ +from datetime import datetime + +from flask import current_app + +from app import db +from app.models import ServiceBroadcastSettings, ServicePermission, Organisation, BROADCAST_TYPE +from app.dao.dao_utils import transactional + + +@transactional +def set_broadcast_service_type(service, service_mode, broadcast_channel, provider_restriction): + insert_or_update_service_broadcast_settings( + service, channel=broadcast_channel, provider_restriction=provider_restriction + ) + + # Remove all permissions and add broadcast permission + if not service.has_permission(BROADCAST_TYPE): + service_permission = ServicePermission(service_id=service.id, permission=BROADCAST_TYPE) + db.session.add(service_permission) + + ServicePermission.query.filter( + ServicePermission.service_id == service.id, + ServicePermission.permission != BROADCAST_TYPE + ).delete() + + # Refresh the service object as it has references to the service permissions but we don't yet + # want to commit the permission changes incase all of this needs to rollback + db.session.refresh(service) + + # Set service count as live false always + service.count_as_live = False + + # Set service into training mode or live mode + if service_mode == "live": + if service.restricted == True: + # Only update the go live at timestamp if this if moving from training mode + # to live mode, not if it's moving from one type of live mode service to another + service.go_live_at = datetime.utcnow() + service.restricted = False + else: + service.restricted = True + service.go_live_at = None + + # Add service to organisation + organisation = Organisation.query.filter_by( + id=current_app.config['BROADCAST_ORGANISATION_ID'] + ).one() + service.organisation_id = organisation.id + service.organisation_type = organisation.organisation_type + service.crown = organisation.crown + + db.session.add(service) + + +def insert_or_update_service_broadcast_settings(service, channel, provider_restriction=None): + if not service.service_broadcast_settings: + settings = ServiceBroadcastSettings() + settings.service = service + settings.channel = channel + settings.provider = provider_restriction + db.session.add(settings) + else: + service.service_broadcast_settings.channel = channel + service.service_broadcast_settings.provider = provider_restriction + db.session.add(service.service_broadcast_settings) diff --git a/app/dao/service_broadcast_settings_dao.py b/app/dao/service_broadcast_settings_dao.py deleted file mode 100644 index 8835fbae9..000000000 --- a/app/dao/service_broadcast_settings_dao.py +++ /dev/null @@ -1,17 +0,0 @@ -from app import db -from app.models import ServiceBroadcastSettings -from app.dao.dao_utils import transactional - - -@transactional -def insert_or_update_service_broadcast_settings(service, channel, provider_restriction=None): - if not service.service_broadcast_settings: - settings = ServiceBroadcastSettings() - settings.service = service - settings.channel = channel - settings.provider = provider_restriction - db.session.add(settings) - else: - service.service_broadcast_settings.channel = channel - service.service_broadcast_settings.provider = provider_restriction - db.session.add(service.service_broadcast_settings) diff --git a/app/service/rest.py b/app/service/rest.py index 49b93e4ab..d0c6af347 100644 --- a/app/service/rest.py +++ b/app/service/rest.py @@ -31,7 +31,6 @@ from app.dao.fact_notification_status_dao import ( from app.dao.inbound_numbers_dao import dao_allocate_number_for_service from app.dao.organisation_dao import ( dao_get_organisation_by_service_id, - dao_add_service_to_organisation, ) from app.dao.returned_letters_dao import ( fetch_most_recent_returned_letter, @@ -45,11 +44,7 @@ from app.dao.service_contact_list_dao import ( dao_get_contact_list_by_id, save_service_contact_list, ) -from app.dao.service_permissions_dao import ( - dao_add_service_permission, - dao_fetch_service_permissions, - dao_remove_service_permission, -) +from app.dao.broadcast_service_dao import set_broadcast_service_type from app.dao.service_data_retention_dao import ( fetch_service_data_retention, fetch_service_data_retention_by_id, @@ -81,9 +76,6 @@ from app.dao.services_dao import ( dao_update_service, get_services_by_partial_name, ) -from app.dao.service_broadcast_settings_dao import ( - insert_or_update_service_broadcast_settings -) from app.dao.service_guest_list_dao import ( dao_fetch_service_guest_list, dao_add_and_commit_guest_list_contacts, @@ -113,15 +105,12 @@ from app.letters.utils import letter_print_day from app.models import ( KEY_TYPE_NORMAL, LETTER_TYPE, - BROADCAST_TYPE, NOTIFICATION_CANCELLED, Permission, Service, EmailBranding, LetterBranding, - ServiceContactList, - ServiceBroadcastSettings, - ServicePermission + ServiceContactList ) from app.notifications.process_notifications import persist_notification, send_notification_to_queue from app.schema_validation import validate @@ -1105,32 +1094,12 @@ def set_as_broadcast_service(service_id): data = validate(request.get_json(), service_broadcast_settings_schema) service = dao_fetch_service_by_id(service_id) - insert_or_update_service_broadcast_settings( - service, channel=data["broadcast_channel"], provider_restriction=data.get("provider_restriction") + set_broadcast_service_type( + service, + service_mode=data["service_mode"], + broadcast_channel=data["broadcast_channel"], + provider_restriction=data["provider_restriction"] ) - current_service_permissions = dao_fetch_service_permissions(service.id) - for permission in current_service_permissions: - dao_remove_service_permission(service.id, permission.permission) - dao_add_service_permission(service.id, BROADCAST_TYPE) - - service.count_as_live = False - - if data["service_mode"] == "live": - if service.restricted == True: - # Only update the go live at timestamp if this if moving from training mode - # to live mode, not if it's moving from one type of live mode service to another - service.go_live_at = datetime.utcnow() - else: - service.go_live_at = None - - service.restricted = True - if data["service_mode"] == "live": - service.restricted = False - - dao_update_service(service) - - dao_add_service_to_organisation(service, current_app.config['BROADCAST_ORGANISATION_ID']) - data = service_schema.dump(service).data return jsonify(data=data) diff --git a/tests/app/conftest.py b/tests/app/conftest.py index 33e68b630..ce91c2e5a 100644 --- a/tests/app/conftest.py +++ b/tests/app/conftest.py @@ -16,7 +16,7 @@ from app.dao.jobs_dao import dao_create_job from app.dao.notifications_dao import dao_create_notification from app.dao.organisation_dao import dao_create_organisation, dao_add_service_to_organisation from app.dao.services_dao import (dao_create_service, dao_add_user_to_service) -from app.dao.service_broadcast_settings_dao import insert_or_update_service_broadcast_settings +from app.dao.broadcast_service_dao import insert_or_update_service_broadcast_settings from app.dao.templates_dao import dao_create_template from app.dao.users_dao import create_secret_code, create_user_code from app.history_meta import create_history diff --git a/tests/app/service/test_rest.py b/tests/app/service/test_rest.py index 1be4e1fa3..34b116393 100644 --- a/tests/app/service/test_rest.py +++ b/tests/app/service/test_rest.py @@ -37,7 +37,6 @@ from app.models import ( INBOUND_SMS_TYPE, NOTIFICATION_RETURNED_LETTER, UPLOAD_LETTERS, - ServiceBroadcastSettings, ) from tests import create_authorization_header from tests.app.db import (