# vtjvlad/bifo-pars architecture

> Architecture diagram of the GitHub repository vtjvlad/bifo-pars, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/vtjvlad/bifo-pars
- Repository: https://github.com/vtjvlad/bifo-pars

## Overview

The repository combines a Hotline.ua catalog and filter scraper, MongoDB-backed filter API, and data-processing/export scripts. The main workflow is category selection, scraping product or filter data, then processing it for storage or export; API clients can query stored filters. The README separately documents a JSON-object extraction utility, included as an independent capability. Several tree-listed server routes and subsystems were not supplied as source, so their behavior and connections are omitted.

Main entry points: [`models/Filter.js`](https://github.com/vtjvlad/bifo-pars/blob/main/models/Filter.js) (Filter model), [`pars/hotline-parser.js`](https://github.com/vtjvlad/bifo-pars/blob/main/pars/hotline-parser.js) (Product parser), [`routes/filters.js`](https://github.com/vtjvlad/bifo-pars/blob/main/routes/filters.js) (Filter endpoints), [`pars/hotline-filters-parser.js`](https://github.com/vtjvlad/bifo-pars/blob/main/pars/hotline-filters-parser.js) (Filter parser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_scraping["Hotline scraping"]
  node_hotline_cli["Scraper CLI<br/>[cli-parser.js]"]
  node_product_parser["Product parser<br/>[hotline-parser.js]"]
  node_legacy_parser["Legacy parser<br/>[hotline-parser.js]"]
  node_token_file["Token loader<br/>[tt.js]"]
end

subgraph group_filter_data["Filter data"]
  node_filter_parser["Filter parser"]
  node_filter_init["Filter initialization<br/>[init-filters-db.js]"]
  node_filter_process["Filter processing<br/>[process-filters.js]"]
  node_filter_stream_process["Stream processing"]
  node_filter_export["Filter export"]
  node_filter_model["Filter model<br/>[Filter.js]"]
end

subgraph group_catalog_data["Catalog data"]
  node_product_process["Product processing<br/>[process-filters.js]"]
  node_product_model["Product model<br/>[Product.js]"]
end

subgraph group_api["Filter API"]
  node_server["HTTP server<br/>[server.js]"]
  node_filter_routes["Filter endpoints<br/>[filters.js]"]
end

subgraph group_utilities["JSON utility"]
  node_extractor["Object extractor<br/>[extract-objects.js]"]
end

node_operator(("Operator"))
node_hotline{{"Hotline GraphQL"}}
node_api_client(("API client"))
node_mongo[("MongoDB")]
node_json_user(("JSON utility user"))
node_json_files["JSON files"]

node_operator -->|"selects categories"| node_hotline_cli
node_hotline_cli -->|"creates parser"| node_product_parser
node_product_parser -->|"loads tokens"| node_token_file
node_product_parser -->|"requests products"| node_hotline
node_filter_parser -->|"loads tokens"| node_token_file
node_filter_parser -->|"requests filters"| node_hotline
node_legacy_parser -->|"requests products"| node_hotline
node_legacy_parser -->|"loads tokens"| node_token_file
node_filter_init -->|"parses categories"| node_filter_parser
node_filter_init -->|"writes filters"| node_filter_model
node_filter_process -->|"uses model"| node_filter_model
node_filter_process -->|"uses model"| node_product_model
node_filter_stream_process -->|"uses model"| node_filter_model
node_filter_stream_process -->|"uses model"| node_product_model
node_filter_export -->|"reads filters"| node_filter_model
node_filter_export -->|"reads products"| node_product_model
node_server -->|"mounts routes"| node_filter_routes
node_server -->|"connects to"| node_mongo
node_api_client -.->|"sends requests"| node_server
node_filter_routes -->|"queries filters"| node_filter_model
node_filter_routes -.->|"reads data"| node_mongo
node_json_user -->|"runs extraction"| node_extractor
node_extractor -->|"reads and writes"| node_json_files

click node_hotline_cli "https://github.com/vtjvlad/bifo-pars/blob/main/pars/cli-parser.js"
click node_product_parser "https://github.com/vtjvlad/bifo-pars/blob/main/pars/hotline-parser.js"
click node_legacy_parser "https://github.com/vtjvlad/bifo-pars/blob/main/legacy/hotline-parser.js"
click node_filter_parser "https://github.com/vtjvlad/bifo-pars/blob/main/pars/hotline-filters-parser.js"
click node_token_file "https://github.com/vtjvlad/bifo-pars/blob/main/pars/tt.js"
click node_filter_init "https://github.com/vtjvlad/bifo-pars/blob/main/init-filters-db.js"
click node_filter_process "https://github.com/vtjvlad/bifo-pars/blob/main/process-filters.js"
click node_filter_stream_process "https://github.com/vtjvlad/bifo-pars/blob/main/process-filters-stream.js"
click node_filter_export "https://github.com/vtjvlad/bifo-pars/blob/main/export-filters-stream.js"
click node_filter_model "https://github.com/vtjvlad/bifo-pars/blob/main/models/Filter.js"
click node_product_process "https://github.com/vtjvlad/bifo-pars/blob/main/process-filters.js"
click node_product_model "https://github.com/vtjvlad/bifo-pars/blob/main/models/Product.js"
click node_server "https://github.com/vtjvlad/bifo-pars/blob/main/server.js"
click node_filter_routes "https://github.com/vtjvlad/bifo-pars/blob/main/routes/filters.js"
click node_extractor "https://github.com/vtjvlad/bifo-pars/blob/main/extract-objects.js"

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_hotline_cli,node_product_parser,node_legacy_parser,node_token_file,node_api_client,node_json_user toneBlue
class node_filter_parser,node_filter_init,node_filter_process,node_filter_stream_process,node_filter_export,node_filter_model,node_mongo toneAmber
class node_product_process,node_product_model toneMint
class node_server,node_filter_routes toneRose
class node_extractor,node_operator,node_hotline,node_json_files toneIndigo
```

## Components

### Hotline scraping

- [Scraper CLI](https://github.com/vtjvlad/bifo-pars/blob/main/pars/cli-parser.js): `pars/cli-parser.js`
- [Product parser](https://github.com/vtjvlad/bifo-pars/blob/main/pars/hotline-parser.js): `pars/hotline-parser.js`
- [Legacy parser](https://github.com/vtjvlad/bifo-pars/blob/main/legacy/hotline-parser.js): `legacy/hotline-parser.js`
- [Token loader](https://github.com/vtjvlad/bifo-pars/blob/main/pars/tt.js): `pars/tt.js`

### Filter data

- [Filter parser](https://github.com/vtjvlad/bifo-pars/blob/main/pars/hotline-filters-parser.js): `pars/hotline-filters-parser.js`
- [Filter initialization](https://github.com/vtjvlad/bifo-pars/blob/main/init-filters-db.js): `init-filters-db.js`
- [Filter processing](https://github.com/vtjvlad/bifo-pars/blob/main/process-filters.js): `process-filters.js`
- [Stream processing](https://github.com/vtjvlad/bifo-pars/blob/main/process-filters-stream.js): `process-filters-stream.js`
- [Filter export](https://github.com/vtjvlad/bifo-pars/blob/main/export-filters-stream.js): `export-filters-stream.js`
- [Filter model](https://github.com/vtjvlad/bifo-pars/blob/main/models/Filter.js): `models/Filter.js`

### Catalog data

- [Product processing](https://github.com/vtjvlad/bifo-pars/blob/main/process-filters.js): `process-filters.js`
- [Product model](https://github.com/vtjvlad/bifo-pars/blob/main/models/Product.js): `models/Product.js`

### Filter API

- [HTTP server](https://github.com/vtjvlad/bifo-pars/blob/main/server.js): `server.js`
- [Filter endpoints](https://github.com/vtjvlad/bifo-pars/blob/main/routes/filters.js): `routes/filters.js`

### JSON utility

- [Object extractor](https://github.com/vtjvlad/bifo-pars/blob/main/extract-objects.js): `extract-objects.js`

### Other components

- **Operator**
- **Hotline GraphQL**
- **API client**
- **MongoDB**
- **JSON utility user**
- **JSON files**

## Connections

- Operator → Scraper CLI: selects categories (evidence: `pars/cli-parser.js`)
- Scraper CLI → Product parser: creates parser (evidence: `pars/cli-parser.js`)
- Product parser → Token loader: loads tokens (evidence: `pars/hotline-parser.js`)
- Product parser → Hotline GraphQL: requests products (evidence: `pars/hotline-parser.js`)
- Filter parser → Token loader: loads tokens (evidence: `pars/hotline-filters-parser.js`)
- Filter parser → Hotline GraphQL: requests filters (evidence: `pars/hotline-filters-parser.js`)
- Legacy parser → Hotline GraphQL: requests products (evidence: `legacy/hotline-parser.js`)
- Legacy parser → Token loader: loads tokens (evidence: `legacy/hotline-parser.js`)
- Filter initialization → Filter parser: parses categories (evidence: `init-filters-db.js`)
- Filter initialization → Filter model: writes filters (evidence: `init-filters-db.js`)
- Filter processing → Filter model: uses model (evidence: `process-filters.js`)
- Filter processing → Product model: uses model (evidence: `process-filters.js`)
- Stream processing → Filter model: uses model (evidence: `process-filters-stream.js`)
- Stream processing → Product model: uses model (evidence: `process-filters-stream.js`)
- Filter export → Filter model: reads filters (evidence: `export-filters-stream.js`)
- Filter export → Product model: reads products (evidence: `export-filters-stream.js`)
- HTTP server → Filter endpoints: mounts routes (evidence: `server.js`)
- HTTP server → MongoDB: connects to (evidence: `server.js`)
- API client → HTTP server: sends requests
- Filter endpoints → Filter model: queries filters (evidence: `routes/filters.js`)
- Filter endpoints → MongoDB: reads data
- JSON utility user → Object extractor: runs extraction
- Object extractor → JSON files: reads and writes
