import uuid from datetime import datetime from pydantic import BaseModel, field_validator class BudgetCreate(BaseModel): category_id: uuid.UUID month: str # YYYY-MM limit_cents: int @field_validator("limit_cents") @classmethod def limit_positive(cls, v: int) -> int: if v <= 0: raise ValueError("limit_cents must be positive") return v @field_validator("month") @classmethod def month_format(cls, v: str) -> str: parts = v.split("-") if len(parts) != 2 or not all(p.isdigit() for p in parts): raise ValueError("month must be in YYYY-MM format") return v class BudgetUpdate(BaseModel): limit_cents: int @field_validator("limit_cents") @classmethod def limit_positive(cls, v: int) -> int: if v <= 0: raise ValueError("limit_cents must be positive") return v class BudgetResponse(BaseModel): id: uuid.UUID category_id: uuid.UUID category_name: str category_color: str | None month: str limit_cents: int spent_cents: int remaining_cents: int created_at: datetime updated_at: datetime model_config = {"from_attributes": True}