from pydantic import BaseModel, Field from typing import Optional from datetime import datetime class TaskCreate(BaseModel): """Schema for creating a new task.""" title: str = Field(..., min_length=1, max_length=200, description="Task title (required)") description: Optional[str] = Field(None, max_length=2000, description="Optional detailed description") class Config: json_schema_extra = { "example": { "title": "Buy groceries", "description": "Milk, eggs, bread, and vegetables" } } class TaskUpdate(BaseModel): """Schema for updating an existing task.""" title: Optional[str] = Field(None, min_length=1, max_length=200, description="Updated task title") description: Optional[str] = Field(None, max_length=2000, description="Updated description") completed: Optional[bool] = Field(None, description="Updated completion status") class Config: json_schema_extra = { "example": { "title": "Buy groceries and cook dinner", "description": "Updated shopping list", "completed": True } } class TaskResponse(BaseModel): """Schema for task response.""" id: int = Field(..., description="Unique task identifier") title: str = Field(..., description="Task title") description: Optional[str] = Field(None, description="Task description") completed: bool = Field(..., description="Whether task is marked as complete") user_id: int = Field(..., description="ID of user who owns this task") created_at: datetime = Field(..., description="Timestamp when task was created") updated_at: datetime = Field(..., description="Timestamp when task was last modified") class Config: from_attributes = True json_schema_extra = { "example": { "id": 1, "title": "Buy groceries", "description": "Milk, eggs, bread", "completed": False, "user_id": 42, "created_at": "2026-02-02T10:30:00Z", "updated_at": "2026-02-02T10:30:00Z" } }