# ozols-s/smart_restock_engine architecture

> Architecture diagram of the GitHub repository ozols-s/smart_restock_engine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ozols-s/smart_restock_engine
- Repository: https://github.com/ozols-s/smart_restock_engine

## Overview

Smart Restock Engine is a Flask inventory and restocking application. Its principal workflow serves dashboard requests, gathers sales, stock, and order data, calculates forecasts and recommended replenishment, and returns results to users. Separate routes and services cover products, orders, suppliers, and analytics. The README documents PostgreSQL and ClickHouse as data stores. Several route and service relationships are supported only by the source index; unsampled implementation details are not inferred.

Main entry points: [`backend/db/connection.py`](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/db/connection.py) (Database connections), [`backend/services/order_service.py`](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/order_service.py) (Order service), [`main.py`](https://github.com/ozols-s/smart_restock_engine/blob/master/main.py) (Flask application), [`backend/services/dashboard_service.py`](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/dashboard_service.py) (Dashboard service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application and routes"]
  node_app["Flask application<br/>[main.py]"]
  node_product_routes["Product routes<br/>[products_routes.py]"]
  node_order_routes["Order routes<br/>[orders_routes.py]"]
  node_supplier_routes["Supplier routes"]
  node_dashboard_routes["Dashboard routes"]
  node_analytics_routes["Analytics routes"]
end

subgraph group_domain["Inventory and decisions"]
  node_product_service["Product service<br/>[product_service.py]"]
  node_order_service["Order service<br/>[order_service.py]"]
  node_supplier_service["Supplier service"]
  node_dashboard_service["Dashboard service"]
end

subgraph group_analytics["Analytics and forecasting"]
  node_forecast["Forecast service"]
  node_recommender["Order recommender"]
  node_product_analytics["Product analytics"]
  node_analytics_service["Analytics service"]
  node_cache["Cache decorator<br/>[cache_decorator.py]"]
end

subgraph group_data["Persistence and configuration"]
  node_crud_repos["CRUD repositories"]
  node_sales_repo["Sales repository"]
  node_stock_repo["Stock repository"]
  node_analytics_repo["Analytics repository"]
  node_connection["Database connections<br/>[connection.py]"]
  node_models["ORM models<br/>[models.py]"]
  node_settings["Application settings<br/>[settings.py]"]
end

node_user(("Dashboard user"))
node_postgres[("PostgreSQL")]
node_clickhouse[("ClickHouse")]

node_user -->|"requests pages"| node_app
node_app -->|"registers routes"| node_dashboard_routes
node_app -->|"registers routes"| node_product_routes
node_app -->|"registers routes"| node_order_routes
node_app -->|"registers routes"| node_supplier_routes
node_app -->|"registers routes"| node_analytics_routes
node_dashboard_routes -->|"requests data"| node_dashboard_service
node_product_routes -->|"requests products"| node_product_service
node_supplier_routes -->|"requests suppliers"| node_supplier_service
node_order_routes -->|"uses service"| node_order_service
node_analytics_routes -->|"uses service"| node_analytics_service
node_dashboard_service -->|"reads sales"| node_sales_repo
node_dashboard_service -->|"reads stock"| node_stock_repo
node_dashboard_service -->|"reads orders"| node_crud_repos
node_dashboard_service -->|"calculates recommendations"| node_order_service
node_dashboard_service -->|"caches summary"| node_cache
node_order_service -->|"reads sales"| node_sales_repo
node_order_service -->|"reads stock"| node_stock_repo
node_order_service -->|"reads orders"| node_crud_repos
node_order_service -->|"requests forecast"| node_forecast
node_order_service -->|"calculates reorder"| node_recommender
node_analytics_service -->|"reads sales"| node_sales_repo
node_analytics_service -->|"uses analytics"| node_product_analytics
node_analytics_service -->|"caches results"| node_cache
node_sales_repo -->|"queries through"| node_connection
node_stock_repo -->|"queries through"| node_connection
node_analytics_repo -->|"uses connection"| node_connection
node_crud_repos -->|"uses connection"| node_connection
node_crud_repos -->|"uses models"| node_models
node_connection -->|"loads settings"| node_settings
node_connection -->|"initializes ORM"| node_postgres
node_connection -->|"creates client"| node_clickhouse
node_models -->|"binds ORM"| node_connection

click node_app "https://github.com/ozols-s/smart_restock_engine/blob/master/main.py"
click node_product_routes "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/products_routes.py"
click node_order_routes "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/orders_routes.py"
click node_supplier_routes "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/suppliers_routes.py"
click node_dashboard_routes "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/dashboard_routes.py"
click node_analytics_routes "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/analytics_routes.py"
click node_product_service "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/product_service.py"
click node_order_service "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/order_service.py"
click node_supplier_service "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/supplier_service.py"
click node_dashboard_service "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/dashboard_service.py"
click node_crud_repos "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/crud_repositories.py"
click node_sales_repo "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/sales_repository.py"
click node_stock_repo "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/stock_repository.py"
click node_analytics_repo "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/analytics_repository.py"
click node_forecast "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/forecast_service.py"
click node_recommender "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/ml/order_recommender.py"
click node_product_analytics "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/ml/product_analytics.py"
click node_analytics_service "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/analytics_service.py"
click node_cache "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/cache/cache_decorator.py"
click node_connection "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/db/connection.py"
click node_models "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/db/models.py"
click node_settings "https://github.com/ozols-s/smart_restock_engine/blob/master/backend/config/settings.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_product_routes,node_order_routes,node_supplier_routes,node_dashboard_routes,node_analytics_routes,node_user toneBlue
class node_product_service,node_order_service,node_supplier_service,node_dashboard_service,node_postgres,node_clickhouse toneAmber
class node_forecast,node_recommender,node_product_analytics,node_analytics_service,node_cache toneMint
class node_crud_repos,node_sales_repo,node_stock_repo,node_analytics_repo,node_connection,node_models,node_settings toneRose
```

## Components

### Application and routes

- [Flask application](https://github.com/ozols-s/smart_restock_engine/blob/master/main.py): `main.py`
- [Product routes](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/products_routes.py): `backend/routes/products_routes.py`
- [Order routes](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/orders_routes.py): `backend/routes/orders_routes.py`
- [Supplier routes](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/suppliers_routes.py): `backend/routes/suppliers_routes.py`
- [Dashboard routes](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/dashboard_routes.py): `backend/routes/dashboard_routes.py`
- [Analytics routes](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/routes/analytics_routes.py): `backend/routes/analytics_routes.py`

### Inventory and decisions

- [Product service](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/product_service.py): `backend/services/product_service.py`
- [Order service](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/order_service.py): `backend/services/order_service.py`
- [Supplier service](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/supplier_service.py): `backend/services/supplier_service.py`
- [Dashboard service](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/dashboard_service.py): `backend/services/dashboard_service.py`

### Analytics and forecasting

- [Forecast service](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/forecast_service.py): `backend/services/forecast_service.py`
- [Order recommender](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/ml/order_recommender.py): `backend/ml/order_recommender.py`
- [Product analytics](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/ml/product_analytics.py): `backend/ml/product_analytics.py`
- [Analytics service](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/services/analytics_service.py): `backend/services/analytics_service.py`
- [Cache decorator](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/cache/cache_decorator.py): `backend/cache/cache_decorator.py`

### Persistence and configuration

- [CRUD repositories](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/crud_repositories.py): `backend/repositories/crud_repositories.py`
- [Sales repository](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/sales_repository.py): `backend/repositories/sales_repository.py`
- [Stock repository](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/stock_repository.py): `backend/repositories/stock_repository.py`
- [Analytics repository](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/repositories/analytics_repository.py): `backend/repositories/analytics_repository.py`
- [Database connections](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/db/connection.py): `backend/db/connection.py`
- [ORM models](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/db/models.py): `backend/db/models.py`
- [Application settings](https://github.com/ozols-s/smart_restock_engine/blob/master/backend/config/settings.py): `backend/config/settings.py`

### Other components

- **Dashboard user**
- **PostgreSQL**
- **ClickHouse**

## Connections

- Dashboard user → Flask application: requests pages (evidence: `main.py`)
- Flask application → Dashboard routes: registers routes (evidence: `main.py`)
- Flask application → Product routes: registers routes (evidence: `main.py`)
- Flask application → Order routes: registers routes (evidence: `main.py`)
- Flask application → Supplier routes: registers routes (evidence: `main.py`)
- Flask application → Analytics routes: registers routes (evidence: `main.py`)
- Dashboard routes → Dashboard service: requests data (evidence: `backend/routes/dashboard_routes.py`)
- Product routes → Product service: requests products (evidence: `backend/routes/products_routes.py`)
- Supplier routes → Supplier service: requests suppliers (evidence: `backend/routes/suppliers_routes.py`)
- Order routes → Order service: uses service (evidence: `backend/routes/orders_routes.py`)
- Analytics routes → Analytics service: uses service (evidence: `backend/routes/analytics_routes.py`)
- Dashboard service → Sales repository: reads sales (evidence: `backend/services/dashboard_service.py`)
- Dashboard service → Stock repository: reads stock (evidence: `backend/services/dashboard_service.py`)
- Dashboard service → CRUD repositories: reads orders (evidence: `backend/services/dashboard_service.py`)
- Dashboard service → Order service: calculates recommendations (evidence: `backend/services/dashboard_service.py`)
- Dashboard service → Cache decorator: caches summary (evidence: `backend/services/dashboard_service.py`)
- Order service → Sales repository: reads sales (evidence: `backend/services/order_service.py`)
- Order service → Stock repository: reads stock (evidence: `backend/services/order_service.py`)
- Order service → CRUD repositories: reads orders (evidence: `backend/services/order_service.py`)
- Order service → Forecast service: requests forecast (evidence: `backend/services/order_service.py`)
- Order service → Order recommender: calculates reorder (evidence: `backend/services/order_service.py`)
- Analytics service → Sales repository: reads sales (evidence: `backend/services/analytics_service.py`)
- Analytics service → Product analytics: uses analytics (evidence: `backend/services/analytics_service.py`)
- Analytics service → Cache decorator: caches results (evidence: `backend/services/analytics_service.py`)
- Sales repository → Database connections: queries through (evidence: `backend/repositories/sales_repository.py`)
- Stock repository → Database connections: queries through (evidence: `backend/repositories/stock_repository.py`)
- Analytics repository → Database connections: uses connection (evidence: `backend/repositories/analytics_repository.py`)
- CRUD repositories → Database connections: uses connection (evidence: `backend/repositories/crud_repositories.py`)
- CRUD repositories → ORM models: uses models (evidence: `backend/repositories/crud_repositories.py`)
- Database connections → Application settings: loads settings (evidence: `backend/db/connection.py`)
- Database connections → PostgreSQL: initializes ORM (evidence: `backend/db/connection.py`)
- Database connections → ClickHouse: creates client (evidence: `backend/db/connection.py`)
- ORM models → Database connections: binds ORM (evidence: `backend/db/models.py`)
