Update dashboard to handle newsletter send status and redirect accordingly

- Added logic to retrieve and display the send status and message on the dashboard.
- Modified the send_now function to redirect to the dashboard with query parameters for status and message.
- Removed redundant context updates in the send_now function for cleaner code.
This commit is contained in:
smueller
2026-07-07 15:44:37 +02:00
parent 3d0f5e4f04
commit 0e37dac816

View File

@@ -2,6 +2,7 @@ import asyncio
import logging import logging
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from urllib.parse import urlencode
from pydantic import ValidationError from pydantic import ValidationError
@@ -337,6 +338,10 @@ async def _generate_newsletter(
@app.get("/dashboard", response_class=HTMLResponse) @app.get("/dashboard", response_class=HTMLResponse)
async def dashboard(request: Request, db: Session = Depends(get_db), current_user: User = Depends(get_current_user)): async def dashboard(request: Request, db: Session = Depends(get_db), current_user: User = Depends(get_current_user)):
context = _base_context(request, current_user, db) context = _base_context(request, current_user, db)
send_status = request.query_params.get("send_status")
send_result = None
if send_status:
send_result = {"status": send_status, "message": request.query_params.get("send_msg", "")}
context.update({ context.update({
"articles": [], "articles": [],
"articles_new": [], "articles_new": [],
@@ -347,7 +352,7 @@ async def dashboard(request: Request, db: Session = Depends(get_db), current_use
"subject": "", "subject": "",
"filters": _empty_filters(), "filters": _empty_filters(),
"wiki_error": None, "wiki_error": None,
"send_result": None, "send_result": send_result,
}) })
logs = db.query(SendLog).order_by(SendLog.created_at.desc()).limit(20).all() logs = db.query(SendLog).order_by(SendLog.created_at.desc()).limit(20).all()
context["send_logs"] = logs context["send_logs"] = logs
@@ -463,31 +468,8 @@ async def send_now(
status_code, detail = send_newsletter(db, gen["subject"], gen["raw_html"], gen["plain_text"], recipients, scheduled=False) status_code, detail = send_newsletter(db, gen["subject"], gen["raw_html"], gen["plain_text"], recipients, scheduled=False)
send_result = {"status": status_code, "message": detail} send_result = {"status": status_code, "message": detail}
context = _base_context(request, current_user, db) query = urlencode({"send_status": send_result["status"], "send_msg": send_result["message"]})
context.update( return RedirectResponse(url=f"/dashboard?{query}", status_code=status.HTTP_303_SEE_OTHER)
{
"articles": gen["articles"],
"articles_new": gen["articles_new"],
"articles_edited": gen["articles_edited"],
"raw_html": gen["raw_html"],
"outlook_html": gen["outlook_html"],
"plain_text": gen["plain_text"],
"subject": gen["subject"],
"filters": {
"days": days,
"period": period,
"article_type": article_type,
"category": category,
"display": display,
"editor_tip": editor_tip,
"highlights": highlights,
},
"send_logs": db.query(SendLog).order_by(SendLog.created_at.desc()).limit(20).all(),
"wiki_error": gen["wiki_error"],
"send_result": send_result,
}
)
return _render(request, "dashboard.html", context)
@app.post("/admin/smtp") @app.post("/admin/smtp")