Mikhail Chusavitin 8d84484412 fix: fix online mode after offline-first architecture changes
- 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>
2026-02-03 10:50:07 +03:00
2026-02-02 19:44:45 +03:00
2026-01-22 17:29:47 +03:00

QuoteForge

Server Configuration & Quotation Tool

QuoteForge — корпоративный инструмент для конфигурирования серверов и формирования коммерческих предложений (КП). Приложение интегрируется с существующей базой данных RFQ_LOG.

Go Version License Status

Возможности

Для пользователей

  • 📱 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 — алерты для администраторов

Поддержка

По вопросам работы приложения обращайтесь:

Лицензия

Данное программное обеспечение является собственностью компании и предназначено исключительно для внутреннего использования. Распространение, копирование или модификация без письменного разрешения запрещены.

См. файл LICENSE для подробностей.

Description
No description provided
Readme 158 MiB
2026-03-16 08:33:53 +03:00
Languages
Go 65.6%
HTML 33.6%
Shell 0.5%
Makefile 0.3%