mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-30 06:21:50 -05:00
Update method to delete notifications that are a week old, to look at the days of retention set for the service.
If the service does not have the days of retention set, then use 7 days. Added a method to get days of retention for a service and notificaiton type
This commit is contained in:
@@ -42,7 +42,8 @@ from app.models import (
|
||||
NOTIFICATION_PERMANENT_FAILURE,
|
||||
NOTIFICATION_SENT,
|
||||
SMS_TYPE,
|
||||
EMAIL_TYPE
|
||||
EMAIL_TYPE,
|
||||
ServiceDataRetention
|
||||
)
|
||||
|
||||
from app.dao.dao_utils import transactional
|
||||
@@ -310,10 +311,23 @@ 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(
|
||||
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,6 +20,14 @@ 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,
|
||||
|
||||
Reference in New Issue
Block a user