File size: 2,210 Bytes
310260a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 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"
}
}
|