from datetime import datetime from typing import Optional from pydantic import BaseModel, Field from app.models.task import TaskPriority, TaskStatus class TaskBase(BaseModel): """Base model for task schema.""" title: str = Field(..., min_length=1, max_length=255, description="Task title") description: Optional[str] = Field(None, description="Task description") status: TaskStatus = Field(default=TaskStatus.TODO, description="Task status") priority: TaskPriority = Field(default=TaskPriority.MEDIUM, description="Task priority") due_date: Optional[datetime] = Field(None, description="Due date") completed: bool = Field(default=False, description="Whether the task is completed") class TaskCreate(TaskBase): """Schema for creating a new task.""" pass class TaskUpdate(BaseModel): """Schema for updating an existing task.""" title: Optional[str] = Field(None, min_length=1, max_length=255, description="Task title") description: Optional[str] = Field(None, description="Task description") status: Optional[TaskStatus] = Field(None, description="Task status") priority: Optional[TaskPriority] = Field(None, description="Task priority") due_date: Optional[datetime] = Field(None, description="Due date") completed: Optional[bool] = Field(None, description="Whether the task is completed") class TaskInDB(TaskBase): """Schema for task in database.""" id: int created_at: datetime updated_at: datetime class Config: """Configuration for the model.""" orm_mode = True from_attributes = True class Task(TaskInDB): """Schema for task response.""" pass