from datetime import datetime from typing import Optional from sqlmodel import SQLModel, Field, Relationship class TaskBase(SQLModel): title: str = Field(index=True, min_length=1, max_length=200) description: Optional[str] = Field(default=None, max_length=2000) priority: str = Field(default="medium", index=True) # low, medium, high class Task(TaskBase, table=True): id: Optional[int] = Field(default=None, primary_key=True) user_id: int = Field(foreign_key="user.id", index=True) completed: bool = Field(default=False, index=True) created_at: datetime = Field(default_factory=datetime.utcnow, index=True) updated_at: datetime = Field(default_factory=datetime.utcnow) completed_at: Optional[datetime] = None user: "User" = Relationship(back_populates="tasks") class TaskCreate(TaskBase): pass class TaskUpdate(SQLModel): title: Optional[str] = Field(default=None, min_length=1, max_length=200) description: Optional[str] = Field(default=None, max_length=2000) priority: Optional[str] = None completed: Optional[bool] = None class TaskRead(TaskBase): id: int user_id: int completed: bool priority: str created_at: datetime updated_at: datetime completed_at: Optional[datetime]