"""Pydantic schemas for EquipmentGroup (Bundles).""" from __future__ import annotations from typing import TYPE_CHECKING from pydantic import BaseModel, Field if TYPE_CHECKING: from app.schemas.equipment import LocationRef class EquipmentGroupItem(BaseModel): """An item inside a bundle with quantity.""" equipment_id: str name: str | None = None quantity: float = 1.0 model_config = {"from_attributes": True} class EquipmentGroupCreateRequest(BaseModel): """Request body for creating a new equipment group/bundle.""" name: str = Field(..., max_length=255) description: str | None = None daily_rate: float | None = None default_location_id: str | None = None items: list[EquipmentGroupItem] = [] class EquipmentGroupUpdateRequest(BaseModel): """Request body for updating an equipment group.""" name: str | None = Field(None, max_length=255) description: str | None = None daily_rate: float | None = None default_location_id: str | None = None items: list[EquipmentGroupItem] | None = None class EquipmentGroupResponse(BaseModel): """Public equipment group representation.""" id: str account_id: str name: str description: str | None = None daily_rate: float | None = None default_location: LocationRef | None = None items: list[EquipmentGroupItem] = [] created_at: str updated_at: str model_config = {"from_attributes": True} class EquipmentGroupListResponse(BaseModel): """Paginated list of equipment groups.""" items: list[EquipmentGroupResponse] total: int page: int size: int # Need LocationRef for EquipmentGroupResponse from app.schemas.equipment import LocationRef # noqa: E402, F811