from pydantic import BaseModel, Field from datetime import datetime from typing import Optional class BookBase(BaseModel): title: str = Field(..., min_length=1, max_length=255) author: str = Field(..., min_length=1, max_length=255) isbn: str = Field(..., min_length=10, max_length=13) description: Optional[str] = None price: float = Field(..., gt=0) category: str = Field(..., min_length=1, max_length=100) publisher: Optional[str] = None publication_date: Optional[datetime] = None pages: Optional[int] = Field(None, gt=0) language: str = Field(default="English", max_length=50) class BookCreate(BookBase): pass class BookUpdate(BaseModel): title: Optional[str] = Field(None, min_length=1, max_length=255) author: Optional[str] = Field(None, min_length=1, max_length=255) isbn: Optional[str] = Field(None, min_length=10, max_length=13) description: Optional[str] = None price: Optional[float] = Field(None, gt=0) category: Optional[str] = Field(None, min_length=1, max_length=100) publisher: Optional[str] = None publication_date: Optional[datetime] = None pages: Optional[int] = Field(None, gt=0) language: Optional[str] = Field(None, max_length=50) is_active: Optional[bool] = None class BookResponse(BookBase): id: int is_active: bool created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True