Include morning routine in session_update WebSocket broadcast
_broadcast_session was missing morning_routine in its payload, so the TV dashboard's applySnapshot reset the list to [] whenever a session started or updated via WebSocket. A page refresh was required to restore the items since only the REST dashboard endpoint included them. Now queries MorningRoutineItem via child→user_id and adds the list to every session_update broadcast, matching the dashboard snapshot. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@ from sqlalchemy.orm import selectinload
|
||||
|
||||
from app.dependencies import get_db, get_current_user
|
||||
from app.models.child import Child
|
||||
from app.models.morning_routine import MorningRoutineItem
|
||||
from app.models.schedule import ScheduleBlock, ScheduleTemplate
|
||||
from app.models.subject import Subject # noqa: F401 — needed for selectinload chain
|
||||
from app.models.session import DailySession, TimerEvent
|
||||
@@ -68,6 +69,18 @@ async def _broadcast_session(db: AsyncSession, session: DailySession) -> None:
|
||||
)
|
||||
completed_ids = [e.block_id for e in events_result.scalars().all() if e.block_id]
|
||||
|
||||
# Fetch morning routine items via child → user_id
|
||||
child_result = await db.execute(select(Child).where(Child.id == session.child_id))
|
||||
child = child_result.scalar_one_or_none()
|
||||
morning_routine: list[str] = []
|
||||
if child:
|
||||
routine_result = await db.execute(
|
||||
select(MorningRoutineItem)
|
||||
.where(MorningRoutineItem.user_id == child.user_id)
|
||||
.order_by(MorningRoutineItem.order_index, MorningRoutineItem.id)
|
||||
)
|
||||
morning_routine = [item.text for item in routine_result.scalars().all()]
|
||||
|
||||
payload = {
|
||||
"event": "session_update",
|
||||
"session": {
|
||||
@@ -81,6 +94,7 @@ async def _broadcast_session(db: AsyncSession, session: DailySession) -> None:
|
||||
"completed_block_ids": completed_ids,
|
||||
"day_start_time": day_start_time,
|
||||
"day_end_time": day_end_time,
|
||||
"morning_routine": morning_routine,
|
||||
}
|
||||
await manager.broadcast(session.child_id, payload)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user