from typing import Any
from pydantic import BaseModel, Field
from openfoodfacts_proxy.models.search_a_licious.distribution_chart_type import DistributionChartType
from openfoodfacts_proxy.models.search_a_licious.scatter_chart_type import ScatterChartType
class SearchParameters(BaseModel):
"""Common Search-a-licious POST parameters."""
q: str | None = Field(
default=None,
description=(
"The search query. It supports Lucene query syntax and falls back to full text search for unparsed terms."
),
)
langs: list[str] = Field(
default_factory=lambda: ["en"],
description="Languages to support during search, ordered by preference.",
)
page_size: int = Field(default=10, description="Number of results to return per page.")
page: int = Field(default=1, ge=1, description="Page to request, starting at 1.")
fields: list[str] | None = Field(
default=None,
description="List of fields to include in the response. All other fields are ignored.",
)
sort_by: str | None = Field(
default=None,
description="Field name or sort script to use when ordering results.",
)
facets: list[str] | None = Field(
default=None,
description="Facet names to return in the response.",
)
charts: list[DistributionChartType | ScatterChartType] | None = Field(
default=None,
description="Vega chart descriptions to include in the response.",
)
sort_params: dict[str, Any] | None = Field(
default=None,
description="Additional parameters used by script-based sorting.",
)
index_id: str | None = Field(
default=None,
description="Index identifier to query. If omitted, the default index is used.",
)