feat: wire step_reminder into runner, admin, and scheduler (Fri 16:00 PT)

This commit is contained in:
2026-05-08 21:29:53 -07:00
parent d002485c10
commit 9a484d39c3
4 changed files with 11 additions and 3 deletions
+1 -1
View File
@@ -167,7 +167,7 @@ def get_stats(db: Session = Depends(get_db)):
} }
_VALID_STEPS = {"scrape", "generate", "email", "deadline", "finalize"} _VALID_STEPS = {"scrape", "generate", "email", "reminder", "deadline", "finalize"}
@router.get("/orchestrate/status") @router.get("/orchestrate/status")
+7
View File
@@ -7,6 +7,7 @@ Weekly cadence (America/Los_Angeles):
Fri 02:00 — scrape (Lucky weekend prices live by ~midnight) Fri 02:00 — scrape (Lucky weekend prices live by ~midnight)
Fri 05:00 — generate (fresh grocery data) Fri 05:00 — generate (fresh grocery data)
Fri 06:00 — email (per-voter approval links) Fri 06:00 — email (per-voter approval links)
Fri 16:00 — reminder (nudge non-voters, 1h before deadline)
Fri 17:00 — deadline (pending items resolved per family policy) Fri 17:00 — deadline (pending items resolved per family policy)
Fri 18:00 — finalize (shopping-list email) Fri 18:00 — finalize (shopping-list email)
""" """
@@ -45,6 +46,12 @@ scheduler.add_job(
id="weekly_email", id="weekly_email",
name="Weekly email (Fri 06:00 PT)", name="Weekly email (Fri 06:00 PT)",
) )
scheduler.add_job(
lambda: run_step("reminder"),
CronTrigger(day_of_week="fri", hour=16, minute=0, timezone=TZ),
id="weekly_reminder",
name="Weekly reminder (Fri 16:00 PT)",
)
scheduler.add_job( scheduler.add_job(
lambda: run_step("deadline"), lambda: run_step("deadline"),
CronTrigger(day_of_week="fri", hour=17, minute=0, timezone=TZ), CronTrigger(day_of_week="fri", hour=17, minute=0, timezone=TZ),
+2 -1
View File
@@ -14,7 +14,7 @@ from app.database import SessionLocal
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
STEPS = ("scrape", "generate", "email", "deadline", "finalize") STEPS = ("scrape", "generate", "email", "reminder", "deadline", "finalize")
def _current_week_start() -> date: def _current_week_start() -> date:
@@ -55,6 +55,7 @@ def run_step(step_name: str, week_start_date: Optional[date] = None) -> None:
"scrape": s.step_scrape, "scrape": s.step_scrape,
"generate": s.step_generate, "generate": s.step_generate,
"email": s.step_email, "email": s.step_email,
"reminder": s.step_reminder,
"deadline": s.step_deadline, "deadline": s.step_deadline,
"finalize": s.step_finalize, "finalize": s.step_finalize,
} }
+1 -1
View File
@@ -568,7 +568,7 @@ def test_run_week_calls_all_steps(monkeypatch):
) )
from app.services.orchestrator.runner import run_week from app.services.orchestrator.runner import run_week
run_week(WEEK) run_week(WEEK)
assert called == ["scrape", "generate", "email", "deadline", "finalize"] assert called == ["scrape", "generate", "email", "reminder", "deadline", "finalize"]
# --------------------------------------------------------------------------- # ---------------------------------------------------------------------------