mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-03 13:18:32 -04:00
Revert "Purge notifications for configured days of retention"
This commit is contained in:
@@ -7,6 +7,7 @@ from datetime import (
|
||||
)
|
||||
|
||||
from flask import current_app
|
||||
|
||||
from notifications_utils.recipients import (
|
||||
validate_and_format_email_address,
|
||||
InvalidEmailError,
|
||||
@@ -41,8 +42,7 @@ from app.models import (
|
||||
NOTIFICATION_PERMANENT_FAILURE,
|
||||
NOTIFICATION_SENT,
|
||||
SMS_TYPE,
|
||||
EMAIL_TYPE,
|
||||
ServiceDataRetention
|
||||
EMAIL_TYPE
|
||||
)
|
||||
|
||||
from app.dao.dao_utils import transactional
|
||||
@@ -310,26 +310,10 @@ def _filter_query(query, filter_dict=None):
|
||||
@statsd(namespace="dao")
|
||||
@transactional
|
||||
def delete_notifications_created_more_than_a_week_ago_by_type(notification_type):
|
||||
flexible_data_retention = ServiceDataRetention.query.filter(
|
||||
ServiceDataRetention.notification_type == notification_type
|
||||
).all()
|
||||
|
||||
deleted = 0
|
||||
for f in flexible_data_retention:
|
||||
days_of_retention = convert_utc_to_bst(datetime.utcnow()).date() - timedelta(days=f.days_of_retention)
|
||||
deleted += db.session.query(Notification).filter(
|
||||
func.date(Notification.created_at) < days_of_retention,
|
||||
Notification.notification_type == f.notification_type,
|
||||
Notification.service_id == f.service_id
|
||||
).delete(synchronize_session='fetch')
|
||||
|
||||
seven_days_ago = convert_utc_to_bst(datetime.utcnow()).date() - timedelta(days=7)
|
||||
services_with_data_retention = [x.service_id for x in flexible_data_retention]
|
||||
|
||||
deleted += db.session.query(Notification).filter(
|
||||
deleted = db.session.query(Notification).filter(
|
||||
func.date(Notification.created_at) < seven_days_ago,
|
||||
Notification.notification_type == notification_type,
|
||||
Notification.service_id.notin_(services_with_data_retention)
|
||||
).delete(synchronize_session='fetch')
|
||||
return deleted
|
||||
|
||||
|
||||
@@ -20,14 +20,6 @@ def fetch_service_data_retention(service_id):
|
||||
return data_retention_list
|
||||
|
||||
|
||||
def fetch_service_data_retention_by_notification_type(service_id, notification_type):
|
||||
data_retention_list = ServiceDataRetention.query.filter_by(
|
||||
service_id=service_id,
|
||||
notification_type=notification_type
|
||||
).first()
|
||||
return data_retention_list
|
||||
|
||||
|
||||
@transactional
|
||||
def insert_service_data_retention(service_id, notification_type, days_of_retention):
|
||||
new_data_retention = ServiceDataRetention(service_id=service_id,
|
||||
|
||||
@@ -246,8 +246,9 @@ def delete_service_and_all_associated_db_objects(service):
|
||||
|
||||
|
||||
@statsd(namespace="dao")
|
||||
def dao_fetch_stats_for_service(service_id, limit_days):
|
||||
start_date = midnight_n_days_ago(limit_days)
|
||||
def dao_fetch_stats_for_service(service_id):
|
||||
# We always want between seven and eight days
|
||||
start_date = midnight_n_days_ago(7)
|
||||
return _stats_for_service_query(service_id).filter(
|
||||
Notification.created_at >= start_date
|
||||
).all()
|
||||
|
||||
@@ -29,7 +29,6 @@ from app.dao.service_data_retention_dao import (
|
||||
fetch_service_data_retention_by_id,
|
||||
insert_service_data_retention,
|
||||
update_service_data_retention,
|
||||
fetch_service_data_retention_by_notification_type
|
||||
)
|
||||
from app.dao.service_sms_sender_dao import (
|
||||
archive_sms_sender,
|
||||
@@ -166,9 +165,7 @@ def get_service_by_id(service_id):
|
||||
|
||||
@service_blueprint.route('/<uuid:service_id>/statistics')
|
||||
def get_service_notification_statistics(service_id):
|
||||
return jsonify(data=get_service_statistics(service_id,
|
||||
request.args.get('today_only') == 'True',
|
||||
request.args.get('limit_days', 7)))
|
||||
return jsonify(data=get_service_statistics(service_id, request.args.get('today_only') == 'True'))
|
||||
|
||||
|
||||
@service_blueprint.route('', methods=['POST'])
|
||||
@@ -327,20 +324,15 @@ def get_service_history(service_id):
|
||||
@service_blueprint.route('/<uuid:service_id>/notifications', methods=['GET'])
|
||||
def get_all_notifications_for_service(service_id):
|
||||
data = notifications_filter_schema.load(request.args).data
|
||||
notification_type = data.get('template_type')[0] if data.get('template_type') else None
|
||||
if data.get('to'):
|
||||
notification_type = data.get('template_type')[0] if data.get('template_type') else None
|
||||
return search_for_notification_by_to_field(service_id=service_id,
|
||||
search_term=data['to'],
|
||||
statuses=data.get('status'),
|
||||
notification_type=notification_type)
|
||||
page = data['page'] if 'page' in data else 1
|
||||
page_size = data['page_size'] if 'page_size' in data else current_app.config.get('PAGE_SIZE')
|
||||
days_of_retention = None
|
||||
if notification_type:
|
||||
days_of_retention = fetch_service_data_retention_by_notification_type(
|
||||
service_id=service_id,
|
||||
notification_type=notification_type).days_of_retention
|
||||
limit_days = days_of_retention if days_of_retention else data.get('limit_days')
|
||||
limit_days = data.get('limit_days')
|
||||
include_jobs = data.get('include_jobs', True)
|
||||
include_from_test_key = data.get('include_from_test_key', False)
|
||||
include_one_off = data.get('include_one_off', True)
|
||||
@@ -427,17 +419,15 @@ def get_monthly_notification_stats(service_id):
|
||||
def get_detailed_service(service_id, today_only=False):
|
||||
service = dao_fetch_service_by_id(service_id)
|
||||
|
||||
service.statistics = get_service_statistics(service_id, today_only, limit_days=7)
|
||||
service.statistics = get_service_statistics(service_id, today_only)
|
||||
return detailed_service_schema.dump(service).data
|
||||
|
||||
|
||||
def get_service_statistics(service_id, today_only, limit_days):
|
||||
if today_only:
|
||||
stats = dao_fetch_todays_stats_for_service(service_id)
|
||||
return statistics.format_statistics(stats)
|
||||
if limit_days:
|
||||
stats = dao_fetch_stats_for_service(service_id=service_id, limit_days=int(limit_days))
|
||||
return statistics.format_statistics(stats)
|
||||
def get_service_statistics(service_id, today_only):
|
||||
# today_only flag is used by the send page to work out if the service will exceed their daily usage by sending a job
|
||||
stats_fn = dao_fetch_todays_stats_for_service if today_only else dao_fetch_stats_for_service
|
||||
stats = stats_fn(service_id)
|
||||
return statistics.format_statistics(stats)
|
||||
|
||||
|
||||
def get_detailed_services(start_date, end_date, only_active=False, include_from_test_key=True):
|
||||
@@ -756,12 +746,6 @@ def is_service_name_unique():
|
||||
return jsonify(result=result), 200
|
||||
|
||||
|
||||
@service_blueprint.route('/<uuid:service_id>/data-retention/notification-type/<notification_type>', methods=['GET'])
|
||||
def get_data_retention_for_service_notification_type(service_id, notification_type):
|
||||
data_retention = fetch_service_data_retention_by_notification_type(service_id, notification_type)
|
||||
return jsonify(data_retention.serialize()), 200
|
||||
|
||||
|
||||
@service_blueprint.route('/<uuid:service_id>/data-retention', methods=['GET'])
|
||||
def get_data_retention_for_service(service_id):
|
||||
data_retention_list = fetch_service_data_retention(service_id)
|
||||
|
||||
Reference in New Issue
Block a user