""" Pydantic schemas for Todo """ from datetime import datetime from pydantic import BaseModel, Field class TodoBase(BaseModel): """ Base Todo schema with shared attributes """ title: str = Field(..., min_length=1, max_length=255, description="The title of the todo item") description: str | None = Field(None, description="Optional detailed description of the todo item") completed: bool = Field(False, description="Whether the todo item is completed") class TodoCreate(TodoBase): """ Schema for creating a new Todo """ pass class TodoUpdate(BaseModel): """ Schema for updating an existing Todo """ title: str | None = Field(None, min_length=1, max_length=255, description="The title of the todo item") description: str | None = Field(None, description="Optional detailed description of the todo item") completed: bool | None = Field(None, description="Whether the todo item is completed") class TodoInDB(TodoBase): """ Schema for Todo as stored in the database """ id: int created_at: datetime updated_at: datetime class Config: """ Pydantic configuration """ from_attributes = True json_encoders = { datetime: lambda v: v.isoformat() } class Todo(TodoInDB): """ Schema for Todo response """ pass