Spaces:
Sleeping
Sleeping
| """ | |
| TaskGroup model for storing grouped tasks. | |
| """ | |
| from typing import Optional, List | |
| from datetime import datetime | |
| from sqlmodel import SQLModel, Field, Column, JSON | |
| class TaskGroup(SQLModel, table=True): | |
| """Task group entity for organizing related tasks.""" | |
| __tablename__ = "task_groups" | |
| id: Optional[int] = Field(default=None, primary_key=True) | |
| user_id: int = Field(foreign_key="users.id", index=True) | |
| # Group information | |
| name: str = Field(max_length=100) | |
| description: Optional[str] = Field(default=None, max_length=500) | |
| category: str = Field(max_length=50, index=True) # shopping, work, personal, health, finance, home, learning | |
| # Tasks in this group | |
| task_ids: List[int] = Field(sa_column=Column(JSON)) | |
| # Metadata | |
| color: Optional[str] = Field(default=None, max_length=7) # Hex color for UI display | |
| icon: Optional[str] = Field(default=None, max_length=50) # Icon name for UI display | |
| sort_order: int = Field(default=0) # Display order | |
| # Statistics | |
| total_tasks: int = Field(default=0) | |
| completed_tasks: int = Field(default=0) | |
| # Timestamps | |
| created_at: datetime = Field(default_factory=datetime.utcnow) | |
| updated_at: datetime = Field(default_factory=datetime.utcnow) | |
| class TaskGroupCreate(SQLModel): | |
| """Schema for creating a new task group.""" | |
| name: str = Field(max_length=100, min_length=1) | |
| description: Optional[str] = Field(default=None, max_length=500) | |
| category: str = Field(max_length=50) | |
| task_ids: List[int] = [] | |
| color: Optional[str] = Field(default=None, max_length=7) | |
| icon: Optional[str] = Field(default=None, max_length=50) | |
| class TaskGroupUpdate(SQLModel): | |
| """Schema for updating a task group.""" | |
| name: Optional[str] = Field(default=None, max_length=100, min_length=1) | |
| description: Optional[str] = Field(default=None, max_length=500) | |
| category: Optional[str] = Field(default=None, max_length=50) | |
| task_ids: Optional[List[int]] = None | |
| color: Optional[str] = Field(default=None, max_length=7) | |
| icon: Optional[str] = Field(default=None, max_length=50) | |
| sort_order: Optional[int] = None | |
| class TaskGroupResponse(SQLModel): | |
| """Schema for task group response.""" | |
| id: int | |
| user_id: int | |
| name: str | |
| description: Optional[str] | |
| category: str | |
| task_ids: List[int] | |
| color: Optional[str] | |
| icon: Optional[str] | |
| sort_order: int | |
| total_tasks: int | |
| completed_tasks: int | |
| created_at: datetime | |
| updated_at: datetime | |
| class TaskGroupStats(SQLModel): | |
| """Schema for task group statistics.""" | |
| group_id: int | |
| group_name: str | |
| total_tasks: int | |
| completed_tasks: int | |
| pending_tasks: int | |
| completion_rate: float # Percentage 0-100 | |
| last_activity: Optional[datetime] | |