- 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>
122 lines
4.9 KiB
Markdown
122 lines
4.9 KiB
Markdown
# Миграция: Функционал пересчета цен в конфигураторе
|
||
|
||
## Описание изменений
|
||
|
||
Добавлен функционал автоматического обновления цен компонентов в сохраненных конфигурациях.
|
||
|
||
### Новые возможности
|
||
|
||
1. **Кнопка "Пересчитать цену"** на странице конфигуратора
|
||
- Обновляет цены всех компонентов в конфигурации до актуальных значений из базы данных
|
||
- Сохраняет количество компонентов, обновляя только цены
|
||
- Отображает время последнего обновления цен
|
||
|
||
2. **Поле `price_updated_at`** в таблице конфигураций
|
||
- Хранит дату и время последнего обновления цен
|
||
- Отображается на странице конфигуратора в удобном формате ("5 мин. назад", "2 ч. назад" и т.д.)
|
||
|
||
### Изменения в базе данных
|
||
|
||
Добавлено новое поле в таблицу `qt_configurations`:
|
||
```sql
|
||
ALTER TABLE qt_configurations
|
||
ADD COLUMN price_updated_at TIMESTAMP NULL DEFAULT NULL
|
||
AFTER server_count;
|
||
```
|
||
|
||
### Новый API endpoint
|
||
|
||
```
|
||
POST /api/configs/:uuid/refresh-prices
|
||
```
|
||
|
||
**Требования:**
|
||
- Авторизация: Bearer Token
|
||
- Роль: editor или выше
|
||
|
||
**Ответ:**
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"uuid": "...",
|
||
"name": "Конфигурация 1",
|
||
"items": [
|
||
{
|
||
"lot_name": "CPU_AMD_9654",
|
||
"quantity": 2,
|
||
"unit_price": 11500.00
|
||
}
|
||
],
|
||
"total_price": 23000.00,
|
||
"price_updated_at": "2026-01-31T12:34:56Z",
|
||
...
|
||
}
|
||
```
|
||
|
||
## Применение изменений
|
||
|
||
### 1. Обновление базы данных
|
||
|
||
Запустите сервер с флагом миграции:
|
||
```bash
|
||
./quoteforge -migrate -config config.yaml
|
||
```
|
||
|
||
Или выполните SQL миграцию вручную:
|
||
```bash
|
||
mysql -u user -p RFQ_LOG < migrations/004_add_price_updated_at.sql
|
||
```
|
||
|
||
### 2. Перезапуск сервера
|
||
|
||
После применения миграции перезапустите сервер:
|
||
```bash
|
||
./quoteforge -config config.yaml
|
||
```
|
||
|
||
## Использование
|
||
|
||
1. Откройте любую сохраненную конфигурацию в конфигураторе
|
||
2. Нажмите кнопку **"Пересчитать цену"** рядом с кнопкой "Сохранить"
|
||
3. Все цены компонентов будут обновлены до актуальных значений
|
||
4. Конфигурация автоматически сохраняется с обновленными ценами
|
||
5. Под кнопками отображается время последнего обновления цен
|
||
|
||
## Технические детали
|
||
|
||
### Измененные файлы
|
||
|
||
- `internal/models/configuration.go` - добавлено поле `PriceUpdatedAt`
|
||
- `internal/services/configuration.go` - добавлен метод `RefreshPrices()`
|
||
- `internal/handlers/configuration.go` - добавлен обработчик `RefreshPrices()`
|
||
- `cmd/qfs/main.go` - добавлен маршрут `/api/configs/:uuid/refresh-prices`
|
||
- `web/templates/index.html` - добавлена кнопка и JavaScript функции
|
||
- `migrations/004_add_price_updated_at.sql` - SQL миграция
|
||
- `CLAUDE.md` - обновлена документация
|
||
|
||
### Логика обновления цен
|
||
|
||
1. Получение конфигурации по UUID
|
||
2. Проверка прав доступа (пользователь должен быть владельцем)
|
||
3. Для каждого компонента в конфигурации:
|
||
- Получение актуальной цены из `qt_lot_metadata.current_price`
|
||
- Обновление `unit_price` в items
|
||
4. Пересчет `total_price` с учетом `server_count`
|
||
5. Установка `price_updated_at` на текущее время
|
||
6. Сохранение конфигурации
|
||
|
||
### Обработка ошибок
|
||
|
||
- Если компонент не найден или у него нет цены - сохраняется старая цена
|
||
- При ошибках доступа возвращается 403 Forbidden
|
||
- При отсутствии конфигурации возвращается 404 Not Found
|
||
|
||
## Отмена изменений (Rollback)
|
||
|
||
Для отмены миграции выполните:
|
||
```sql
|
||
ALTER TABLE qt_configurations DROP COLUMN price_updated_at;
|
||
```
|
||
|
||
**Внимание:** После отмены миграции функционал пересчета цен перестанет работать корректно.
|