Modularize Go files, extract JS to static, implement competitor pricelists
Go refactoring: - Split handlers/pricing.go (2446→291 lines) into 5 focused files - Split services/stock_import.go (1334→~400 lines) into stock_mappings.go + stock_parse.go - Split services/sync/service.go (1290→~250 lines) into 3 files JS extraction: - Move all inline <script> blocks to web/static/js/ (6 files) - Templates reduced: admin_pricing 2873→521, lot 1531→304, vendor_mappings 1063→169, etc. Competitor pricelists (migrations 033-039): - qt_competitors + partnumber_log_competitors tables - Excel import with column mapping, dedup, bulk insert - p/n→lot resolution via weighted_median, discount applied - Unmapped p/ns written to qt_vendor_partnumber_seen - Quote counts (unique/total) shown on /admin/competitors - price_method="weighted_median", price_period_days=0 stored explicitly Fix price_method/price_period_days for warehouse items: - warehouse: weighted_avg, period=0 - competitor: weighted_median, period=0 - Removes misleading DB defaults (was: median/90) Update bible: architecture.md, pricelist.md, history.md Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -33,7 +33,7 @@ PriceForge/
|
||||
│ ├── config/ # YAML config loading
|
||||
│ ├── db/ # DB connection, connection pool
|
||||
│ ├── dbutil/ # DB utilities
|
||||
│ ├── handlers/ # HTTP handlers (7 files)
|
||||
│ ├── handlers/ # HTTP handlers (12 files)
|
||||
│ ├── localdb/ # SQLite for local settings
|
||||
│ ├── lotmatch/ # LOT mapping resolver
|
||||
│ ├── middleware/ # HTTP middleware
|
||||
@@ -43,17 +43,22 @@ PriceForge/
|
||||
│ │ ├── alerts/ # Alert service
|
||||
│ │ ├── pricelist/ # Pricelist service
|
||||
│ │ ├── pricing/ # Price calculation
|
||||
│ │ ├── sync/ # Sync (diagnostics only)
|
||||
│ │ ├── stock_import.go # Stock file import
|
||||
│ │ ├── sync/ # Sync (4 files)
|
||||
│ │ ├── stock_import.go # Stock import: core, Import, replaceStockLogs
|
||||
│ │ ├── stock_mappings.go # Stock import: mappings, ignore rules, seen-index
|
||||
│ │ ├── stock_parse.go # Stock import: XLSX/MXL parsing, date detection
|
||||
│ │ ├── competitor_import.go # Competitor Excel import, pricelist build
|
||||
│ │ ├── vendor_mapping.go # Vendor mapping service
|
||||
│ │ └── component.go # Component service
|
||||
│ ├── tasks/ # Background Task Manager
|
||||
│ └── warehouse/ # Warehouse price calculation
|
||||
├── migrations/ # SQL migrations (25 files)
|
||||
├── migrations/ # SQL migrations (39 files)
|
||||
├── scripts/ # Build and release scripts
|
||||
├── web/
|
||||
│ ├── static/ # app.css (Tailwind)
|
||||
│ └── templates/ # HTML templates (9 files)
|
||||
│ ├── static/
|
||||
│ │ ├── app.css # Tailwind CSS
|
||||
│ │ └── js/ # Page JS (6 files, extracted from templates)
|
||||
│ └── templates/ # HTML templates (shell only, JS in static/js/)
|
||||
├── CLAUDE.md # AI agent instructions
|
||||
├── README.md # Quick start
|
||||
└── todo.md # Operational task list
|
||||
@@ -89,19 +94,23 @@ HTTP Request
|
||||
|
||||
## Key Modules
|
||||
|
||||
### internal/handlers/ (7 files)
|
||||
### internal/handlers/ (12 files)
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `web.go` | Page rendering: Index, Lot, AdminPricing, Pricelists, VendorMappings |
|
||||
| `web.go` | Page rendering |
|
||||
| `component.go` | Component list and detail endpoints |
|
||||
| `pricing.go` | Pricing admin: stats, components, recalc, stock, vendor mappings, alerts |
|
||||
| `pricing.go` | PricingHandler struct, NewPricingHandler, stats, query helpers |
|
||||
| `pricing_components.go` | ListComponents, GetComponentPricing, UpdatePrice, RecalculateAll, PreviewPrice |
|
||||
| `pricing_alerts.go` | ListAlerts, AcknowledgeAlert, ResolveAlert, IgnoreAlert |
|
||||
| `pricing_stock.go` | ImportStockLog, stock mappings, ignore rules |
|
||||
| `pricing_vendor.go` | Vendor mappings CRUD, CSV import/export |
|
||||
| `pricing_lots.go` | ListLotsTable, CreateLot, ListLots, GetLotStats, PartnumberBooks |
|
||||
| `pricelist.go` | Pricelist CRUD and CSV export |
|
||||
| `competitor.go` | Competitor CRUD, import, ParseHeaders |
|
||||
| `setup.go` | DB connection setup and test |
|
||||
| `sync.go` | Sync diagnostic endpoints |
|
||||
|
||||
(6 files; `sync_readiness_test.go` is a test file)
|
||||
|
||||
### internal/services/
|
||||
|
||||
| File/dir | Purpose |
|
||||
@@ -109,7 +118,14 @@ HTTP Request
|
||||
| `pricelist/` | Create Estimate, Warehouse, Competitor pricelists |
|
||||
| `pricing/` | Price calc: median, weighted_median, coefficients |
|
||||
| `alerts/` | Alert generation (price staleness, demand) |
|
||||
| `stock_import.go` | Import .mxl/.xlsx, seen-tracking, batch processing |
|
||||
| `stock_import.go` | Stock import core: Import, replaceStockLogs, buildWarehousePricelistItems |
|
||||
| `stock_mappings.go` | Mappings, ignore rules, seen-index (upsertSeenRows) |
|
||||
| `stock_parse.go` | XLSX/MXL parsing, date detection, XLSX helper functions |
|
||||
| `competitor_import.go` | Competitor Excel import, p/n→lot resolution, pricelist build |
|
||||
| `sync/service.go` | Sync service struct, status, heartbeat |
|
||||
| `sync/sync_pricelists.go` | Pricelist sync to local DB |
|
||||
| `sync/sync_changes.go` | Push pending changes (configurations, projects) |
|
||||
| `sync/sync_import.go` | Import configurations/projects to local DB |
|
||||
| `vendor_mapping.go` | Resolve partnumber → LOT, bundles, ignore |
|
||||
| `component.go` | Component listing and search |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user