New endpoint to return a summary of returned letters for the service.

This commit is contained in:
Rebecca Law
2019-12-09 17:27:18 +00:00
parent c8368d908b
commit 40a0c62926
4 changed files with 87 additions and 13 deletions

View File

@@ -1,5 +1,6 @@
from datetime import datetime
from sqlalchemy import func, desc
from sqlalchemy.dialects.postgresql import insert
from app import db
@@ -7,6 +8,19 @@ from app.dao.dao_utils import transactional
from app.models import Notification, NotificationHistory, ReturnedLetter
def _get_notification_ids_for_references(references):
notification_ids = db.session.query(Notification.id, Notification.service_id).filter(
Notification.reference.in_(references)
).all()
notification_history_ids = db.session.query(NotificationHistory.id, NotificationHistory.service_id).filter(
NotificationHistory.reference.in_(references)
).all()
return notification_ids + notification_history_ids
@transactional
def insert_or_update_returned_letters(references):
data = _get_notification_ids_for_references(references)
@@ -28,13 +42,14 @@ def insert_or_update_returned_letters(references):
db.session.connection().execute(stmt)
def _get_notification_ids_for_references(references):
notification_ids = db.session.query(Notification.id, Notification.service_id).filter(
Notification.reference.in_(references)
def get_returned_letter_summary(service_id):
return db.session.query(
func.count(ReturnedLetter.notification_id).label('returned_letter_count'),
ReturnedLetter.reported_at
).filter(
ReturnedLetter.service_id == service_id,
).group_by(
ReturnedLetter.reported_at
).order_by(
desc(ReturnedLetter.reported_at)
).all()
notification_history_ids = db.session.query(NotificationHistory.id, NotificationHistory.service_id).filter(
NotificationHistory.reference.in_(references)
).all()
return notification_ids + notification_history_ids