Files
QuoteForge/memory.md

2.4 KiB

Changes summary (2026-02-11)

Implemented strict lot_category flow using pricelist_items.lot_category only (no parsing from lot_name), plus local caching and backfill:

  1. Local DB schema + migrations
  • Added lot_category column to local_pricelist_items via LocalPricelistItem model.
  • Added local migration 2026_02_11_local_pricelist_item_category to add the column if missing and create indexes:
    • idx_local_pricelist_items_pricelist_lot (pricelist_id, lot_name)
    • idx_local_pricelist_items_lot_category (lot_category)
  1. Server model/repository
  • Added LotCategory field to models.PricelistItem.
  • PricelistRepository.GetItems now sets Category from LotCategory (no parsing from lot_name).
  1. Sync + local DB helpers
  • SyncPricelistItems now saves lot_category into local cache via PricelistItemToLocal.
  • Added LocalDB.CountLocalPricelistItemsWithEmptyCategory and LocalDB.ReplaceLocalPricelistItems.
  • Added LocalDB.GetLocalLotCategoriesByServerPricelistID for strict category lookup.
  • Added SyncPricelists backfill step: for used active pricelists with empty categories, force refresh items from server.
  1. API handler
  • GET /api/pricelists/:id/items returns category from local_pricelist_items.lot_category (no parsing from lot_name).
  1. Article category foundation
  • New package internal/article:
    • ResolveLotCategoriesStrict pulls categories from local pricelist items and errors on missing category.
    • GroupForLotCategory maps only allowed codes (CPU/MEM/GPU/M2/SSD/HDD/EDSFF/HHHL/NIC/HCA/DPU/PSU/PS) to article groups; excludes SFP.
    • Error type MissingCategoryForLotError with base ErrMissingCategoryForLot.
  1. Tests
  • Added unit tests for converters and article category resolver.
  • Added handler test to ensure /api/pricelists/:id/items returns lot_category.
  • Added sync test for category backfill on used pricelist items.
  • go test ./... passed.

Additional fixes (2026-02-11):

  • Fixed article parsing bug: CPU/GPU parsers were swapped in internal/article/generator.go. CPU now uses last token from CPU lot; GPU uses model+memory from GPU_vendor_model_mem_iface.
  • Adjusted configurator base tab layout to align labels on the same row (separate label row + input row grid).

UI rule (2026-02-19):

  • In all breadcrumbs, truncate long specification/configuration names to 16 characters using ellipsis.