Files
pi-weekly-newspaper/src/routes/dashboard.py

48 lines
1.5 KiB
Python
Raw Normal View History

from datetime import date, timedelta
from flask import Blueprint, render_template, redirect, url_for, flash
from app import db
from src.models import Article, Issue
dashboard_bp = Blueprint("dashboard", __name__)
@dashboard_bp.route("/")
def index():
today = date.today()
week_start = today - timedelta(days=today.weekday())
week_end = week_start + timedelta(days=6)
articles_this_week = Article.query.filter(
Article.pub_date >= str(week_start),
Article.pub_date < str(week_end + timedelta(days=1)),
).count()
total_articles = Article.query.count()
total_issues = Issue.query.count()
latest_issue = Issue.query.order_by(Issue.created_at.desc()).first()
from flask import current_app
scheduler_mgr = current_app.config.get("SCHEDULER_MANAGER")
scheduler_status = scheduler_mgr.get_status() if scheduler_mgr else {"running": False}
return render_template(
"dashboard.html",
articles_this_week=articles_this_week,
total_articles=total_articles,
total_issues=total_issues,
latest_issue=latest_issue,
scheduler_status=scheduler_status,
)
@dashboard_bp.route("/fetch-now", methods=["POST"])
def fetch_now():
from src.fetcher import fetch_and_cache_articles
result = fetch_and_cache_articles()
if result.get("error"):
flash(f"Fetch error: {result['error']}", "error")
else:
flash(f"Fetched {result['new']} new articles, {result['skipped']} skipped.")
return redirect(url_for("dashboard.index"))