Spaces:
Running
Running
| """Pydantic schemas for Task CRUD operations.""" | |
| from datetime import datetime | |
| from typing import Optional | |
| from pydantic import BaseModel, Field, ConfigDict | |
| class TaskCreate(BaseModel): | |
| """Schema for creating a new task.""" | |
| title: str = Field(..., min_length=1, max_length=200, description="Task title") | |
| description: Optional[str] = Field(None, max_length=1000, description="Task description") | |
| model_config = ConfigDict( | |
| json_schema_extra={ | |
| "example": { | |
| "title": "Buy groceries", | |
| "description": "Milk, eggs, bread" | |
| } | |
| } | |
| ) | |
| class TaskResponse(BaseModel): | |
| """Schema for task response.""" | |
| id: int = Field(..., description="Task ID") | |
| user_id: int = Field(..., description="User ID who owns the task") | |
| title: str = Field(..., description="Task title") | |
| description: Optional[str] = Field(None, description="Task description") | |
| completed: bool = Field(..., description="Task completion status") | |
| created_at: datetime = Field(..., description="Task creation timestamp") | |
| updated_at: datetime = Field(..., description="Task last update timestamp") | |
| model_config = ConfigDict( | |
| from_attributes=True, | |
| json_schema_extra={ | |
| "example": { | |
| "id": 1, | |
| "user_id": 1, | |
| "title": "Buy groceries", | |
| "description": "Milk, eggs, bread", | |
| "completed": False, | |
| "created_at": "2026-01-08T10:00:00Z", | |
| "updated_at": "2026-01-08T10:00:00Z" | |
| } | |
| } | |
| ) | |
| class TaskUpdate(BaseModel): | |
| """Schema for updating a task (PUT - replaces all fields).""" | |
| title: str = Field(..., min_length=1, max_length=200, description="Task title") | |
| description: Optional[str] = Field(None, max_length=1000, description="Task description") | |
| completed: bool = Field(..., description="Task completion status") | |
| model_config = ConfigDict( | |
| json_schema_extra={ | |
| "example": { | |
| "title": "Buy groceries", | |
| "description": "Milk, eggs, bread, cheese", | |
| "completed": False | |
| } | |
| } | |
| ) | |
| class TaskPatch(BaseModel): | |
| """Schema for partially updating a task (PATCH - updates only provided fields).""" | |
| title: Optional[str] = Field(None, min_length=1, max_length=200, description="Task title") | |
| description: Optional[str] = Field(None, max_length=1000, description="Task description") | |
| completed: Optional[bool] = Field(None, description="Task completion status") | |
| model_config = ConfigDict( | |
| json_schema_extra={ | |
| "example": { | |
| "completed": True | |
| } | |
| } | |
| ) | |
| class TaskListResponse(BaseModel): | |
| """Schema for list of tasks response.""" | |
| tasks: list[TaskResponse] = Field(..., description="List of tasks") | |
| total: int = Field(..., description="Total number of tasks") | |
| model_config = ConfigDict( | |
| json_schema_extra={ | |
| "example": { | |
| "tasks": [ | |
| { | |
| "id": 1, | |
| "user_id": 1, | |
| "title": "Buy groceries", | |
| "description": "Milk, eggs, bread", | |
| "completed": False, | |
| "created_at": "2026-01-08T10:00:00Z", | |
| "updated_at": "2026-01-08T10:00:00Z" | |
| } | |
| ], | |
| "total": 1 | |
| } | |
| } | |
| ) | |