from datetime import datetime from typing import Optional from pydantic import BaseModel, Field from app.models.task import TaskPriority, TaskStatus # Base schema with common attributes class TaskBase(BaseModel): 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="Task due date") # Schema for creating a new task class TaskCreate(TaskBase): pass # Schema for updating an existing task class TaskUpdate(BaseModel): 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="Task due date") is_deleted: Optional[bool] = Field(None, description="Mark task as deleted") # Schema for task responses class TaskInDB(TaskBase): id: int created_at: datetime updated_at: datetime completed_at: Optional[datetime] = None is_deleted: bool = False class Config: from_attributes = True # for Pydantic v2 compatibility # Schema for task list responses class Task(TaskInDB): pass