from datetime import datetime from typing import Optional from pydantic import BaseModel, Field # --- Category --- class CategoryBase(BaseModel): name: str class CategoryCreate(CategoryBase): pass class CategoryResponse(CategoryBase): id: int created_at: datetime model_config = {"from_attributes": True} # --- PiggyBank --- class PiggyBankBase(BaseModel): name: str target_amount: float = Field(gt=0) currency: str = "USD" category_id: Optional[int] = None class PiggyBankCreate(PiggyBankBase): pass class PiggyBankUpdate(BaseModel): name: Optional[str] = None target_amount: Optional[float] = Field(default=None, gt=0) currency: Optional[str] = None category_id: Optional[int] = None class PiggyBankResponse(PiggyBankBase): id: int current_amount: float progress_percent: float created_at: datetime updated_at: datetime model_config = {"from_attributes": True} # --- Transaction --- class TransactionCreate(BaseModel): amount: float = Field(ne=0) description: Optional[str] = None class TransactionResponse(BaseModel): id: int piggy_bank_id: int amount: float description: Optional[str] created_at: datetime model_config = {"from_attributes": True}