from datetime import datetime from typing import Optional from pydantic import BaseModel, Field class TagBase(BaseModel): name: str = Field(..., min_length=1, max_length=50, description="Tag name") color: str = Field( default="#3B82F6", pattern=r"^#[0-9A-Fa-f]{6}$", description="Hex color code" ) class TagCreate(TagBase): pass class TagUpdate(BaseModel): name: Optional[str] = Field( None, min_length=1, max_length=50, description="Tag name" ) color: Optional[str] = Field( None, pattern=r"^#[0-9A-Fa-f]{6}$", description="Hex color code" ) class Tag(TagBase): id: int created_at: datetime class Config: from_attributes = True class TagListResponse(BaseModel): items: list[Tag] total: int