- Rename cmd/server to cmd/qfs for shorter binary name - Update all documentation references (README, CLAUDE.md, etc.) - Update build commands to output bin/qfs - Binary name now matches directory name Usage: go run ./cmd/qfs # Development go build -o bin/qfs ./cmd/qfs # Production Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
259 lines
8.9 KiB
Markdown
259 lines
8.9 KiB
Markdown
# 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. Клонирование репозитория
|
||
|
||
```bash
|
||
git clone https://github.com/your-company/quoteforge.git
|
||
cd quoteforge
|
||
```
|
||
|
||
### 2. Настройка конфигурации
|
||
|
||
```bash
|
||
cp config.example.yaml config.yaml
|
||
```
|
||
|
||
Отредактируйте `config.yaml`:
|
||
|
||
```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. Миграции базы данных
|
||
|
||
```bash
|
||
go run ./cmd/qfs -migrate
|
||
```
|
||
|
||
### 4. Импорт метаданных компонентов
|
||
|
||
```bash
|
||
go run ./cmd/importer
|
||
```
|
||
|
||
### 5. Запуск
|
||
|
||
```bash
|
||
# Development
|
||
go run ./cmd/qfs
|
||
|
||
# Production
|
||
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/qfs ./cmd/qfs
|
||
./bin/qfs
|
||
```
|
||
|
||
Приложение будет доступно по адресу: http://localhost:8080
|
||
|
||
## Docker
|
||
|
||
```bash
|
||
# Сборка образа
|
||
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:
|
||
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Manual Cron Job Execution
|
||
|
||
You can also run cron jobs manually using the quoteforge-cron binary:
|
||
|
||
```bash
|
||
# 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
|
||
|
||
## Разработка
|
||
|
||
```bash
|
||
# Запуск в режиме разработки (hot reload)
|
||
go run ./cmd/qfs
|
||
|
||
# Запуск тестов
|
||
go test ./...
|
||
|
||
# Сборка для Linux
|
||
CGO_ENABLED=0 go build -ldflags="-s -w" -o bin/qfs ./cmd/qfs
|
||
```
|
||
|
||
## Переменные окружения
|
||
|
||
| Переменная | Описание | По умолчанию |
|
||
|------------|----------|--------------|
|
||
| `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](LICENSE) для подробностей.
|