fix: потоковая отправка прогресса создания прайслиста и исправление маппинга колонки категории

Две ключевые исправления:

1. Потоковая отправка прогресса создания (SSE):
   - Эндпоинт CreateWithProgress теперь отправляет Server-Sent Events
     вместо возврата JSON с task_id
   - Полирует статус задачи и отправляет обновления прогресса в реальном времени
   - Отправляет финальное событие с данными прайслиста или ошибкой
   - Фронтенд уже ожидал этого формата SSE

2. Исправление маппинга колонки lot_category:
   - Добавлен явный тег column в поле Category модели PricelistItem
     чтобы маппиться на колонку 'lot_category' в БД
   - Категория теперь хранится как снимок в таблице pricelist_items
   - Обновлены запросы репозитория для использования сохраненной
     категории вместо динамических JOIN с таблицей lot

Это исправляет ошибки:
- "Создание прервано: не получен результат" (фронтенд ожидал streaming)
- "Unknown column 'category' in 'INSERT INTO'" (несоответствие схемы БД)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Mikhail Chusavitin
2026-02-10 15:17:16 +03:00
parent 7d671203d7
commit c47c93ab31
6 changed files with 148 additions and 11 deletions

View File

@@ -65,12 +65,15 @@ type PricelistItem struct {
MetaPrices string `gorm:"size:1000" json:"meta_prices,omitempty"`
// Virtual fields for display (not stored in qt_pricelist_items table)
// LotDescription and Category are populated via JOIN in SQL queries
// LotDescription is populated via JOIN in SQL queries
// AvailableQty and Partnumbers are populated programmatically
LotDescription string `gorm:"-" json:"lot_description,omitempty"`
Category string `gorm:"-" json:"category,omitempty"`
AvailableQty *float64 `gorm:"-" json:"available_qty,omitempty"`
Partnumbers []string `gorm:"-" json:"partnumbers,omitempty"`
// Historical snapshot of category at time pricelist was created
// (not fetched dynamically from lot table)
Category string `gorm:"column:lot_category;size:50" json:"category,omitempty"`
}
func (PricelistItem) TableName() string {