You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
25 lines
1003 B
Python
25 lines
1003 B
Python
# backend/app/worker/jobs/digest.py — 능동 다이제스트/브리핑 (집계만, 새 사실 없음) (phase-14)
|
|
from sqlmodel import Session, select
|
|
|
|
from ...automation.event_bus import bus
|
|
from ...models import Approval, CalEvent, Task, TaskStatus
|
|
|
|
DIGEST_TIMES = ["09:00", "13:00", "18:30"]
|
|
|
|
|
|
def run_digest(session: Session, slot: str = "09:00") -> dict:
|
|
"""예약 시각 다이제스트 → 알림 벨 + 능동 브리핑. 작업/일정/결재 요약(집계)."""
|
|
open_tasks = sum(1 for t in session.exec(select(Task)).all() if t.status != TaskStatus.done)
|
|
events = len(session.exec(select(CalEvent)).all())
|
|
pending = sum(1 for a in session.exec(select(Approval)).all() if a.status == "pending")
|
|
count = open_tasks + pending
|
|
summary = {
|
|
"slot": slot,
|
|
"open_tasks": open_tasks,
|
|
"events": events,
|
|
"pending_approvals": pending,
|
|
"count": count,
|
|
}
|
|
bus.publish("digest.generated", {"time": slot, "count": count})
|
|
return summary
|