Files
QuoteForge/MIGRATION_PRICE_REFRESH.md
Mikhail Chusavitin fa0f5e321d refactor: rename binary from quoteforge to qfs
- 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>
2026-02-03 10:55:14 +03:00

4.9 KiB
Raw Blame History

Миграция: Функционал пересчета цен в конфигураторе

Описание изменений

Добавлен функционал автоматического обновления цен компонентов в сохраненных конфигурациях.

Новые возможности

  1. Кнопка "Пересчитать цену" на странице конфигуратора

    • Обновляет цены всех компонентов в конфигурации до актуальных значений из базы данных
    • Сохраняет количество компонентов, обновляя только цены
    • Отображает время последнего обновления цен
  2. Поле 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

Использование

  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)

Для отмены миграции выполните:

ALTER TABLE qt_configurations DROP COLUMN price_updated_at;

Внимание: После отмены миграции функционал пересчета цен перестанет работать корректно.