From 73acc5410f494c4e45568ee0009339001b84a5cf Mon Sep 17 00:00:00 2001 From: Michael Chus Date: Sat, 31 Jan 2026 00:06:46 +0300 Subject: [PATCH] Update documentation to reflect actual implementation --- CLAUDE.md | 30 +++++++++++++----------------- README.md | 35 +++++++++++++---------------------- 2 files changed, 26 insertions(+), 39 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 15c3611..5b2bec5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -20,7 +20,6 @@ QuoteForge — корпоративный инструмент для конфи quoteforge/ ├── cmd/ │ ├── server/main.go # Main HTTP server -│ ├── priceupdater/main.go # Cron job for price updates & alerts │ └── importer/main.go # Import metadata from lot table ├── internal/ │ ├── config/config.go # YAML config loading @@ -89,7 +88,6 @@ CREATE TABLE qt_users ( CREATE TABLE qt_lot_metadata ( lot_name CHAR(255) PRIMARY KEY, category_id INT, - vendor VARCHAR(50), -- Parsed from lot_name: CPU_AMD_9654 → "AMD" model VARCHAR(100), -- Parsed: CPU_AMD_9654 → "9654" specs JSON, current_price DECIMAL(12,2), @@ -168,18 +166,21 @@ CREATE TABLE qt_component_usage_stats ( ### 1. Part Number Parsing -Extract category, vendor, model from lot_name: +Extract category and model from lot_name: ```go -// "CPU_AMD_9654" → category="CPU", vendor="AMD", model="9654" -// "MB_INTEL_4.Sapphire_2S_32xDDR5" → category="MB", vendor="INTEL", model="4.Sapphire_2S_32xDDR5" -// "MEM_DDR5_64G_5600" → category="MEM", vendor="DDR5", model="64G_5600" -// "GPU_NV_RTX_4090_PCIe" → category="GPU", vendor="NV", model="RTX_4090_PCIe" +// "CPU_AMD_9654" → category="CPU", model="AMD_9654" +// "MB_INTEL_4.Sapphire_2S" → category="MB", model="INTEL_4.Sapphire_2S" +// "MEM_DDR5_64G_5600" → category="MEM", model="DDR5_64G_5600" +// "GPU_NV_RTX_4090_PCIe" → category="GPU", model="NV_RTX_4090_PCIe" -func ParsePartNumber(lotName string) (category, vendor, model string) { - parts := strings.SplitN(lotName, "_", 3) - if len(parts) >= 1 { category = parts[0] } - if len(parts) >= 2 { vendor = parts[1] } - if len(parts) >= 3 { model = parts[2] } +func ParsePartNumber(lotName string) (category, model string) { + parts := strings.SplitN(lotName, "_", 2) + if len(parts) >= 1 { + category = parts[0] + } + if len(parts) >= 2 { + model = parts[1] + } return } ``` @@ -233,7 +234,6 @@ Sort by: popularity + price freshness. Components without prices go to the botto Generate alerts when: - **high_demand_stale_price** (CRITICAL): >= 5 quotes/month AND price > 60 days old - **trending_no_price** (HIGH): trend_percent > 50% AND no price set -- **price_spike** (MEDIUM): price increased > 20% from previous period - **no_recent_quotes** (MEDIUM): popular component, no supplier quotes > 90 days ## API Endpoints @@ -274,7 +274,6 @@ GET /api/configs/:uuid → get by UUID PUT /api/configs/:uuid → update DELETE /api/configs/:uuid → delete GET /api/configs/:uuid/export → export as JSON -POST /api/configs/import → import from JSON ``` ### Pricing Admin (requires role: pricing_admin or admin) @@ -325,9 +324,6 @@ GET /partials/summary → price summary HTML # Run development server go run ./cmd/server -# Run price updater (cron job) -go run ./cmd/priceupdater - # Run importer (one-time setup) go run ./cmd/importer diff --git a/README.md b/README.md index 87d74b6..752db93 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **Server Configuration & Quotation Tool** -QuoteForge — корпоративный инструмент для конфигурирования серверов и формирования коммерческих предложений. Позволяет быстро собрать спецификацию сервера из каталога компонентов с автоматическим расчётом цен. +QuoteForge — корпоративный инструмент для конфигурирования серверов и формирования коммерческих предложений (КП). Приложение интегрируется с существующей базой данных RFQ_LOG. ![Go Version](https://img.shields.io/badge/Go-1.22+-00ADD8?style=flat&logo=go) ![License](https://img.shields.io/badge/License-Proprietary-red) @@ -16,7 +16,6 @@ QuoteForge — корпоративный инструмент для конфи - 💰 **Автоматический расчёт цен** — актуальные цены на основе истории закупок - 📊 **Экспорт в CSV/XLSX** — готовые спецификации для клиентов - 💾 **Сохранение конфигураций** — история и шаблоны для повторного использования -- 📤 **Импорт/экспорт JSON** — обмен конфигурациями между пользователями ### Для ценовых администраторов - 📈 **Умный расчёт цен** — медиана, взвешенная медиана, среднее @@ -83,23 +82,23 @@ auth: ### 3. Миграции базы данных ```bash -make migrate +go run ./cmd/server -migrate ``` ### 4. Импорт метаданных компонентов ```bash -make seed +go run ./cmd/importer ``` ### 5. Запуск ```bash # Development -make run +go run ./cmd/server # Production -make build +CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/quoteforge ./cmd/server ./bin/quoteforge ``` @@ -120,9 +119,8 @@ docker-compose up -d ``` quoteforge/ ├── cmd/ -│ ├── server/ # Основной сервер -│ ├── priceupdater/ # Cron job обновления цен -│ └── importer/ # Импорт данных +│ ├── server/main.go # Main HTTP server +│ └── importer/main.go # Import metadata from lot table ├── internal/ │ ├── config/ # Конфигурация │ ├── models/ # GORM модели @@ -137,7 +135,7 @@ quoteforge/ ├── config.yaml # Конфигурация ├── Dockerfile ├── docker-compose.yml -└── Makefile +└── go.mod ``` ## Роли пользователей @@ -165,30 +163,23 @@ GET /api/configs # Сохранённые конфигурации ## Cron Jobs -Добавьте в crontab: +Система автоматического обновления цен не реализована в текущей версии. Для обновления цен можно использовать команду: ```bash -# Обновление цен — каждую ночь в 2:00 -0 2 * * * /opt/quoteforge/bin/priceupdater - -# Генерация алертов — каждый час -0 * * * * /opt/quoteforge/bin/priceupdater --alerts-only +go run ./cmd/server -migrate ``` ## Разработка ```bash # Запуск в режиме разработки (hot reload) -make dev +go run ./cmd/server # Запуск тестов -make test - -# Линтер -make lint +go test ./... # Сборка для Linux -make build-linux +CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/quoteforge ./cmd/server ``` ## Переменные окружения