Sort schedule blocks by start time instead of order_index

Backend queries and model relationship now order by time_start.
Frontend also sorts blocks client-side for reliability across all views.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-28 16:22:17 -08:00
parent 3670bc63e7
commit 7346159745
5 changed files with 17 additions and 5 deletions

View File

@@ -20,7 +20,7 @@ class ScheduleTemplate(TimestampMixin, Base):
user: Mapped["User"] = relationship("User", back_populates="schedule_templates") # noqa: F821
child: Mapped["Child | None"] = relationship("Child") # noqa: F821
blocks: Mapped[list["ScheduleBlock"]] = relationship(
"ScheduleBlock", back_populates="template", cascade="all, delete-orphan", order_by="ScheduleBlock.order_index"
"ScheduleBlock", back_populates="template", cascade="all, delete-orphan", order_by="ScheduleBlock.time_start"
)
daily_sessions: Mapped[list["DailySession"]] = relationship( # noqa: F821
"DailySession", back_populates="template"

View File

@@ -50,7 +50,7 @@ async def get_dashboard(child_id: int, db: AsyncSession = Depends(get_db)):
select(ScheduleBlock)
.where(ScheduleBlock.template_id == session.template_id)
.options(selectinload(ScheduleBlock.subject).selectinload(Subject.options))
.order_by(ScheduleBlock.order_index)
.order_by(ScheduleBlock.time_start)
)
blocks = blocks_result.scalars().all()

View File

@@ -28,7 +28,7 @@ async def _broadcast_session(db: AsyncSession, session: DailySession) -> None:
select(ScheduleBlock)
.where(ScheduleBlock.template_id == session.template_id)
.options(selectinload(ScheduleBlock.subject).selectinload(Subject.options))
.order_by(ScheduleBlock.order_index)
.order_by(ScheduleBlock.time_start)
)
blocks = [
{