Source code for app.domain.products.schemas._products
# SPDX-FileCopyrightText: 2026 Google LLC
# SPDX-License-Identifier: Apache-2.0
from __future__ import annotations
from datetime import datetime # noqa: TC003 — used in handler-visible schema; Litestar OpenAPI needs runtime ref
from typing import Any, Literal
from msgspec import field
from app.lib.schema import CamelizedBaseStruct
StockStatus = Literal["IN_STOCK", "LOW_STOCK", "OUT_OF_STOCK"]
[docs]
class Product(CamelizedBaseStruct, omit_defaults=True):
"""Product entity from database."""
id: int
name: str
price: float
description: str
category: str | None = None
sku: str | None = None
in_stock: bool = True
metadata: dict[str, Any] | None = None
embedding: list[float] | None = None
created_at: datetime | None = None
updated_at: datetime | None = None
[docs]
class Store(CamelizedBaseStruct, omit_defaults=True):
"""Store location entity from database."""
id: int
name: str
address: str
created_at: datetime
updated_at: datetime
city: str | None = None
state: str | None = None
zip: str | None = None
phone: str | None = None
latitude: float | None = None
longitude: float | None = None
timezone: str | None = None
google_place_id: str | None = None
hours: dict[str, Any] | None = None
metadata: dict[str, Any] | None = None
[docs]
class StoreHours(CamelizedBaseStruct, omit_defaults=True):
"""Store hours response contract."""
store_id: int
store_name: str
timezone: str | None = None
hours: dict[str, Any] = field(default_factory=dict)
[docs]
class StoreDistance(Store, omit_defaults=True):
"""Store row plus local coordinate ranking score."""
distance_miles: float = 0.0
distance_score: float | None = None
[docs]
class StoreProductInventory(CamelizedBaseStruct, omit_defaults=True):
"""Store-product inventory row."""
id: int
store_id: int
product_id: int
quantity_available: int
stock_status: StockStatus
pickup_available: bool = True
updated_at: datetime | None = None
[docs]
class ProductAvailability(StoreProductInventory, omit_defaults=True):
"""Product availability row with store and product display fields."""
store_name: str = ""
store_address: str = ""
store_city: str | None = None
store_state: str | None = None
store_zip: str | None = None
latitude: float | None = None
longitude: float | None = None
timezone: str | None = None
google_place_id: str | None = None
product_name: str = ""
product_description: str = ""
product_category: str | None = None
product_sku: str | None = None
product_price: float | None = None
distance_miles: float | None = None
[docs]
class VectorQuery(CamelizedBaseStruct, omit_defaults=True):
"""A user-supplied vector-search query string."""
query: str
[docs]
class ProductMatch(CamelizedBaseStruct, omit_defaults=True):
"""A product row returned by vector similarity search.
Slim projection of `product` (no embedding, no metadata) plus the
`similarity_score` derived in SQL via `1 - VECTOR_DISTANCE(...)`.
"""
id: int
name: str
description: str
price: float
similarity_score: float
store_id: int | None = None
store_name: str | None = None
quantity_available: int | None = None
stock_status: StockStatus | None = None
pickup_available: bool | None = None
[docs]
class VectorDemoMatch(CamelizedBaseStruct, omit_defaults=True):
"""A vector-search hit shaped for the explore-page Panel 1 partial."""
name: str
description: str
price: float
similarity: float
[docs]
class VectorDemo(CamelizedBaseStruct, omit_defaults=True):
"""Full ``POST /api/vector-demo`` payload for SPA / JSON consumers."""
results: list[VectorDemoMatch]
search_time_ms: float
embedding_time_ms: float
oracle_time_ms: float
cache_hit: bool
performance_level: str
debug_timings: dict[str, float]
[docs]
class ExplainPlanRow(CamelizedBaseStruct, omit_defaults=True):
"""A structured operation row parsed from Oracle ``DBMS_XPLAN`` text."""
id: str
operation: str
name: str = ""
rows: str = ""
bytes: str = ""
cost: str = ""
time: str = ""
raw_line: str = ""
is_vector: bool = False
[docs]
class ExplainPlan(CamelizedBaseStruct, omit_defaults=True):
"""Oracle EXPLAIN PLAN output for the vector-search SQL (Panel 2)."""
plan_lines: list[str]
plan_summary: str
plan_rows: list[ExplainPlanRow] = field(default_factory=list)