- Fix nil pointer dereference in PricingHandler alert methods - Add automatic MariaDB connection on startup if settings exist - Update setupRouter to accept mariaDB as parameter - Fix offline mode checks: use h.db instead of h.alertService - Update setup handler to show restart required message - Add warning status support in setup.html UI This ensures that after saving connection settings, the application works correctly in online mode after restart. All repositories are properly initialized with MariaDB connection on startup. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
QuoteForge
Server Configuration & Quotation Tool
QuoteForge — корпоративный инструмент для конфигурирования серверов и формирования коммерческих предложений (КП). Приложение интегрируется с существующей базой данных RFQ_LOG.
Возможности
Для пользователей
- 📱 Mobile-first интерфейс — удобная работа с телефона и планшета
- 🖥️ Конфигуратор серверов — пошаговый выбор компонентов с проверкой совместимости
- 💰 Автоматический расчёт цен — актуальные цены на основе истории закупок
- 📊 Экспорт в CSV/XLSX — готовые спецификации для клиентов
- 💾 Сохранение конфигураций — история и шаблоны для повторного использования
Для ценовых администраторов
- 📈 Умный расчёт цен — медиана, взвешенная медиана, среднее
- 🎯 Система алертов — уведомления о популярных компонентах с устаревшими ценами
- 📉 Аналитика использования — какие компоненты востребованы в КП
- ⚙️ Гибкие настройки — периоды расчёта, методы, ручные переопределения
Индикация актуальности цен
| Цвет | Статус | Условие |
|---|---|---|
| 🟢 Зелёный | Свежая | < 30 дней, ≥ 3 источника |
| 🟡 Жёлтый | Нормальная | 30-60 дней |
| 🟠 Оранжевый | Устаревающая | 60-90 дней |
| 🔴 Красный | Устаревшая | > 90 дней или нет данных |
Технологии
- Backend: Go 1.22+, Gin, GORM
- Frontend: HTML, Tailwind CSS, htmx
- Database: MariaDB 11+
- Export: excelize (XLSX), encoding/csv
Требования
- Go 1.22 или выше
- MariaDB 11.x (или MySQL 8.x)
- ~50 MB дискового пространства
Установка
1. Клонирование репозитория
git clone https://github.com/your-company/quoteforge.git
cd quoteforge
2. Настройка конфигурации
cp config.example.yaml config.yaml
Отредактируйте config.yaml:
server:
host: "0.0.0.0"
port: 8080
mode: "release"
database:
host: "localhost"
port: 3306
name: "RFQ_LOG"
user: "quoteforge"
password: "your-secure-password"
auth:
jwt_secret: "your-jwt-secret-min-32-chars"
token_expiry: "24h"
3. Миграции базы данных
go run ./cmd/server -migrate
4. Импорт метаданных компонентов
go run ./cmd/importer
5. Запуск
# Development
go run ./cmd/server
# Production
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/quoteforge ./cmd/server
./bin/quoteforge
Приложение будет доступно по адресу: http://localhost:8080
Docker
# Сборка образа
docker build -t quoteforge .
# Запуск с docker-compose
docker-compose up -d
Структура проекта
quoteforge/
├── cmd/
│ ├── server/main.go # Main HTTP server
│ └── importer/main.go # Import metadata from lot table
├── internal/
│ ├── config/ # Конфигурация
│ ├── models/ # GORM модели
│ ├── handlers/ # HTTP handlers
│ ├── services/ # Бизнес-логика
│ ├── middleware/ # Auth, CORS, etc.
│ └── repository/ # Работа с БД
├── web/
│ ├── templates/ # HTML шаблоны
│ └── static/ # CSS, JS, изображения
├── migrations/ # SQL миграции
├── config.yaml # Конфигурация
├── Dockerfile
├── docker-compose.yml
└── go.mod
Роли пользователей
| Роль | Описание |
|---|---|
viewer |
Просмотр, создание квот, экспорт |
editor |
+ сохранение конфигураций |
pricing_admin |
+ управление ценами и алертами |
admin |
Полный доступ, управление пользователями |
API
Документация API доступна по адресу /api/docs (в разработке).
Основные endpoints:
POST /api/auth/login # Авторизация
GET /api/components # Список компонентов
POST /api/quote/calculate # Расчёт цены
POST /api/export/xlsx # Экспорт в Excel
GET /api/configs # Сохранённые конфигурации
Cron Jobs
QuoteForge now includes automated cron jobs for maintenance tasks. These can be run using the built-in cron functionality in the Docker container.
Docker Compose Setup
The Docker setup includes a dedicated cron service that runs the following jobs:
- Alerts check: Every hour (0 * * * *)
- Price updates: Daily at 2 AM (0 2 * * *)
- Usage counter reset: Weekly on Sunday at 1 AM (0 1 * * 0)
- Popularity score updates: Daily at 3 AM (0 3 * * *)
To enable cron jobs in Docker, run:
docker-compose up -d
Manual Cron Job Execution
You can also run cron jobs manually using the quoteforge-cron binary:
# Check and generate alerts
go run ./cmd/cron -job=alerts
# Recalculate all prices
go run ./cmd/cron -job=update-prices
# Reset usage counters
go run ./cmd/cron -job=reset-counters
# Update popularity scores
go run ./cmd/cron -job=update-popularity
Cron Job Details
- Alerts check: Generates alerts for components with high demand and stale prices, trending components without prices, and components with no recent quotes
- Price updates: Recalculates prices for all components using configured methods (median, weighted median, average)
- Usage counter reset: Resets weekly and monthly usage counters for components
- Popularity score updates: Recalculates popularity scores based on supplier quote activity
Разработка
# Запуск в режиме разработки (hot reload)
go run ./cmd/server
# Запуск тестов
go test ./...
# Сборка для Linux
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/quoteforge ./cmd/server
Переменные окружения
| Переменная | Описание | По умолчанию |
|---|---|---|
QF_DB_HOST |
Хост базы данных | localhost |
QF_DB_PORT |
Порт базы данных | 3306 |
QF_DB_NAME |
Имя базы данных | RFQ_LOG |
QF_DB_USER |
Пользователь БД | — |
QF_DB_PASSWORD |
Пароль БД | — |
QF_JWT_SECRET |
Секрет для JWT | — |
QF_SERVER_PORT |
Порт сервера | 8080 |
Интеграция с существующей БД
QuoteForge интегрируется с существующей базой RFQ_LOG:
lot— справочник компонентов (только чтение)lot_log— история цен от поставщиков (только чтение)supplier— справочник поставщиков (только чтение)
Новые таблицы QuoteForge имеют префикс qt_:
qt_users— пользователи приложенияqt_lot_metadata— расширенные данные компонентовqt_configurations— сохранённые конфигурацииqt_pricing_alerts— алерты для администраторов
Поддержка
По вопросам работы приложения обращайтесь:
- Email: mike@mchus.pro
- Internal: @mchus
Лицензия
Данное программное обеспечение является собственностью компании и предназначено исключительно для внутреннего использования. Распространение, копирование или модификация без письменного разрешения запрещены.
См. файл LICENSE для подробностей.