Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Open-Inflation/endpoint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

10 Commits

Repository files navigation

endpoint

Read-only HTTP API over catalog database generated by converter.

Install

python3 -m venv .venv
./.venv/bin/pip install -r requirements.txt

Run

export ENDPOINT_CATALOG_DB='sqlite:///../converter/data/catalog.db'
./.venv/bin/python main.py

Public endpoints

  • GET /healthz
  • GET /products
  • GET /products/count
  • GET /products/{canonical_product_id}
  • GET /products/{canonical_product_id}/sources
  • GET /products/{canonical_product_id}/snapshots
  • GET /products/{canonical_product_id}/dynamics
  • GET /products/common/count
  • GET /categories
  • GET /categories/{category_id}
  • GET /settlements
  • GET /settlements/{settlement_id}
  • GET /sync/cursors

All routes are read-only (GET only).

Products count endpoint

GET /products/count

Query params:

  • store (repeatable): фильтр по магазину (parser_name)
  • region (repeatable): фильтр по региону (catalog_settlements.region_normalized/region)

Response:

  • products_count: количество уникальных товаров (COUNT(DISTINCT canonical_product_id))

Common products count endpoint

GET /products/common/count

Query params:

  • scope: stores | regions
  • store (repeatable): optional for scope=stores and scope=regions; если не передан при scope=stores, берутся все магазины
  • region (repeatable): optional filter for scope=stores; for scope=regions limits comparison to selected regions

Dynamics endpoint

GET /products/{canonical_product_id}/dynamics

Required query params:

  • parser_name
  • source_id
  • field: price, discount_price, loyal_price, available_count
  • date_from (ISO8601 with timezone)
  • date_to (ISO8601 with timezone)
  • interval: 1h, 6h, 1d, 7d

Response shape:

{
 "dates": ["2026年02月01日T00:00:00Z", "2026年02月02日T00:00:00Z"],
 "values": [99.9, null],
 "meta": {
 "canonical_product_id": "prod-1",
 "parser_name": "fixprice",
 "source_id": "receiver:run-1:1",
 "field": "price",
 "interval": "1d",
 "date_from": "2026年02月01日T00:00:00Z",
 "date_to": "2026年02月02日T23:59:59Z"
 }
}

dynamics учитывает интервальный контракт converter: если у snapshot есть valid_from_at/valid_to_at, значение распространяется на весь интервал. Для старых данных без этих колонок используется observed_at.

Recommended DB index

CREATE INDEX idx_catalog_snapshots_series_interval
ON catalog_product_snapshots(
 canonical_product_id,
 parser_name,
 source_id,
 valid_from_at,
 valid_to_at,
 observed_at
);

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /