- 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>
5.3 KiB
5.3 KiB
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 |