Public Access
feat: wire step_reminder into runner, admin, and scheduler (Fri 16:00 PT)
This commit is contained in:
@@ -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,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),
|
||||||
|
|||||||
@@ -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,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"]
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user