Update documentation to reflect actual implementation

This commit is contained in:
2026-01-31 00:06:46 +03:00
parent 68d0e9a540
commit 73acc5410f
2 changed files with 26 additions and 39 deletions

View File

@@ -20,7 +20,6 @@ QuoteForge — корпоративный инструмент для конфи
quoteforge/ quoteforge/
├── cmd/ ├── cmd/
│ ├── server/main.go # Main HTTP server │ ├── server/main.go # Main HTTP server
│ ├── priceupdater/main.go # Cron job for price updates & alerts
│ └── importer/main.go # Import metadata from lot table │ └── importer/main.go # Import metadata from lot table
├── internal/ ├── internal/
│ ├── config/config.go # YAML config loading │ ├── config/config.go # YAML config loading
@@ -89,7 +88,6 @@ CREATE TABLE qt_users (
CREATE TABLE qt_lot_metadata ( CREATE TABLE qt_lot_metadata (
lot_name CHAR(255) PRIMARY KEY, lot_name CHAR(255) PRIMARY KEY,
category_id INT, category_id INT,
vendor VARCHAR(50), -- Parsed from lot_name: CPU_AMD_9654 → "AMD"
model VARCHAR(100), -- Parsed: CPU_AMD_9654 → "9654" model VARCHAR(100), -- Parsed: CPU_AMD_9654 → "9654"
specs JSON, specs JSON,
current_price DECIMAL(12,2), current_price DECIMAL(12,2),
@@ -168,18 +166,21 @@ CREATE TABLE qt_component_usage_stats (
### 1. Part Number Parsing ### 1. Part Number Parsing
Extract category, vendor, model from lot_name: Extract category and model from lot_name:
```go ```go
// "CPU_AMD_9654" → category="CPU", vendor="AMD", model="9654" // "CPU_AMD_9654" → category="CPU", model="AMD_9654"
// "MB_INTEL_4.Sapphire_2S_32xDDR5" → category="MB", vendor="INTEL", model="4.Sapphire_2S_32xDDR5" // "MB_INTEL_4.Sapphire_2S" → category="MB", model="INTEL_4.Sapphire_2S"
// "MEM_DDR5_64G_5600" → category="MEM", vendor="DDR5", model="64G_5600" // "MEM_DDR5_64G_5600" → category="MEM", model="DDR5_64G_5600"
// "GPU_NV_RTX_4090_PCIe" → category="GPU", vendor="NV", model="RTX_4090_PCIe" // "GPU_NV_RTX_4090_PCIe" → category="GPU", model="NV_RTX_4090_PCIe"
func ParsePartNumber(lotName string) (category, vendor, model string) { func ParsePartNumber(lotName string) (category, model string) {
parts := strings.SplitN(lotName, "_", 3) parts := strings.SplitN(lotName, "_", 2)
if len(parts) >= 1 { category = parts[0] } if len(parts) >= 1 {
if len(parts) >= 2 { vendor = parts[1] } category = parts[0]
if len(parts) >= 3 { model = parts[2] } }
if len(parts) >= 2 {
model = parts[1]
}
return return
} }
``` ```
@@ -233,7 +234,6 @@ Sort by: popularity + price freshness. Components without prices go to the botto
Generate alerts when: Generate alerts when:
- **high_demand_stale_price** (CRITICAL): >= 5 quotes/month AND price > 60 days old - **high_demand_stale_price** (CRITICAL): >= 5 quotes/month AND price > 60 days old
- **trending_no_price** (HIGH): trend_percent > 50% AND no price set - **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 - **no_recent_quotes** (MEDIUM): popular component, no supplier quotes > 90 days
## API Endpoints ## API Endpoints
@@ -274,7 +274,6 @@ GET /api/configs/:uuid → get by UUID
PUT /api/configs/:uuid → update PUT /api/configs/:uuid → update
DELETE /api/configs/:uuid → delete DELETE /api/configs/:uuid → delete
GET /api/configs/:uuid/export → export as JSON GET /api/configs/:uuid/export → export as JSON
POST /api/configs/import → import from JSON
``` ```
### Pricing Admin (requires role: pricing_admin or admin) ### Pricing Admin (requires role: pricing_admin or admin)
@@ -325,9 +324,6 @@ GET /partials/summary → price summary HTML
# Run development server # Run development server
go run ./cmd/server go run ./cmd/server
# Run price updater (cron job)
go run ./cmd/priceupdater
# Run importer (one-time setup) # Run importer (one-time setup)
go run ./cmd/importer go run ./cmd/importer

View File

@@ -2,7 +2,7 @@
**Server Configuration & Quotation Tool** **Server Configuration & Quotation Tool**
QuoteForge — корпоративный инструмент для конфигурирования серверов и формирования коммерческих предложений. Позволяет быстро собрать спецификацию сервера из каталога компонентов с автоматическим расчётом цен. QuoteForge — корпоративный инструмент для конфигурирования серверов и формирования коммерческих предложений (КП). Приложение интегрируется с существующей базой данных RFQ_LOG.
![Go Version](https://img.shields.io/badge/Go-1.22+-00ADD8?style=flat&logo=go) ![Go Version](https://img.shields.io/badge/Go-1.22+-00ADD8?style=flat&logo=go)
![License](https://img.shields.io/badge/License-Proprietary-red) ![License](https://img.shields.io/badge/License-Proprietary-red)
@@ -16,7 +16,6 @@ QuoteForge — корпоративный инструмент для конфи
- 💰 **Автоматический расчёт цен** — актуальные цены на основе истории закупок - 💰 **Автоматический расчёт цен** — актуальные цены на основе истории закупок
- 📊 **Экспорт в CSV/XLSX** — готовые спецификации для клиентов - 📊 **Экспорт в CSV/XLSX** — готовые спецификации для клиентов
- 💾 **Сохранение конфигураций** — история и шаблоны для повторного использования - 💾 **Сохранение конфигураций** — история и шаблоны для повторного использования
- 📤 **Импорт/экспорт JSON** — обмен конфигурациями между пользователями
### Для ценовых администраторов ### Для ценовых администраторов
- 📈 **Умный расчёт цен** — медиана, взвешенная медиана, среднее - 📈 **Умный расчёт цен** — медиана, взвешенная медиана, среднее
@@ -83,23 +82,23 @@ auth:
### 3. Миграции базы данных ### 3. Миграции базы данных
```bash ```bash
make migrate go run ./cmd/server -migrate
``` ```
### 4. Импорт метаданных компонентов ### 4. Импорт метаданных компонентов
```bash ```bash
make seed go run ./cmd/importer
``` ```
### 5. Запуск ### 5. Запуск
```bash ```bash
# Development # Development
make run go run ./cmd/server
# Production # Production
make build CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/quoteforge ./cmd/server
./bin/quoteforge ./bin/quoteforge
``` ```
@@ -120,9 +119,8 @@ docker-compose up -d
``` ```
quoteforge/ quoteforge/
├── cmd/ ├── cmd/
│ ├── server/ # Основной сервер │ ├── server/main.go # Main HTTP server
── priceupdater/ # Cron job обновления цен ── importer/main.go # Import metadata from lot table
│ └── importer/ # Импорт данных
├── internal/ ├── internal/
│ ├── config/ # Конфигурация │ ├── config/ # Конфигурация
│ ├── models/ # GORM модели │ ├── models/ # GORM модели
@@ -137,7 +135,7 @@ quoteforge/
├── config.yaml # Конфигурация ├── config.yaml # Конфигурация
├── Dockerfile ├── Dockerfile
├── docker-compose.yml ├── docker-compose.yml
└── Makefile └── go.mod
``` ```
## Роли пользователей ## Роли пользователей
@@ -165,30 +163,23 @@ GET /api/configs # Сохранённые конфигурации
## Cron Jobs ## Cron Jobs
Добавьте в crontab: Система автоматического обновления цен не реализована в текущей версии. Для обновления цен можно использовать команду:
```bash ```bash
# Обновление цен — каждую ночь в 2:00 go run ./cmd/server -migrate
0 2 * * * /opt/quoteforge/bin/priceupdater
# Генерация алертов — каждый час
0 * * * * /opt/quoteforge/bin/priceupdater --alerts-only
``` ```
## Разработка ## Разработка
```bash ```bash
# Запуск в режиме разработки (hot reload) # Запуск в режиме разработки (hot reload)
make dev go run ./cmd/server
# Запуск тестов # Запуск тестов
make test go test ./...
# Линтер
make lint
# Сборка для Linux # Сборка для Linux
make build-linux CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/quoteforge ./cmd/server
``` ```
## Переменные окружения ## Переменные окружения