- 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>
4.9 KiB
4.9 KiB
Миграция: Функционал пересчета цен в конфигураторе
Описание изменений
Добавлен функционал автоматического обновления цен компонентов в сохраненных конфигурациях.
Новые возможности
-
Кнопка "Пересчитать цену" на странице конфигуратора
- Обновляет цены всех компонентов в конфигурации до актуальных значений из базы данных
- Сохраняет количество компонентов, обновляя только цены
- Отображает время последнего обновления цен
-
Поле
price_updated_atв таблице конфигураций- Хранит дату и время последнего обновления цен
- Отображается на странице конфигуратора в удобном формате ("5 мин. назад", "2 ч. назад" и т.д.)
Изменения в базе данных
Добавлено новое поле в таблицу qt_configurations:
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 или выше
Ответ:
{
"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. Обновление базы данных
Запустите сервер с флагом миграции:
./quoteforge -migrate -config config.yaml
Или выполните SQL миграцию вручную:
mysql -u user -p RFQ_LOG < migrations/004_add_price_updated_at.sql
2. Перезапуск сервера
После применения миграции перезапустите сервер:
./quoteforge -config config.yaml
Использование
- Откройте любую сохраненную конфигурацию в конфигураторе
- Нажмите кнопку "Пересчитать цену" рядом с кнопкой "Сохранить"
- Все цены компонентов будут обновлены до актуальных значений
- Конфигурация автоматически сохраняется с обновленными ценами
- Под кнопками отображается время последнего обновления цен
Технические детали
Измененные файлы
internal/models/configuration.go- добавлено полеPriceUpdatedAtinternal/services/configuration.go- добавлен методRefreshPrices()internal/handlers/configuration.go- добавлен обработчикRefreshPrices()cmd/qfs/main.go- добавлен маршрут/api/configs/:uuid/refresh-pricesweb/templates/index.html- добавлена кнопка и JavaScript функцииmigrations/004_add_price_updated_at.sql- SQL миграцияCLAUDE.md- обновлена документация
Логика обновления цен
- Получение конфигурации по UUID
- Проверка прав доступа (пользователь должен быть владельцем)
- Для каждого компонента в конфигурации:
- Получение актуальной цены из
qt_lot_metadata.current_price - Обновление
unit_priceв items
- Получение актуальной цены из
- Пересчет
total_priceс учетомserver_count - Установка
price_updated_atна текущее время - Сохранение конфигурации
Обработка ошибок
- Если компонент не найден или у него нет цены - сохраняется старая цена
- При ошибках доступа возвращается 403 Forbidden
- При отсутствии конфигурации возвращается 404 Not Found
Отмена изменений (Rollback)
Для отмены миграции выполните:
ALTER TABLE qt_configurations DROP COLUMN price_updated_at;
Внимание: После отмены миграции функционал пересчета цен перестанет работать корректно.