@@ -0,0 +1,72 @@
|
||||
from datetime import timedelta
|
||||
|
||||
from flask import Blueprint, jsonify, request
|
||||
|
||||
from app.routes.auth_decorators import require_auth
|
||||
from app.services.feed_quality.evaluator import reevaluate_feed_alerts_for_period
|
||||
from app.services.feed_quality.query import feed_alerts_summary, list_feed_alerts
|
||||
from app.services.feed_quality.settings_store import (
|
||||
normalize_settings,
|
||||
save_feed_quality_settings,
|
||||
settings_for_api,
|
||||
)
|
||||
from app.timeutil import utc_now_naive
|
||||
|
||||
bp = Blueprint("feed_quality", __name__, url_prefix="/api/feed-quality")
|
||||
|
||||
|
||||
@bp.get("/settings")
|
||||
@require_auth
|
||||
def get_settings():
|
||||
return jsonify(settings_for_api())
|
||||
|
||||
|
||||
@bp.put("/settings")
|
||||
@require_auth
|
||||
def put_settings():
|
||||
body = request.get_json(silent=True) or {}
|
||||
partial = body.get("settings") if isinstance(body.get("settings"), dict) else body
|
||||
try:
|
||||
saved = save_feed_quality_settings(normalize_settings(partial))
|
||||
except (TypeError, ValueError) as exc:
|
||||
return jsonify({"error": True, "message": str(exc)}), 400
|
||||
|
||||
today = utc_now_naive().date()
|
||||
week_ago = today - timedelta(days=7)
|
||||
reevaluated = reevaluate_feed_alerts_for_period(
|
||||
date_from=week_ago.isoformat(),
|
||||
date_to=today.isoformat(),
|
||||
limit=500,
|
||||
)
|
||||
return jsonify({"saved": True, "settings": saved, "reevaluatedReports": reevaluated})
|
||||
|
||||
|
||||
@bp.get("/alerts/summary")
|
||||
@require_auth
|
||||
def alerts_summary():
|
||||
return jsonify(
|
||||
feed_alerts_summary(
|
||||
date_from=request.args.get("date_from"),
|
||||
date_to=request.args.get("date_to"),
|
||||
dispenser_id=request.args.get("dispenser_id"),
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@bp.get("/alerts")
|
||||
@require_auth
|
||||
def alerts_list():
|
||||
try:
|
||||
limit = int(request.args.get("limit", 200))
|
||||
except (TypeError, ValueError):
|
||||
limit = 200
|
||||
return jsonify(
|
||||
list_feed_alerts(
|
||||
date_from=request.args.get("date_from"),
|
||||
date_to=request.args.get("date_to"),
|
||||
severity=request.args.get("severity"),
|
||||
event_type=request.args.get("event_type"),
|
||||
dispenser_id=request.args.get("dispenser_id"),
|
||||
limit=limit,
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user