session-05: дополнено шагами 6-8 (таймаут, findRowByName, баги)

This commit is contained in:
“Naeel”
2026-06-16 15:19:09 +04:00
parent e14b9f9523
commit 993323c0ba
+48 -2
View File
@@ -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)` — повторные запуски создадут несколько строк-итогов (допустимо)