Добавить загрузку XLSX-отчёта ВТБ Брокер #46
Reference in New Issue
Block a user
Delete Branch "feature/broker-xlsx-upload"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Следующий этап Issue #43: одна кнопка импорта теперь принимает
broker.xlsx. Backend на стандартном zlib разбирает текущий формат VTB, сначала импортирует портфель и затем cash-операции, поэтому счёт сразу имеет тип «Брокерский». UI показывает результаты cash, сделок и позиций раздельно.Проверки: сборки shared/backend/frontend проходят; converter обработал реальный
temp/broker.xlsx(29 cash-операций, 25 сделок, 2 позиции, closing 9337 коп.).Независимое ревью: найдены блокирующие замечания.
zipFilesраспаковывает все записи ZIP до проверки нужных путей и без общего лимита на распакованный объём. Файл до 15 MiB может содержать много deflate-записей и исчерпать память процесса. Нужен лимит на суммарную распаковку/число записей и распаковывать только необходимые XML./api/import/brokerсначала коммититimportPortfolio, затем отдельно запускаетimportStatement. Если cash-импорт вернёт validation error или произойдёт сбой БД, клиент получит ошибку, но portfolio report/сделки уже сохранены. Нужна одна транзакция на оба импорта (либо иной явный механизм компенсации).Сборки shared/backend/frontend проходят; версии согласованы. После исправлений также нужен changelog для версий 0.11.0/0.12.0/0.6.0 и повторное ревью.
Повторное независимое ревью коммита
12d096b.Исправлено: маршрут теперь владеет одной транзакцией, а
importPortfolio/importStatementкорректно не начинают, не коммитят и не освобождают переданный client; автономныйtest:broker:xlsxдобавлен и проходит.Остался блокер: лимит распаковки можно обойти.
totalSizeскладывает заявленный в central directoryuncompressedSize, но затемinflateRawSyncраспаковывает безmaxOutputLengthи результат не сверяется с заявленным размером. Архив с нулевыми/малыми размерами в central directory и бо́льшими deflate-потоками пройдёт лимит 30 MiB (вплоть до памяти процесса). Нужен лимит по фактически распакованным байтам — передавать оставшийся budget вinflateRawSyncи/или проверятьdata.length, а также тест на этот случай.Также для текущих версий по-прежнему отсутствует changelog. Других блокирующих регрессий не выявлено.
Финальное независимое ревью полного PR после
ef77322завершено без блокирующих замечаний.Предыдущие замечания устранены: лимит применяется к фактическому результату каждого
inflateRawSyncчерез оставшийсяmaxOutputLengthи суммируется поcontent.length, поэтому данные central directory его не обходят; portfolio и cash выполняются в одной внешней транзакции; автономныйtest:broker:xlsxпроходит. Changelog содержит корректную запись для Frontend 0.12.0 / Backend 0.11.0 / Shared 0.6.0 и описывает XLSX-импорт.Проверил: сборки shared, backend и frontend проходят; реальный
temp/broker.xlsxдаёт 29 cash-операций, 25 сделок, 2 позиции и closing 9337 коп. PR готов к merge.