from flask import Blueprint, current_app, jsonify, request from app.dao.fact_notification_status_dao import fetch_notification_statuses_for_job from app.dao.jobs_dao import dao_get_notification_outcomes_for_job from app.dao.uploads_dao import dao_get_uploads_by_service_id from app.errors import register_errors from app.utils import check_suspicious_id, midnight_n_days_ago, pagination_links upload_blueprint = Blueprint( "upload", __name__, url_prefix="/service//upload" ) register_errors(upload_blueprint) @upload_blueprint.route("", methods=["GET"]) def get_uploads_by_service(service_id): check_suspicious_id(service_id) return jsonify( **get_paginated_uploads( service_id, request.args.get("limit_days", type=int), request.args.get("page", type=int), ) ) def get_paginated_uploads(service_id, limit_days, page): pagination = dao_get_uploads_by_service_id( service_id, limit_days=limit_days, page=page, page_size=current_app.config["PAGE_SIZE"], ) uploads = pagination.items data = [] for upload in uploads: upload_dict = { "id": upload.id, "original_file_name": upload.original_file_name, "notification_count": upload.notification_count, "created_at": ( upload.scheduled_for.strftime("%Y-%m-%d %H:%M:%S") if upload.scheduled_for else upload.created_at.strftime("%Y-%m-%d %H:%M:%S") ), "upload_type": upload.upload_type, "template_type": upload.template_type, "recipient": upload.recipient, } if upload.upload_type == "job": start = upload.processing_started if start is None: statistics = [] elif start.replace(tzinfo=None) < midnight_n_days_ago(3): # ft_notification_status table statistics = fetch_notification_statuses_for_job(upload.id) else: # notifications table statistics = dao_get_notification_outcomes_for_job( service_id, upload.id ) upload_dict["statistics"] = [ {"status": statistic.status, "count": statistic.count} for statistic in statistics ] else: upload_dict["statistics"] = [] data.append(upload_dict) return { "data": data, "page_size": pagination.per_page, "total": pagination.total, "links": pagination_links( pagination, ".get_uploads_by_service", service_id=service_id ), }