Add break time feature to schedule blocks
- Admin: per-block "Break Time" checkbox + duration (min) setting; new Break Activities section (global list, same pattern as Morning Routine) - Dashboard: break timer section appears on blocks with break enabled; Start/Pause/Resume/Reset controls work independently of the main timer - TV: left column switches to amber break badge + countdown during break; center column shows configurable Break Activities list - Backend: break_time_enabled/break_time_minutes columns on schedule_blocks (auto-migrated on startup); break_activity_items table + CRUD router; break timer events (break_start/pause/resume/reset) stored as TimerEvents and broadcast via WebSocket; break_activities included in dashboard snapshot and session_update broadcast Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@ from app.models.schedule import ScheduleTemplate, ScheduleBlock
|
||||
from app.models.session import DailySession, TimerEvent, TimerEventType
|
||||
from app.models.activity import ActivityLog
|
||||
from app.models.morning_routine import MorningRoutineItem
|
||||
from app.models.break_activity import BreakActivityItem
|
||||
from app.models.strike import StrikeEvent
|
||||
|
||||
__all__ = [
|
||||
@@ -23,5 +24,6 @@ __all__ = [
|
||||
"TimerEventType",
|
||||
"ActivityLog",
|
||||
"MorningRoutineItem",
|
||||
"BreakActivityItem",
|
||||
"StrikeEvent",
|
||||
]
|
||||
|
||||
15
backend/app/models/break_activity.py
Normal file
15
backend/app/models/break_activity.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from sqlalchemy import ForeignKey, Integer, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
from app.models.base import Base
|
||||
|
||||
|
||||
class BreakActivityItem(Base):
|
||||
__tablename__ = "break_activity_items"
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
||||
user_id: Mapped[int] = mapped_column(ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
|
||||
text: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
order_index: Mapped[int] = mapped_column(Integer, default=0)
|
||||
|
||||
user: Mapped["User"] = relationship("User") # noqa: F821
|
||||
@@ -43,6 +43,8 @@ class ScheduleBlock(Base):
|
||||
label: Mapped[str | None] = mapped_column(String(100), nullable=True) # override subject name
|
||||
notes: Mapped[str | None] = mapped_column(Text, nullable=True)
|
||||
order_index: Mapped[int] = mapped_column(Integer, default=0)
|
||||
break_time_enabled: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
break_time_minutes: Mapped[int | None] = mapped_column(Integer, nullable=True)
|
||||
|
||||
template: Mapped["ScheduleTemplate"] = relationship("ScheduleTemplate", back_populates="blocks")
|
||||
subject: Mapped["Subject | None"] = relationship("Subject", back_populates="schedule_blocks") # noqa: F821
|
||||
|
||||
Reference in New Issue
Block a user