todo_chatbot / src /models /task_group.py
Awais68
Deploy FastAPI backend with MCP and OpenAI agents
cccf200
Raw
History Blame Contribute Delete
2.77 kB
"""
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]