feat: add Pomodoro timer functionality with logging and project goals
- Implemented Pomodoro timer in the app, allowing users to start, pause, and stop sessions. - Added context for managing Pomodoro state and actions. - Integrated time logging for completed sessions to track productivity. - Enhanced project settings to include time goals and Pomodoro settings. - Created migration scripts to update the database schema for new project fields and time logs. - Updated UI components to display Pomodoro controls and project time summaries. - Added category filtering for projects in the project list view.
This commit is contained in:
@@ -54,6 +54,11 @@ class ProjectBase(BaseModel):
|
||||
|
||||
class ProjectCreate(ProjectBase):
|
||||
statuses: Optional[List[str]] = None
|
||||
category: Optional[str] = None
|
||||
weekly_hours_goal: Optional[int] = None
|
||||
total_hours_goal: Optional[int] = None
|
||||
pomodoro_work_minutes: Optional[int] = None
|
||||
pomodoro_break_minutes: Optional[int] = None
|
||||
|
||||
|
||||
class ProjectUpdate(BaseModel):
|
||||
@@ -61,12 +66,22 @@ class ProjectUpdate(BaseModel):
|
||||
description: Optional[str] = None
|
||||
statuses: Optional[List[str]] = None
|
||||
is_archived: Optional[bool] = None
|
||||
category: Optional[str] = None
|
||||
weekly_hours_goal: Optional[int] = None
|
||||
total_hours_goal: Optional[int] = None
|
||||
pomodoro_work_minutes: Optional[int] = None
|
||||
pomodoro_break_minutes: Optional[int] = None
|
||||
|
||||
|
||||
class Project(ProjectBase):
|
||||
id: int
|
||||
statuses: List[str]
|
||||
is_archived: bool
|
||||
category: Optional[str] = None
|
||||
weekly_hours_goal: Optional[int] = None
|
||||
total_hours_goal: Optional[int] = None
|
||||
pomodoro_work_minutes: Optional[int] = None
|
||||
pomodoro_break_minutes: Optional[int] = None
|
||||
created_at: datetime
|
||||
updated_at: datetime
|
||||
|
||||
@@ -105,3 +120,30 @@ class ImportResult(BaseModel):
|
||||
project_id: int
|
||||
project_name: str
|
||||
tasks_created: int
|
||||
|
||||
|
||||
# TimeLog Schemas
|
||||
class TimeLogCreate(BaseModel):
|
||||
minutes: int
|
||||
note: Optional[str] = None
|
||||
session_type: str = "manual" # 'pomodoro' | 'manual'
|
||||
|
||||
|
||||
class TimeLog(BaseModel):
|
||||
id: int
|
||||
task_id: int
|
||||
minutes: int
|
||||
note: Optional[str] = None
|
||||
session_type: str
|
||||
logged_at: datetime
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
|
||||
class ProjectTimeSummary(BaseModel):
|
||||
total_minutes: int
|
||||
pomodoro_minutes: int
|
||||
manual_minutes: int
|
||||
weekly_minutes: int
|
||||
weekly_hours_goal: Optional[int] = None
|
||||
total_hours_goal: Optional[int] = None
|
||||
|
||||
Reference in New Issue
Block a user