Source code for ab.api.models.commodities

"""Commodity models for the ACPortal API."""

from __future__ import annotations

from typing import Optional

from pydantic import Field

from ab.api.models.base import RequestModel, ResponseModel
from ab.api.models.mixins import SearchableRequestMixin


[docs] class Commodity(ResponseModel): """Commodity record — GET /commodity/{id}.""" id: Optional[str] = Field(None, description="Commodity ID") description: Optional[str] = Field(None, description="Commodity description") freight_class: Optional[str] = Field(None, alias="freightClass", description="Freight class") nmfc_code: Optional[str] = Field(None, alias="nmfcCode", description="NMFC code") weight_min: Optional[float] = Field(None, alias="weightMin", description="Minimum weight") weight_max: Optional[float] = Field(None, alias="weightMax", description="Maximum weight")
[docs] class CommodityCreateRequest(RequestModel): """Body for POST /commodity.""" description: Optional[str] = Field(None, description="Commodity description") freight_class: Optional[str] = Field(None, alias="freightClass", description="Freight class") nmfc_code: Optional[str] = Field(None, alias="nmfcCode", description="NMFC code") weight_min: Optional[float] = Field(None, alias="weightMin", description="Minimum weight") weight_max: Optional[float] = Field(None, alias="weightMax", description="Maximum weight")
[docs] class CommodityUpdateRequest(RequestModel): """Body for PUT /commodity/{id}.""" description: Optional[str] = Field(None, description="Commodity description") freight_class: Optional[str] = Field(None, alias="freightClass", description="Freight class") nmfc_code: Optional[str] = Field(None, alias="nmfcCode", description="NMFC code")
[docs] class CommoditySearchRequest(SearchableRequestMixin): """Search filter for POST /commodity/search.""" page: Optional[int] = Field(None, description="Page number") page_size: Optional[int] = Field(None, alias="pageSize", description="Results per page")
[docs] class CommoditySuggestionRequest(SearchableRequestMixin): """Suggestion filter for POST /commodity/suggestions."""
[docs] class CommodityMap(ResponseModel): """Commodity mapping record — GET /commodity-map/{id}.""" id: Optional[str] = Field(None, description="Map ID") custom_name: Optional[str] = Field(None, alias="customName", description="Custom commodity name") commodity_id: Optional[str] = Field(None, alias="commodityId", description="Linked commodity ID")
[docs] class CommodityMapCreateRequest(RequestModel): """Body for POST /commodity-map.""" custom_name: Optional[str] = Field(None, alias="customName", description="Custom commodity name") commodity_id: Optional[str] = Field(None, alias="commodityId", description="Linked commodity ID")
[docs] class CommodityMapUpdateRequest(RequestModel): """Body for PUT /commodity-map/{id}.""" custom_name: Optional[str] = Field(None, alias="customName", description="Custom commodity name") commodity_id: Optional[str] = Field(None, alias="commodityId", description="Linked commodity ID")
[docs] class CommodityMapSearchRequest(SearchableRequestMixin): """Search filter for POST /commodity-map/search.""" page: Optional[int] = Field(None, description="Page number") page_size: Optional[int] = Field(None, alias="pageSize", description="Results per page")