Files
PriceForge/bible-local/api.md
Mikhail Chusavitin 5f8aec456b Unified Quote Journal (parts_log) v3
- New unified append-only quote log table parts_log replaces three
  separate log tables (stock_log, partnumber_log_competitors, lot_log)
- Migrations 042-049: extend supplier, create parts_log/import_formats/
  ignore_rules, rework qt_lot_metadata composite PK, add lead_time_weeks
  to pricelist_items, backfill data, migrate ignore rules
- New services: PartsLogBackfillService, ImportFormatService,
  UnifiedImportService; new world pricelist type (all supplier types)
- qt_lot_metadata PK changed to (lot_name, pricelist_type); all queries
  now filter WHERE pricelist_type='estimate'
- Fix pre-existing bug: qt_component_usage_stats column names
  quotes_last30d/quotes_last7d (no underscore) — added explicit gorm tags
- Bible: full table inventory, baseline schema snapshot, updated pricelist/
  data-rules/api/history/architecture docs

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 17:25:54 +03:00

146 lines
5.3 KiB
Markdown

# API Endpoints
## Web Pages
| Method | URL | Handler | Description |
|--------|-----|---------|-------------|
| GET | `/` | Index | Redirect → `/admin/pricing` |
| GET | `/admin/pricing` | AdminPricing | Pricing admin (Estimate / Warehouse / Alerts tabs) |
| GET | `/lot` | Lot | LOT management (LOT / Mappings tabs) |
| GET | `/pricelists` | Pricelists | Pricelist listing |
| GET | `/pricelists/:id` | PricelistDetail | Single pricelist view |
| GET | `/vendor-mappings` | VendorMappings | Vendor mapping UI |
| GET | `/admin/competitors` | Competitors | Competitor management UI |
| GET | `/partials/components` | ComponentsPartial | Components partial |
| GET/POST | `/setup` | Setup | DB connection setup |
---
## System
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/health` | Health check |
| GET | `/api/ping` | Ping |
| GET | `/api/db-status` | DB connection status (optional counts) |
| GET | `/api/current-user` | Current DB user info |
| POST | `/api/restart` | Graceful process restart |
| GET/POST | `/api/connection-settings` | DB config UI |
---
## Components
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/components` | Component list with search/filter |
| GET | `/api/components/:lot_name` | Component details |
| GET | `/api/categories` | Category list |
---
## Pricelists
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/pricelists` | List all pricelists |
| POST | `/api/pricelists` | Create pricelist (returns task_id) |
| GET | `/api/pricelists/:id` | Pricelist details |
| DELETE | `/api/pricelists/:id` | Delete pricelist |
| GET | `/api/pricelists/:id/items` | Pricelist items |
| GET | `/api/pricelists/:id/export-csv` | CSV export (streaming) |
| GET | `/api/pricelists/latest` | Latest pricelist per source |
---
## Pricing Admin (`/api/admin/pricing/*`)
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/admin/pricing/stats` | Statistics |
| GET | `/api/admin/pricing/components` | Components with pricing |
| POST | `/api/admin/pricing/recalculate-all` | Recalculate all prices (returns task_id) |
| GET | `/api/admin/pricing/lots` | LOT list |
| GET/POST | `/api/admin/pricing/stock-mappings` | Stock partnumber mappings |
| GET/POST/DELETE | `/api/admin/pricing/vendor-mappings` | Vendor partnumber mappings (DELETE removes mapping and seen-row from global list) |
| POST | `/api/admin/pricing/vendor-mappings/import-csv` | Import vendor mappings from CSV (`;`, UTF-8/BOM, columns: vendor;partnumber;lot_name;description;ignore; if ignore is set and lot_name empty → mark ignored) |
| GET | `/api/admin/pricing/vendor-mappings/export-unmapped-csv` | Export CSV template of unmapped vendor partnumbers for user filling (`vendor;partnumber;lot_name;description;ignore`) |
| GET | `/api/admin/pricing/alerts` | Alerts list |
| GET | `/api/admin/pricing/scheduler-runs` | Embedded scheduler job state (`qt_scheduler_runs`) |
| GET | `/api/admin/pricing/partnumber-books` | List all partnumber book snapshots with item counts |
| POST | `/api/admin/pricing/partnumber-books` | Create partnumber book snapshot (returns task_id) |
---
## Competitors (`/api/competitors/*`)
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/competitors` | List all competitors with unique p/n + total quote counts |
| POST | `/api/competitors` | Create competitor |
| GET | `/api/competitors/:id` | Get competitor by ID |
| PUT | `/api/competitors/:id` | Update competitor (name, delivery_basis, currency, discount, column_mapping) |
| DELETE | `/api/competitors/:id` | Delete competitor |
| PATCH | `/api/competitors/:id/active` | Set is_active |
| POST | `/api/competitors/:id/import` | Import Excel quote file (returns task_id, type: `competitor_import`) |
| POST | `/api/competitors/pricelist` | Rebuild combined competitor pricelist from all stored quotes (returns task_id) |
| POST | `/api/competitors/parse-headers` | Parse XLSX headers/preview for column mapping UI |
---
## Parts Log
| Method | URL | Description |
|--------|-----|-------------|
| POST | `/api/parts-log/backfill` | Trigger backfill job manually (admin only) — resolves lot_name=NULL rows in parts_log |
---
## Import Formats
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/import-formats` | List all import formats |
| GET | `/api/import-formats/:code` | Get format by code |
| POST | `/api/import-formats` | Create or update import format |
| DELETE | `/api/import-formats/:code` | Delete import format |
---
## Ignore Rules
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/ignore-rules` | List all ignore rules |
| POST | `/api/ignore-rules` | Create ignore rule |
| DELETE | `/api/ignore-rules/:id` | Delete ignore rule |
---
## Tasks (polling)
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/tasks/:id` | Task status and result |
---
## Sync (diagnostics)
| Method | URL | Description |
|--------|-----|-------------|
| GET | `/api/sync/status` | Sync status |
| GET | `/api/sync/info` | Sync info |
| POST | `/api/sync/components` | Pull components |
| POST | `/api/sync/pricelists` | Pull pricelists |
---
## Setup
| Method | URL | Description |
|--------|-----|-------------|
| GET/POST | `/setup` | DB setup page |
| POST | `/setup/test` | Test DB connection |
| GET | `/setup/status` | Setup status |