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.dependencies import get_db, get_current_user
|
||||||
from app.models.child import Child
|
from app.models.child import Child
|
||||||
|
from app.models.morning_routine import MorningRoutineItem
|
||||||
from app.models.schedule import ScheduleBlock, ScheduleTemplate
|
from app.models.schedule import ScheduleBlock, ScheduleTemplate
|
||||||
from app.models.subject import Subject # noqa: F401 — needed for selectinload chain
|
from app.models.subject import Subject # noqa: F401 — needed for selectinload chain
|
||||||
from app.models.session import DailySession, TimerEvent
|
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]
|
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 = {
|
payload = {
|
||||||
"event": "session_update",
|
"event": "session_update",
|
||||||
"session": {
|
"session": {
|
||||||
@@ -81,6 +94,7 @@ async def _broadcast_session(db: AsyncSession, session: DailySession) -> None:
|
|||||||
"completed_block_ids": completed_ids,
|
"completed_block_ids": completed_ids,
|
||||||
"day_start_time": day_start_time,
|
"day_start_time": day_start_time,
|
||||||
"day_end_time": day_end_time,
|
"day_end_time": day_end_time,
|
||||||
|
"morning_routine": morning_routine,
|
||||||
}
|
}
|
||||||
await manager.broadcast(session.child_id, payload)
|
await manager.broadcast(session.child_id, payload)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user