session-05: дополнено шагами 6-8 (таймаут, findRowByName, баги)
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
# Сессия #5 — SSE-парсинг, интерактивный прогресс, отказ от LLM
|
||||
|
||||
_Дата: 2026-06-16_
|
||||
_Версия: v1.0 → v1.5 (5 повышений)_
|
||||
_Коммиты: fa4c7fe → 435f617 (6 шт.)_
|
||||
_Версия: v1.0 → v1.8 (8 повышений)_
|
||||
_Коммиты: fa4c7fe → e0c58fc (8 шт.)_
|
||||
|
||||
---
|
||||
|
||||
@@ -111,3 +111,49 @@ _parse():
|
||||
3. **ZIP требует особой обработки.** Недостаточно просто распарсить — нужно создать документы для каждого файла внутри.
|
||||
4. **Имена должны совпадать** между клиентом (JSZip) и сервером (zipfile) — иначе `findRowByName` не находит строку.
|
||||
5. **`replace_string_in_file` портит файлы** — для больших правок использовать heredoc (`cat > file`).
|
||||
|
||||
---
|
||||
|
||||
## Шаг 6: Таймаут при загрузке (v1.6, 64b2295)
|
||||
|
||||
**Проблема:** Все файлы отправлялись одним POST-запросом → >30с → Ingress убивал соединение → «NetworkError when attempting to fetch resource». Никакого прогресса загрузки не было видно.
|
||||
|
||||
**Решение:**
|
||||
- `_upload_files` поддерживает `?cid=X` — первый файл создаёт договор, остальные добавляются
|
||||
- Клиент: загрузка по одному файлу через XHR с `upload.onprogress`
|
||||
- Прогресс: ↑ 0% → ↑ 45% → ↑ 100% → ✓ загружен
|
||||
- XHR таймаут: 60 секунд на файл
|
||||
- Размеры файлов из ZIP — через `zipEntry._data.uncompressedSize`
|
||||
- Размеры выровнены вправо (`.num-cell`)
|
||||
|
||||
---
|
||||
|
||||
## Шаг 7: Прогресс для файлов из ZIP не показывался (v1.7, c710a2d)
|
||||
|
||||
**Проблема:** `findRowByName` имел условие `&& !fileQueue[i].isZipChild`, поэтому
|
||||
SSE-события для файлов из ZIP не находили строку в таблице — статус оставался пустым.
|
||||
|
||||
**Причина:** в v1.6 `findRowByName` использовалась и для upload (realFiles)
|
||||
и для parse (все файлы). Фильтр защищал от нахождения zip-child при upload,
|
||||
но ломал parse.
|
||||
|
||||
**Решение:** убрать `!fileQueue[i].isZipChild`. Для upload это безопасно —
|
||||
`realFiles` и так фильтрует `!isZipChild` перед вызовом.
|
||||
|
||||
**БД:** проверена — все 5 файлов из ZIP созданы, 4 распарсены, 1 .doc с пустым parsed_text (нет LibreOffice).
|
||||
|
||||
---
|
||||
|
||||
## Шаг 8: Баги после полной проверки (v1.8, e0c58fc)
|
||||
|
||||
**Баг 1 — `zip_expanded` счётчик:** `zip_names.append(zname)` стоял ДО фильтра PDF/Word,
|
||||
поэтому «↗ N файлов» включал .txt, .xlsx и т.д. **Исправлено:** перенос после фильтра.
|
||||
|
||||
**Баг 2 — повторный `_parse` пересоздаст ZIP-файлы:** проверка `status='parsed'` пропускала
|
||||
только распарсенные, но ZIP имеют статус `expanded`. При повторном вызове `_parse`
|
||||
ZIP обрабатывался заново, создавая дубликаты. **Исправлено:** `status IN ('parsed','expanded')`.
|
||||
|
||||
**Другие проверки (без ошибок):**
|
||||
- `resetBtn()` — function declaration, hoisting работает, вызов до определения корректен
|
||||
- `removeFile` — удаление детей перед родителем, индексы не смещаются (дети всегда после родителя)
|
||||
- `fileTable.appendChild(summaryRow)` — повторные запуски создадут несколько строк-итогов (допустимо)
|
||||
|
||||
Reference in New Issue
Block a user