from datetime import datetime from typing import Optional from pydantic import BaseModel, Field class CategoryBase(BaseModel): name: str = Field(..., min_length=1, max_length=100) description: Optional[str] = Field(None, max_length=500) color: Optional[str] = Field(None, regex=r"^#[0-9A-Fa-f]{6}$") class CategoryCreate(CategoryBase): pass class CategoryUpdate(BaseModel): name: Optional[str] = Field(None, min_length=1, max_length=100) description: Optional[str] = Field(None, max_length=500) color: Optional[str] = Field(None, regex=r"^#[0-9A-Fa-f]{6}$") class Category(CategoryBase): id: int created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True